web-dev-qa-db-fra.com

Comment détecter quand un AVPlayerItem est fini?

J'ai parcouru les docs AVPlayerItem et AVPlayer et il ne semble pas y avoir de rappel au moment de la lecture de l'élément. J'espérais qu'il y aurait une sorte de rappel de délégué que nous pourrions utiliser ou que AVPlayerActionAtItemEnd fournirait une action personnalisée que nous pourrions écrire.

Comment puis-je trouver un moyen de détecter quand AVPlayer a fini de lire un élément?

17
3254523

Il utilise NSNotification pour alerter lorsque la lecture est terminée.

Inscrivez-vous pour la notification:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];

Méthode à suivre lorsque vous avez terminé: 

-(void)itemDidFinishPlaying:(NSNotification *) notification {
    // Will be called when AVPlayer finishes playing playerItem
}
43
random

Swift-i-fied (version 3)

class MyVideoPlayingViewController: AVPlayerViewController {

    override func viewDidLoad() {
        // Do any additional setup after loading the view.
        super.viewDidLoad()

        let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "MyVideo", 
                                                                  ofType: "mp4")!)
        player = AVPlayer(url: videoURL)

        NotificationCenter.default.addObserver(self,
                                           selector: #selector(MyVideoPlayingViewController.animationDidFinish(_:)),
                                           name: .AVPlayerItemDidPlayToEndTime,
                                           object: player?.currentItem)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        player?.play()
    }

    func animationDidFinish(_ notification: NSNotification) {
        print("Animation did finish")
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

}
6
jhelzer

Voici comment je l'ai fait.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:AVPlayerItemDidPlayToEndTimeNotification object:player.currentItem];


- (void)movieFinishedCallback:(NSNotification*)aNotification
{
   // [self dismissViewControllerAnimated:YES completion:Nil];
}
0
nithinreddy