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:
Von der MPMoviePlayerController-Referenz kopiert .
AVPlayer
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 bringtAVPlayer
) 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
overMPMoviePlayerController
wäre zum Beispiel die erweiterte Version,AVQueuePlayer
da man mehrere Filmquellen lückenlos wiedergeben kann. Ein weiterer Vorteil ist sicherlich dasAVFoundation
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
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
aufAVPlayer
- aber das geschieht tatsächlich völlig transparent für den Benutzer - haben Sie während der Verwendung keinen Zugriff auf diese EbeneMPMoviePlayerController
.MPMoviePlayerController
Verwendet die UnterlageAVPlayer
als Singleton-Instanz, daher ist es nicht möglich, mehrere Instanzen vonMPMoviePlayerController
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 daraufMPMoviePlayerViewController
(beachten Sie den View-Teil).quelle
backgroundView
.