Текущий элемент AVQueuePlayer изменен

Я использую QueuePlayer для воспроизведения списка песен, и песни воспроизводятся. Моя проблема в том, что я пытаюсь отслеживать всякий раз, когда изменяется текущий элемент. Я пытаюсь добавить наблюдателя в QueuePlayer, но это не работает. Функция наблюдения не вызывается. Любая помощь будет оценена

Наблюдатель

 queuePlayer.currentItem?.addObserver(self, forKeyPath: "currentItem", options: [.new, .old], context: nil)
    }

Прослушивание наблюдателя // Не вызывается при изменении элемента

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "currentItem" {
        if let oldItem = change?[NSKeyValueChangeKey.oldKey] as? AVPlayerItem {
            print("Old item : \(oldItem)")
        }

        if let newItem = change?[NSKeyValueChangeKey.newKey] as? AVPlayerItem {
            print("New item : \(newItem)")
        }    
    }
}

person Iam Wayne    schedule 21.08.2018    source источник


Ответы (2)


Ваш код наблюдает за свойством currentItem queuePlayer.currentItem.

Чтобы наблюдать свойство currentItem queuePlayer, необходимо

queuePlayer.addObserver(self, forKeyPath: "currentItem", …

или еще лучше, для проверки времени компиляции…

queuePlayer.addObserver(self, forKeyPath: #keyPath(AVQueuePlayer.currentItem), …
person Ashley Mills    schedule 21.08.2018
comment
Спасибо за ваш ответ. Я попробовал ваш ответ queuePlayer.addObserver(self, forKeyPath: currentItem, … Это не сработало, функция наблюдателя все еще не вызывается. - person Iam Wayne; 21.08.2018

Если вам нужно знать, когда закончилось воспроизведение элемента, вы можете сделать что-то вроде.

Внутри вашего viewdidload() добавьте наблюдателя

NotificationCenter.default.addObserver(self, selector: #selector(itemDidPlayToEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

@objc func itemDidPlayToEnd() {

    //your item played to end
  }

Я только что убедился, что он работает нормально

Это также может быть полезно

person Awais Fayyaz    schedule 14.02.2019