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