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?
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?
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 .
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.
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).
backgroundView.