2014-05-06 12 views
16

Przeglądałem dokumenty AVPlayerItem i AVPlayer i nie wydaje się, aby były jakiekolwiek wywołania zwrotne, gdy element zostanie zakończony. Miałem nadzieję, że będzie jakiś delegowany oddzwaniacz, który będziemy mogli wykorzystać lub który zapewni nam niestandardową akcję do napisania.Jak wykrywać zakończenie odtwarzania elementu AVPlayerItem?

W jaki sposób mogę znaleźć sposób na wykrycie, kiedy AVPlayer zakończył odtwarzanie elementu?

Odpowiedz

38

Używa ona NSNotification do powiadamiania o zakończeniu odtwarzania.

Rejestracja na zgłoszenia:

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

Metoda zadzwonić po zakończeniu:

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

można użyć '[avPlayer currentItem]' jeśli używasz AVPlayerViewController – abhi1992

5

Swift-i-fied (wersja 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) 
    } 

} 
+0

dobra odpowiedź, ale pamiętaj, aby powołać removeObserver (_: Nazwa: obiekt :) przed obserwatora lub dowolnego obiektu określonego w addObserver: selektor: Nazwa: obiekt : jest dealokowany. – pierre23

0

To jak to zrobiłem to.

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


- (void)movieFinishedCallback:(NSNotification*)aNotification 
{ 
    // [self dismissViewControllerAnimated:YES completion:Nil]; 
} 
Powiązane problemy