NOTE au iOS9, Apple a désapprouvé le MPMoviePlayerController:
La classe MPMoviePlayerController est officiellement désapprouvée dans iOS 9. (. La classe MPMoviePlayerViewController est également formellement désapprouvée) Pour lire le contenu vidéo dans iOS 9 et plus tard, utilisez plutôt la classe AVPictureInPictureController ou AVPlayerViewController de l'infrastructure AVKit ou la classe WKWebView de WebKit.
Copié à partir du MPMoviePlayerController reference.
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 amène AVPlayer
) est généralement un peu difficile pour l'utilisateur (codeur) car il vous oblige à utiliser beaucoup Key-Value Observing pour vérifier les états. Le concept de KVO est génial, ne vous méprenez pas - encore, pour les développeurs inexpérimentés, il peut être douloureux d'apprendre. Apple omet parfois les informations sur les propriétés qui sont réellement conformes à la norme KVO et cela vous obligera à faire quelques expérimentations.
Un grand avantage de AVPlayer
par rapport à MPMoviePlayerController
serait par exemple sa version étendue, AVQueuePlayer
, puisque celle-ci est capable de faire la lecture sans interruption de plusieurs sources de film. Un autre avantage est certainement la structure riche en fonctionnalités AVFoundation
vous permettant de faire des choses comme la composition/encodage/conversion de films à la volée.
Encore un énorme avantage de AVPlayer
est le fait que vous pouvez réellement jouer 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 de la boîte. L'utilisation de cette API vous donnera une interface utilisateur agréable et compréhensible. L'interface utilisateur peut cependant être désactivée et/ou remplacée par une interface personnalisée.
Pour les changements d'état, MPMoviePlayerController
utilise quelques NSNotifications
couvrant tout ce dont l'application ordinaire a besoin.
Sous le capot, MPMoviePlayerController
se construit au-dessus de AVPlayer
- mais cela se passe en réalité entièrement transparent pour l'utilisateur - vous n'avez pas accès à cette couche en utilisant 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'autre part, dès que vous essayez d'étendre les fonctionnalités de MPMoviePlayerController
avec vos propres fonctionnalités, le code devient rapidement méchant - par exemple, le code MPMoviePlayerController
vous pouvez commencer à utiliser plusieurs temporisateurs pour couvrir des choses comme une détection de famine (en fait, cette fonctionnalité est incluse dans la version iOS5 de cette classe), des mises à jour de l'interface utilisateur personnalisée, ... Ou vous pouvez avoir plus d'une poignée d'états propriétés essayant de couvrir des choses comme l'abandon progressif de la lecture pendant que le lecteur est encore pré-tampon.
Recommandation personnelle
J'ai utilisé à la fois et je vais continuer à utiliser les deux, en fonction des besoins de l'application que j'ai le plaisir de construire. Pour la plupart des projets (simples), je recommande 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 demandes sur la lecture des médias sont encore plus simples, jetez un œil à MPMoviePlayerViewController
(notez que View-part).
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. – Till