87 votes

Différences entre AVPlayer et MPMoviePlayerController

Je développe une application iPhone qui doit 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 ?

4 votes

J'ai essayé de reformuler cette question pour m'assurer qu'elle ne génère pas de réponses basées sur des opinions.

173voto

Till Points 20820

NOTE à partir d'iOS9, Apple a déprécié le MPMoviePlayerController :

La classe MPMoviePlayerController est officiellement dépréciée dans iOS 9. (Pour lire du contenu vidéo dans iOS 9 et les versions ultérieures, utilisez plutôt la classe AVPictureInPictureController ou AVPlayerViewController du cadre AVKit, ou la classe WKWebView de WebKit.

Copié de la Référence de 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 cadre qui vous apporte AVPlayer ) est généralement un peu difficile pour l'utilisateur (codeur) car il vous oblige à utiliser Observation de la valeur d'une clé beaucoup pour la vérification des états. Le concept de la KVO est génial, ne vous méprenez pas, mais pour les développeurs inexpérimentés, son apprentissage peut être douloureux. Apple omet parfois d'indiquer quelles propriétés sont réellement conformes à la norme KVO, ce qui vous obligera à faire quelques essais.

L'un des grands avantages de AVPlayer sur MPMoviePlayerController serait par exemple sa version étendue, AVQueuePlayer comme la possibilité de lire sans interruption plusieurs sources de films. Un autre avantage est certainement la richesse des fonctions AVFoundation qui vous permet de faire des choses comme la composition, l'encodage et la conversion de films à la volée.

Un autre grand avantage de la AVPlayer est le fait que vous pouvez 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 dès le départ. L'utilisation de cette API vous permettra de disposer d'une interface utilisateur attrayante et facile à comprendre. L'interface utilisateur peut toutefois être désactivée ou remplacée par une interface personnalisée.

Pour les changements de statut, MPMoviePlayerController utilise quelques NSNotifications couvrant tout ce dont l'appli normale a besoin.

Sous le capot, MPMoviePlayerController s'appuie sur AVPlayer - mais cela se passe en fait de manière totalement transparente pour l'utilisateur - vous n'avez aucun accès à cette couche lorsque vous utilisez MPMoviePlayerController .

MPMoviePlayerController utilise la sous-couche AVPlayer comme une instance singleton, il n'est donc pas possible d'utiliser plusieurs instances de MPMoviePlayerController pour lire des vidéos en même temps.

D'autre part, 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 timers pour couvrir des choses comme une détection correcte de la faim (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 pouvez finir par avoir plus d'une poignée de propriétés d'état essayant de couvrir des choses comme l'abandon gracieux de la lecture alors que le lecteur est toujours en pré-buffer.


Recommandation personnelle

J'ai utilisé les deux et je continuerai à les utiliser, en fonction des besoins de l'application que j'ai le plaisir de construire. Pour la plupart des projets (simples), je recommande l'utilisation de 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 de médias sont encore plus simples, jetez un coup d'œil à MPMoviePlayerViewController (notez que View-part).

0 votes

+1 Merci pour cette clarification !

2 votes

AVPlayer vous permet également d'utiliser automatiquement les animations de couches. Si vous voulez exécuter des animations de base en arrière-plan, n'utilisez pas de MPMoviePlayerController, bien qu'il puisse y avoir un paramètre pour les activer, soyez-en conscient si vous utilisez des éléments de CALayer.

0 votes

Ça ne devrait pas l'être : L'interface utilisateur cependant ne peut pas peut être désactivé ou remplacé par un modèle personnalisé ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X