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?
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?
Antworten:
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
gibt 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 AVPlayer
over MPMoviePlayerController
wäre zum Beispiel die erweiterte Version, AVQueuePlayer
da man mehrere Filmquellen lückenlos wiedergeben kann. Ein weiterer Vorteil ist sicherlich das AVFoundation
funktionsreiche Framework, mit dem Sie beispielsweise Filmkompositionen / -codierungen / -konvertierungen im laufenden Betrieb durchführen können.
Ein weiterer großer Vorteil AVPlayer
ist die Tatsache, dass Sie problemlos mehrere Videoquellen gleichzeitig (z. B. nebeneinander) abspielen können.
MPMoviePlayerController
ist 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.
MPMoviePlayerController
Verwendet für Statusänderungen einige, NSNotifications
die alles abdecken, was die reguläre App benötigt.
Baut unter der Haube MPMoviePlayerController
auf 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
.
MPMoviePlayerController
Verwendet die Unterlage AVPlayer
als Singleton-Instanz, daher ist es nicht möglich, mehrere Instanzen von MPMoviePlayerController
zu verwenden, um Videos gleichzeitig abzuspielen.
Auf der anderen Seite wird MPMoviePlayerController
Code 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 MPMoviePlayerController
over empfehlen, AVPlayer
da 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).
backgroundView
.