вам нужно использовать 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