Unterschiede zwischen AVPlayer und MPMoviePlayerController [geschlossen]

87

Ich entwickle eine iPhone-Anwendung, die Videos abspielen muss. Bisher habe ich erfahren, dass es mindestens zwei APIs gibt, um dies zu erreichen. AVPlayerund MPMoviePlayerController.

Was sind die Hauptunterschiede?

suse
quelle
4
Es wurde versucht, diese Frage neu zu formulieren, um sicherzustellen, dass keine meinungsbasierten Antworten generiert werden.
Bis zum

Antworten:

173

HINWEIS ab iOS9, hat Apple die MPMoviePlayerController veraltet:

Die MPMoviePlayerController-Klasse ist in iOS 9 formal veraltet. (Die MPMoviePlayerViewController-Klasse ist ebenfalls formal veraltet.) Verwenden Sie zum Abspielen von Videoinhalten in iOS 9 und höher stattdessen die AVPictureInPictureController- oder AVPlayerViewController-Klasse aus dem AVKit-Framework oder die WKWebV-Klasse.

Von der MPMoviePlayerController-Referenz kopiert .

AVPlayer

AVPlayergibt Ihnen viel mehr Flexibilität, ist aber ziemlich schlecht dokumentiert. Wenn Sie diese API verwenden, müssen Sie eine eigene Benutzeroberfläche erstellen. AVFoundation(das Framework, das Sie bringt AVPlayer) ist im Allgemeinen etwas schwierig für den Benutzer (Codierer), da es Sie dazu zwingt, Key-Value Observing häufig zum Überprüfen von Zuständen zu verwenden. Das Konzept von KVO ist großartig, verstehen Sie mich nicht falsch - dennoch kann es für unerfahrene Entwickler schmerzhaft sein, etwas zu lernen. Apple lässt manchmal die Informationen aus, welche Eigenschaften tatsächlich KVO-konform sind, und das zwingt Sie zu Experimenten.

Ein großer Vorteil von AVPlayerover MPMoviePlayerControllerwäre zum Beispiel die erweiterte Version, AVQueuePlayerda man mehrere Filmquellen lückenlos wiedergeben kann. Ein weiterer Vorteil ist sicherlich das AVFoundationfunktionsreiche Framework, mit dem Sie beispielsweise Filmkompositionen / -codierungen / -konvertierungen im laufenden Betrieb durchführen können.

Ein weiterer großer Vorteil AVPlayerist die Tatsache, dass Sie problemlos mehrere Videoquellen gleichzeitig (z. B. nebeneinander) abspielen können.

MPMoviePlayerController

MPMoviePlayerControllerist einfach zu bedienen und deckt die meisten Anforderungen sofort ab. Durch die Verwendung dieser API erhalten Sie eine gut aussehende und allgemein verständliche Benutzeroberfläche. Die Benutzeroberfläche kann jedoch deaktiviert und / oder durch eine benutzerdefinierte ersetzt werden.

MPMoviePlayerControllerVerwendet für Statusänderungen einige, NSNotificationsdie alles abdecken, was die reguläre App benötigt.

Baut unter der Haube MPMoviePlayerControllerauf AVPlayer- aber das geschieht tatsächlich völlig transparent für den Benutzer - haben Sie während der Verwendung keinen Zugriff auf diese Ebene MPMoviePlayerController.

MPMoviePlayerControllerVerwendet die Unterlage AVPlayerals Singleton-Instanz, daher ist es nicht möglich, mehrere Instanzen von MPMoviePlayerControllerzu verwenden, um Videos gleichzeitig abzuspielen.

Auf der anderen Seite wird MPMoviePlayerControllerCode schnell unangenehm , sobald Sie versuchen, die Funktionalität mit Ihren eigenen Funktionen zu erweitern - z. B. werden Sie möglicherweise mehrere Timer verwenden, um Dinge wie eine ordnungsgemäße Hungererkennung abzudecken (tatsächlich wurde diese Funktion aufgenommen in iOS5-Version dieser Klasse), benutzerdefinierte UI-Updates, ... oder Sie haben möglicherweise mehr als eine Handvoll Statuseigenschaften, die versuchen, Dinge wie das ordnungsgemäße Abbrechen der Wiedergabe abzudecken, während der Player noch vorpuffert.


Persönliche Empfehlung

Ich habe beide verwendet und werde beide weiterhin verwenden, abhängig von den Anforderungen der App, die ich erstellen möchte. Für die meisten (einfachen) Projekte würde ich die Verwendung von MPMoviePlayerControllerover empfehlen, AVPlayerda es sehr einfach zu verwenden ist und Sie mit nur wenigen Codezeilen einen vollwertigen Mediaplayer erhalten. Und wenn Ihre Anforderungen an die Medienwiedergabe noch einfacher sind, werfen Sie einen Blick darauf MPMoviePlayerViewController(beachten Sie den View-Teil).

Bis
quelle
2
Mit AVPlayer können Sie auch automatisch Ebenenanimationen verwenden. Wenn Sie Core Animation im Hintergrund ausführen möchten, verwenden Sie keinen MPMoviePlayerController, obwohl dieser möglicherweise aktiviert ist. Beachten Sie dies jedoch, wenn Sie CALayer-Inhalte verwenden
Stephen J
3
Nein, die Antwort ist richtig. Die MPMoviePlayerController-Benutzeroberfläche kann deaktiviert und / oder durch eine benutzerdefinierte ersetzt werden.
Dave Batton
1
@Besi nein, völlig korrekt wie geschrieben - es kann definitiv deaktiviert (mit MPMovieControlStyleNone) und daher ersetzt werden, da Sie nichts daran hindert, Ihre eigene Ansicht als Geschwister der Ansicht von MPMoviePlayerController oder direkt auf dessen Ansicht hinzuzufügen backgroundView.
Bis zum
8
Ab iOS 9 ist MPMoviePlayerController veraltet und daher sollten Sie AVPlayer für zukünftige Projekte verwenden
Lewis
1
Das sind super wertvolle Informationen @ lewis42 - werden sie zu meinem alten Beitrag hinzufügen :)
Bis zum