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:
La classe MPMoviePlayerController est formellement obsolète dans iOS 9. (La classe MPMoviePlayerViewController est également formellement obsolète.) 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 la référence 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 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
over MPMoviePlayerController
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 le AVFoundation
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
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-uns 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 de manière totalement transparente pour l'utilisateur - vous n'avez pas accès à cette couche lors de l'utilisation 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 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
over 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 que View-part).
backgroundView
.