UISlider с прогрессом буферизации - AVPlayer

введите описание изображения здесьЯ использую AVPlayer для потоковой передачи аудио с сервера, и сейчас я хочу показать настраиваемый UISlider, который показывает ход буферизации.

Кто-нибудь придумал это? Пожалуйста, дайте мне решение. Теперь плеер загружает всю продолжительность за один раз и показывает в UISlider.


person iHarshad    schedule 30.08.2018    source источник
comment
Можно ли приостановить и возобновить буферизацию AVPlayer?   -  person iHarshad    schedule 31.08.2018


Ответы (1)


вам нужно использовать preferredforwardbufferduration

Это свойство определяет предпочтительную продолжительность буфера пересылки в секундах. Если установлено значение 0, игрок выберет подходящий уровень буферизации для большинства случаев использования. Установка для этого свойства низкого значения повысит вероятность остановки воспроизведения и повторной буферизации, а установка высокого значения увеличит потребность в системных ресурсах.

также проверьте здесь подробный пример того, как использовать: можно ли приостановить и возобновить буферизацию AVPlayer?

внутри вашего плеера вам нужно соблюдать временной диапазон, используя функцию ниже

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)

нравится:

            let timeRanges = change![NSKeyValueChangeKey.newKey] as? NSArray
        if timeRanges != nil && timeRanges!.count != 0 {
            DispatchQueue.main.async {
                let cmTimeRange = (timeRanges![0] as AnyObject).timeRangeValue as CMTimeRange
                self.playerView.timeSlider.bufferValue = Float(CMTimeGetSeconds(cmTimeRange.start) + CMTimeGetSeconds(cmTimeRange.duration))
            }
        }

У меня есть собственный ползунок с переменной, которую я определил как bufferValue, вы можете переопределить func draw(_ rect: CGRect)внутри своего ползунка и применить изменения во время работы буфера.

Я заставлю draw звонить в любое время, когда bufferValue изменится, позвонив self.setNeedsDisplay()внутри didSet

    @IBInspectable var bufferValue : Float = 0 {
    didSet {
        if(bufferValue < 0 ) {
            bufferValue = 0
        } else if (bufferValue > maximumValue) {
            bufferValue = maximumValue
        }
        self.setNeedsDisplay()
    }
}
person MohyG    schedule 01.09.2018