Différences entre AVPlayer et MPMoviePlayerController [fermé]

87

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; AVPlayeret MPMoviePlayerController.

Quelles sont les principales différences?

suse
la source
4
J'ai essayé de reformuler cette question pour s'assurer qu'elle ne génère pas de réponses basées sur l'opinion.
Jusqu'au

Réponses:

173

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

AVPlayervous 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 AVPlayerover MPMoviePlayerControllerserait par exemple sa version étendue, AVQueuePlayercar celle-ci est capable de faire la lecture sans interruption de plusieurs sources de films. Un autre avantage est certainement le AVFoundationcadre 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 AVPlayerest 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

MPMoviePlayerControllerest 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, MPMoviePlayerControllerutilise quelques-uns NSNotificationscouvrant tout ce dont l'application régulière a besoin.

Sous le capot, MPMoviePlayerControllers'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.

MPMoviePlayerControllerutilise la sous-couche AVPlayercomme une instance singleton, il n'est donc pas possible d'utiliser plusieurs instances de MPMoviePlayerControllerpour lire des vidéos simultanément.

D'un autre côté, dès que vous essayez d'étendre les fonctionnalités de MPMoviePlayerControlleravec 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 MPMoviePlayerControllerover AVPlayercar 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).

Till
la source
2
AVPlayer vous permet également d'utiliser automatiquement des animations de couches. Si vous souhaitez exécuter Core Animation en arrière-plan, n'utilisez pas un MPMoviePlayerController, bien qu'il puisse avoir un paramètre pour les activer, sachez simplement que si vous utilisez des éléments CALayer
Stephen J
3
Non, la réponse est correcte. L'interface utilisateur de MPMoviePlayerController peut être désactivée et / ou remplacée par une interface personnalisée.
Dave Batton
1
@Besi non, tout à fait correct tel qu'il est écrit - il peut certainement être désactivé (en utilisant MPMovieControlStyleNone) et donc remplacé car rien ne vous empêche d'ajouter votre propre vue en tant que frère de la vue de MPMoviePlayerController ou directement sur son backgroundView.
Jusqu'au
8
À partir d'iOS 9, MPMoviePlayerController est obsolète et vous devriez donc utiliser AVPlayer pour les projets futurs
Lewis
1
C'est une information très précieuse @ lewis42 - l'ajoutera à mon ancien message :)
Jusqu'au