web-dev-qa-db-de.com

Unterschiede zwischen AVPlayer und MPMoviePlayerController

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

Was sind die Hauptunterschiede?

86
suse

[~ # ~] Hinweis [~ # ~] ab iOS9, Apple) hat den 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 WKWebView-Klasse aus WebKit.

Kopiert aus der MPMoviePlayerController-Referenz .

AVPlayer

AVPlayer gibt Ihnen viel mehr Flexibilität, ist aber ziemlich schlecht dokumentiert. Wenn Sie diese API verwenden, müssen Sie Ihre eigene Benutzeroberfläche erstellen. AVFoundation (das Framework, das Ihnen AVPlayer bringt) ist im Allgemeinen für den Benutzer (Programmierer) etwas schwierig, da es Sie dazu zwingt, Schlüsselwertbeobachtung viel zu verwenden Zustände überprüfen. 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 Information aus, welche Eigenschaften tatsächlich KVO-konform sind, und das zwingt Sie zu Experimenten.

Ein großer Vorteil von AVPlayer gegenüber MPMoviePlayerController ist beispielsweise die erweiterte Version AVQueuePlayer, da mehrere Filmquellen lückenlos wiedergegeben werden können. Ein weiterer Vorteil ist sicherlich das funktionsreiche AVFoundation Framework, mit dem Sie Dinge wie das Erstellen/Codieren/Konvertieren von Filmen im Handumdrehen erledigen können.

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

MPMoviePlayerController

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

Für Statusänderungen verwendet MPMoviePlayerController einige NSNotifications, die alles abdecken, was die reguläre App benötigt.

Unter der Haube baut MPMoviePlayerController auf AVPlayer auf - aber das geschieht tatsächlich völlig transparent für den Benutzer - Sie haben keinen Zugriff auf diese Ebene, während Sie MPMoviePlayerController verwenden.

MPMoviePlayerController verwendet die unterlegte AVPlayer als Singleton-Instanz, daher ist es nicht möglich, mehrere Instanzen von MPMoviePlayerController gleichzeitig abzuspielen.

Auf der anderen Seite wird Code schnell unangenehm, sobald Sie versuchen, die Funktionalität von MPMoviePlayerController mit Ihren eigenen Funktionen zu erweitern - z. Möglicherweise werden Sie mehrere Timer verwenden, um Dinge wie eine ordnungsgemäße Verhungern-Erkennung (diese Funktion ist in iOS5s Version dieser Klasse enthalten), benutzerdefinierte UI-Updates usw. zu behandeln. Oder Sie haben möglicherweise mehr als eine Handvoll Status Eigenschaften, die versuchen, Dinge abzudecken, wie das ordnungsgemäße Abbrechen der Wiedergabe, während der Player noch vorpuffert.


Persönliche Empfehlung

Ich habe beide verwendet und werde sie auch weiterhin verwenden, je nach den Anforderungen der App, die ich gerne baue. Für die meisten (einfachen) Projekte würde ich empfehlen, MPMoviePlayerController anstelle von AVPlayer zu verwenden, da die Verwendung sehr einfach ist und Sie mit nur wenigen Codezeilen einen vollwertigen Media Player erhalten. Und wenn Ihre Anforderungen an die Medienwiedergabe noch einfacher sind, werfen Sie einen Blick auf MPMoviePlayerViewController (beachten Sie den View-Teil).

172
Till