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?
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?
Réponses:
REMARQUE à partir d'iOS9, Apple a désapprouvé le MPMoviePlayerController:
Copié à partir de la 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 cadre qui vous apporteAVPlayer
) est généralement un peu difficile pour l'utilisateur (codeur) car il vous oblige à utiliser beaucoup l' observation des valeurs-clés pour vérifier les états. Le concept de KVO est génial, ne vous méprenez pas - pourtant, pour les développeurs inexpérimentés, cela peut être pénible à apprendre. Apple omet parfois les informations sur les propriétés réellement conformes à KVO, ce qui vous obligera à faire des expérimentations.Un gros avantage de
AVPlayer
overMPMoviePlayerController
serait par exemple sa version étendue,AVQueuePlayer
car celle-ci est capable de faire la lecture sans interruption de plusieurs sources de films. Un autre avantage est certainement leAVFoundation
cadre riche en fonctionnalités qui vous permet de faire des choses comme la composition / l'encodage / la conversion de films à la volée.Un autre avantage considérable
AVPlayer
est le fait que vous pouvez en fait 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 attrayante 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-unsNSNotifications
couvrant tout ce dont l'application régulière a besoin.Sous le capot,
MPMoviePlayerController
s'appuie surAVPlayer
- mais cela se produit en fait de manière totalement transparente pour l'utilisateur - vous n'avez pas accès à cette couche lors de l'utilisationMPMoviePlayerController
.MPMoviePlayerController
utilise la sous-coucheAVPlayer
comme une instance singleton, il n'est donc pas possible d'utiliser plusieurs instances deMPMoviePlayerController
pour lire des vidéos simultanément.D'un autre côté, dès que vous essayez d'étendre les fonctionnalités 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 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 pendant que le lecteur est encore en pré-tamponnage.Recommandation personnelle
J'ai utilisé les deux et je continuerai à utiliser les deux, en fonction des besoins de l'application que j'ai le plaisir de construire. Pour la plupart des projets (simples), je recommanderais d'utiliser
MPMoviePlayerController
overAVPlayer
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 que View-part).la source
backgroundView
.