AVPlayer показывает и скрывает индикатор загрузки при буферизацииIOS

Программируем под IOS
Ответить
Anonymous
 AVPlayer показывает и скрывает индикатор загрузки при буферизации

Сообщение Anonymous »

(ПРИМЕЧАНИЕ: я использую iOS 9 и выполняю потоковую передачу по HTTP)

У меня есть AVPlayer, и я хочу для отображения индикатора загрузки во время буферизации плеера. Когда игрок начинает играть при медленном соединении, вызывается KVO для следующих свойств:
isPlaybackBufferEmpty

isPlaybackLikelyToKeepUp

isPlaybackBufferFull

Проблема в том, что эти же свойства не вызываются снова после завершения буферизации (когда я говорю «готово», я имею в виду, что видео можно воспроизводить снова) .) Моя цель — скрыть индикатор загрузки в нужное время, чтобы они больше не вызывались.

Я искал в Интернете и нашел этот радар: http:// www.openradar.me/25931165
Не уверен, что это на 100% связано

Есть мысли?

// MARK: - Key-Value Observing Method

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(AVPlayerItem.status) {

switch playerItem.status {
case .unknown:
break

case .readyToPlay:
player.play()

case .failed:
postPlaybackDidFailWithErrorNotification(error: error)
}
}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackBufferEmpty) {
guard let currentItem = player.currentItem else {
return
}

if currentItem.isPlaybackBufferEmpty {
print("isPlaybackBufferEmpty = YES")
} else {
print("isPlaybackBufferEmpty = NO")
}
}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackLikelyToKeepUp) {
guard let currentItem = player.currentItem else {
return
}

if currentItem.isPlaybackLikelyToKeepUp {
print("isPlaybackLikelyToKeepUp = YES")
//player.play()
} else {
print("isPlaybackLikelyToKeepUp = NO")
}

}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackBufferFull) {
guard let currentItem = player.currentItem else {
return
}

if currentItem.isPlaybackBufferFull {
print("isPlaybackBufferFull = YES")
//player.play()
} else {
print("isPlaybackBufferFull = NO")
}
}
else if keyPath == #keyPath(AVPlayer.currentItem) {
// Cleanup if needed.
if player.currentItem == nil {
video = nil
playerItem = nil
}
}
else if keyPath == #keyPath(AVPlayer.rate) {
updateMetadata()
NotificationCenter.default.post(name: AssetPlaybackManager.NotificationName.playerRateDidChangeNotification, object: nil)
}
else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}


Подробнее здесь: https://stackoverflow.com/questions/427 ... -buffering
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»