MPMoviePlayerController sendet "Ende des Films erreicht", wenn die URL geändert wird

9

Ich versuche, eine Benachrichtigung von einem MPMoviePlayerController zu erhalten, wenn der Film sein Ende erreicht hat. Ich starte den Player im eingebetteten Modus mit einer lokalen Datei.

Wie die Dokumente vorschlagen, habe ich mich für MPMoviePlayerPlaybackDidFinishNotification registriert und überprüft, ob der MPMovieFinishReason-Schlüssel den intValue von MPMovieFinishReasonPlaybackEnded enthält. Das funktioniert gut.

Aber ich bekomme die gleiche Benachrichtigung mit MPMovieFinishReasonPlaybackEnded, wenn ich den Film mit der contentURL-Eigenschaft umschalte, bevor er tatsächlich sein Ende erreicht hat. Also habe ich diese Lösung ausprobiert und geprüft, ob endPlaybackTime == - 1, aber das ist in beiden Fällen wahr.

Die einzige Problemumgehung, die ich bisher gefunden habe, ist, den Beobachter zu entfernen, bevor ich contentURL ändere, und ihn dann wieder hinzufüge, aber ich denke, dass es eine elegantere Lösung geben muss?

    
Dorian Roy 15.11.2011, 15:19
quelle

2 Antworten

0

Es scheint so zu funktionieren, dass Sie einfach denObserver entfernen, die Wiedergabe stoppen / die URL ändern und dann denObserver erneut hinzufügen.

    
Andrew 08.07.2012, 07:24
quelle
0

Nach der Dokumentation scheint Ihr beobachtetes Verhalten das richtige Verhalten zu sein. Ich denke, dass Ihre Lösung, um Benachrichtigungen zu erhalten, eine gute sein könnte. Ja, es ist ein bisschen hacky, aber es scheint, als würde es funktionieren.

Oder: Wie wäre es, wenn Sie die URL der gespielten Filme speichern und mit [moviePlayer contentURL] vergleichen? Sie müssen vielleicht einige Timer-Akrobatik machen und haben ein currentMovieURL und ein previousMovieURL , aber das sollte eine gute Möglichkeit bieten, zu vergleichen, ob der beendete Film der Film ist, den Sie voraussichtlich beenden.

Alternativ zu das , was ist mit der Einstellung von 2 Variablen: movieStartTime und expectedMovieDuration ? Dann können Sie [NSDate date] mit [movieStartTime dateByAddingTimeInterval:expectedMovieDuration] vergleichen und sehen, ob es weit weg ist.

    
mbm29414 04.05.2012 19:51
quelle