2011-11-16 5 views
85

Je suis en train de développer une application iPhone qui doit lire des vidéos. Jusqu'ici, j'ai appris qu'il y a au moins deux API pour y parvenir; AVPlayer et MPMoviePlayerController.Différences entre AVPlayer et MPMoviePlayerController

Quelles sont les principales différences?

+4

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

Répondre

172

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 MPMoviePlayerControllervous 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).

+0

+1 Merci d'avoir clarifié cela !! – bentford

+2

AVPlayer vous permet également d'utiliser automatiquement les animations de calques. Si vous voulez exécuter Core Animation en arrière-plan, n'utilisez pas MPMoviePlayerController, bien qu'il puisse avoir un paramètre pour les activer, soyez conscient de cela si vous utilisez CALayer –

+0

Cela ne devrait pas être: L'interface utilisateur ** ne peut pas ** être désactivé et/ou remplacé par un personnalisé? – Besi