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?
[~ # ~] 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
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
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).