3 votes

Ajouter un observateur à AVPlayer provoque un crash sans affichage dans la console

Je cherche à ajouter un observateur à mon AVPlayer en swift qui permet de lire lorsque la vidéo commence à jouer pour contrôler d'autres fonctions sur mon lecteur. Lorsque j'exécute le code suivant :

func setUpPlayer() {
     if let url = URL(string: urlString) {
        player = AVPlayer(url: url)
        let playerLayer = AVPlayerLayer(player: player)
        self.layer.addSublayer(playerLayer)
        playerLayer.frame = self.frame
        player?.play()
        player?.addObserver(self, forKeyPath: "currentItem.loadedTimeRanges", options: .new, context: nil)
        }
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "currentItem.loadedTimeRanges" {
           print(change)
        }
    }

Mon application plante sans explication dans la console. J'ai trouvé la ligne de code qui en est la cause :

player?.addObserver(self, forKeyPath: "currentItem.loadedTimeRanges", options: .new, context: nil)

Mais je ne suis pas sûr de la raison de ce plantage. Des idées sur ce qui pourrait en être la cause ?

1voto

gcharita Points 474

Vous pouvez essayer d'utiliser la nouvelle méthode de KVO depuis swift 4.

Pour observer la propriété loadedTimeRanges du player's currentItem, vous pouvez simplement faire ceci :

observation = player?.currentItem?.observe(
    \.loadedTimeRanges,
    options: .new
) { (item: AVPlayerItem, value: NSKeyValueObservedChange<[NSValue]>) in
    print("loadedTimeRanges: \(value.newValue ?? [])")
}

Gardez la référence retournée observation aussi longtemps que vous souhaitez observer la propriété. Pour arrêter manuellement l'observation, il vous suffit de définir la référence observation sur nil:

observation = nil

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X