web-dev-qa-db-fra.com

Différences entre AVPlayer et MPMoviePlayerController

Je développe une application iPhone qui a besoin de lire des vidéos. Jusqu'à présent, j'ai appris qu'il existe au moins deux API pour y parvenir; AVPlayer et MPMoviePlayerController.

Quelles sont les principales différences?

86
suse

[~ # ~] note [~ # ~] à partir d'iOS9, Apple a déprécié le MPMoviePlayerController:

La classe MPMoviePlayerController est formellement déconseillée dans iOS 9. (La classe MPMoviePlayerViewController est également formellement déconseillée.) Pour lire du contenu vidéo dans iOS 9 et versions ultérieures, utilisez plutôt la classe AVPictureInPictureController ou AVPlayerViewController du framework AVKit ou la classe WKWebView de WebKit.

Copié à partir de référence MPMoviePlayerController .

AVPlayer

AVPlayer vous donne beaucoup plus de flexibilité mais est assez mal documenté. L'utilisation de cette API vous obligera à créer votre propre interface utilisateur. AVFoundation (le framework qui vous apporte AVPlayer) est généralement un peu dur pour l'utilisateur (codeur) car il vous oblige à utiliser Key-Value Observing beaucoup pour vérification des états. Le concept de KVO est génial, ne vous méprenez pas - encore, pour les développeurs inexpérimentés, cela peut être pénible à apprendre. Apple omet parfois les informations sur les propriétés qui sont réellement conformes à KVO et cela vous obligera à faire des expériences.

Un grand avantage de AVPlayer sur MPMoviePlayerController serait par exemple sa version étendue, AVQueuePlayer car celle-ci est capable de faire une lecture sans interruption de plusieurs sources de film. Un autre avantage est certainement le cadre riche en fonctionnalités AVFoundation vous permettant de faire des choses comme la composition/l'encodage/la conversion de films à la volée.

Encore un autre énorme avantage de AVPlayer est le fait que vous pouvez réellement lire plusieurs sources vidéo simultanément (par exemple côte à côte) sans aucun problème.

MPMoviePlayerController

MPMoviePlayerController est facile à utiliser et couvre la plupart des besoins hors de la boîte. L'utilisation de cette API vous donnera une interface utilisateur agréable et bien comprise. L'interface utilisateur peut cependant être désactivée et/ou remplacée par une interface personnalisée.

Pour les changements de statut, MPMoviePlayerController utilise quelques NSNotifications couvrant tout ce dont l'application régulière a besoin.

Sous le capot, MPMoviePlayerController s'appuie sur AVPlayer - mais cela se produit en fait entièrement transparent pour l'utilisateur - vous n'avez pas accès à cette couche lorsque vous utilisez MPMoviePlayerController.

MPMoviePlayerController utilise la sous-couche AVPlayer comme instance singleton, il n'est donc pas possible d'utiliser plusieurs instances de MPMoviePlayerController pour lire des vidéos simultanément.

D'un autre côté, dès que vous essayez d'étendre la fonctionnalité de MPMoviePlayerController avec vos propres fonctionnalités, le code devient rapidement désagréable - par exemple vous commencerez peut-être à utiliser plusieurs minuteries pour couvrir des choses comme une détection de faim appropriée (en fait, cette fonctionnalité a été incluse dans la version iOS5 de cette classe), des mises à jour personnalisées de l'interface utilisateur, ... Ou vous pourriez finir par avoir plus d'une poignée d'état propriétés essayant de couvrir des choses comme l'arrêt progressif de la lecture alors que le lecteur est encore en pré-tampon.


Recommandation personnelle

J'ai utilisé les deux et je continuerai à utiliser les deux, selon les besoins de l'application que j'ai le plaisir de construire. Pour la plupart des projets (simples), je recommanderais d'utiliser MPMoviePlayerController sur AVPlayer car il est très simple à utiliser et avec seulement quelques lignes de code, vous obtenez un lecteur multimédia à part entière. Et si vos exigences en matière de lecture multimédia sont encore plus simples, jetez un œil à MPMoviePlayerViewController (notez cette partie View).

172
Till