Я пытаюсь создать видеоплеер с AVPlayer.Videos загрузить с youtube. Я хочу, когда текущее время видео изменится, мой uiSlider и моя метка времени могут обновиться. Я использую метод «observValueForKeyPath», чтобы получить статус «loadedTimeRanges» из позиции игрока. Вот мой код:Swift watchvalueforkeypath + loadedTimeRanges только называется ограниченным временем
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
print("keyPath: \(keyPath)")
let playerItem:AVPlayerItem = object as! AVPlayerItem
if keyPath == "status" {
if playerItem.status == AVPlayerItemStatus.ReadyToPlay{
print("AVPlayerItemStatusReadyToPlay")
} else if playerItem.status == AVPlayerItemStatus.Failed {
print("AVPlayerItemStatusFailed")
}
} else if keyPath == "loadedTimeRanges" {
let currentTime = playerItem.currentTime().seconds
let totalDuration = playerItem.duration.seconds
print("value: \(Float(currentTime/totalDuration))")
self.monitoringPlayback(player.currentItem!)
self.slider.setValue(Float(currentTime/totalDuration), animated: false)
}
}
func monitoringPlayback(playerItem:AVPlayerItem) {
let currentSecond:Double = playerItem.currentTime().seconds
self.updateVideoSlider(currentSecond)
let timeString = self.updateTime(playerItem.duration.seconds - currentSecond)
print("time string: \(timeString)")
self.lblTime.text = timeString
}
Однако метод «observeValueForKeyPath» вызывался только 20-22 раз каждый раз. Пожалуйста, проверьте скриншот журнала: https://gyazo.com/5ca57ba532689d83aea855ae41387f53 Это первый раз, когда я использую этот метод, поэтому, возможно, я не понял, как он работает. Если кто-нибудь знает это, пожалуйста, скажите мне, почему. Спасибо, что прочитал мой вопрос.
Если вы хотите знать, ток время воспроизведения, почему вы не используете метод 'currentTime' на' AVPlayer'? , Прямо сейчас вы наблюдаете диапазоны времени, которые были загружены для элемента. Когда вы закончите куски для загрузки, вы перестанете получать уведомление. –
Но как я могу узнать о событии изменения времени? – Ashley
Из документов 'Это свойство не является ключевым значением наблюдаемого; используйте addPeriodicTimeObserverForInterval: queue: usingBlock: или addBoundaryTimeObserverForTimes: queue: usingBlock: вместо. ' –