2016-08-10 17 views

ответ

16

Вы можете наблюдать значение ваших player.currentItem:

playerItem.addObserver(self, forKeyPath: "playbackBufferEmpty", options: .New, context: nil) 
playerItem.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .New, context: nil) 
playerItem.addObserver(self, forKeyPath: "playbackBufferFull", options: .New, context: nil) 

затем

override public func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if object is AVPlayerItem { 
     switch keyPath { 
      case "playbackBufferEmpty": 
       // Show loader 

      case "playbackLikelyToKeepUp": 
       // Hide loader 

      case "playbackBufferFull": 
       // Hide loader 
     } 
    } 
} 
10

Принятый ответ не работает для меня, я использовал код ниже, чтобы эффективно показать загрузчик.

Swift 3

//properties 
var observer:Any! 
var player:AVPlayer! 


self.observer = self.player.addPeriodicTimeObserver(forInterval: CMTimeMake(1, 600), queue: DispatchQueue.main) { 
    [weak self] time in 

    if self?.player.currentItem?.status == AVPlayerItemStatus.readyToPlay { 

     if let isPlaybackLikelyToKeepUp = self?.player.currentItem?.isPlaybackLikelyToKeepUp { 
      //do what ever you want with isPlaybackLikelyToKeepUp value, for example, show or hide a activity indicator. 
     } 
    } 
} 
+0

Уважаемый @aytek, вы не могли бы быть так добры и перевести ваше решение 'Swift 4'? :) – ixany

+0

Уважаемый @ixany, у меня не было возможности установить последнюю версию Xcode. Я добавлю версию Swift 4 как можно скорее. Спасибо за ваш комментарий. – aytek

+0

Что я наблюдал, так это то, что вам нужно зарегистрироваться в этих наблюдателях на экземпляре AVPlayerItem, а не в AVPlayer, иначе это не сработает. Фактически, принятый ответ делает это. – fasteque

0

Swift 4 наблюдения:

var playerItem: AVPlayerItem? 
var playbackLikelyToKeepUpKeyPathObserver: NSKeyValueObservation? 
var playbackBufferEmptyObserver: NSKeyValueObservation? 
var playbackBufferFullObserver: NSKeyValueObservation? 

private func observeBuffering() { 

    let playbackBufferEmptyKeyPath = \AVPlayerItem.playbackBufferEmpty 
    playbackBufferEmptyObserver = playerItem?.observe(playbackBufferEmptyKeyPath, options: [.new]) { [weak self] (_, _) in 
     //show buffering 
    } 

    let playbackLikelyToKeepUpKeyPath = \AVPlayerItem.playbackLikelyToKeepUp 
    playbackLikelyToKeepUpKeyPathObserver = playerItem?.observe(playbackLikelyToKeepUpKeyPath, options: [.new]) { [weak self] (_, _) in 
     //hide buffering 
    } 



    let playbackBufferFullKeyPath = \AVPlayerItem.playbackBufferFull 

    playbackBufferFullObserver = playerItem?.observe(playbackBufferFullKeyPath, options: [.new]) { [weak self] (_, _) in 
     //hide buffering 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^