Differenze tra AVPlayer e MPMoviePlayerController [chiuso]


87

Sto sviluppando un'applicazione per iPhone che deve riprodurre video. Finora, ho appreso che ci sono almeno due API per raggiungere questo obiettivo; AVPlayere MPMoviePlayerController.

Quali sono le principali differenze?


4
Ho provato a riformulare questa domanda per assicurarmi che non generasse risposte basate sull'opinione.
Fino al

Risposte:


173

NOTA a partire da iOS9, Apple ha deprecato MPMoviePlayerController:

La classe MPMoviePlayerController è formalmente deprecata in iOS 9. (anche la classe MPMoviePlayerViewController è formalmente deprecata). Per riprodurre contenuto video in iOS 9 e versioni successive, utilizzare invece la classe AVPictureInPictureController o AVPlayerViewController dal framework AVKit o la classe WKWebView da WebKit.

Copiato dal riferimento MPMoviePlayerController .

AVPlayer

AVPlayerti dà molta più flessibilità ma è abbastanza scarsamente documentato. L'utilizzo di questa API ti costringerà a creare la tua interfaccia utente. AVFoundation(il framework che ti offre AVPlayer) generalmente è un po 'difficile per l'utente (programmatore) in quanto ti costringe a usare molto l' osservazione dei valori chiave per controllare gli stati. Il concetto di KVO è fantastico, non fraintendetemi, tuttavia, per gli sviluppatori inesperti può essere doloroso imparare. Apple a volte omette le informazioni su quali proprietà sono effettivamente conformi a KVO e questo ti costringerà a fare qualche sperimentazione.

Un grande vantaggio di AVPlayerover MPMoviePlayerControllersarebbe ad esempio la sua versione estesa, in AVQueuePlayerquanto è in grado di riprodurre senza pause di più sorgenti di film. Un altro vantaggio è sicuramente il AVFoundationframework ricco di funzionalità che ti consente di fare cose come la composizione / codifica / conversione di filmati al volo.

Ancora un altro enorme vantaggio AVPlayerè il fatto che puoi effettivamente riprodurre più sorgenti video contemporaneamente (ad esempio fianco a fianco) senza alcun problema.

MPMoviePlayerController

MPMoviePlayerControllerè facile da usare e copre la maggior parte delle esigenze fuori dagli schemi. L'utilizzo di questa API ti darà un'interfaccia utente di bell'aspetto e comunemente compresa. L'interfaccia utente tuttavia può essere disabilitata e / o sostituita con una personalizzata.

Per i cambiamenti di stato, ne MPMoviePlayerControllerutilizza alcuni che NSNotificationscoprono tutto ciò di cui l'app normale ha bisogno.

Sotto il cofano, si MPMoviePlayerControllerbasa AVPlayer- ma in realtà ciò accade completamente trasparente per l'utente - non hai accesso a quel livello durante l'utilizzo MPMoviePlayerController.

MPMoviePlayerControllerutilizza l'underlaying AVPlayercome un'istanza singleton, quindi non è possibile utilizzare più istanze di MPMoviePlayerControllerper riprodurre video contemporaneamente.

D'altra parte, non appena si tenta di estendere la funzionalità di MPMoviePlayerControllercon le proprie funzionalità, il codice diventa rapidamente sgradevole - ad esempio, è possibile che inizierai a utilizzare più timer per coprire cose come un corretto rilevamento della fame (in realtà, quella funzione è stata inclusa nella versione iOS5 di questa classe), aggiornamenti dell'interfaccia utente personalizzati, ... Oppure potresti finire per avere più di una manciata di proprietà di stato che cercano di coprire cose come l'aborto con grazia della riproduzione mentre il lettore è ancora pre-buffering.


Raccomandazione personale

Ho usato entrambi e continuerò a usarli entrambi, a seconda delle esigenze dell'App che ho il piacere di costruire. Per la maggior parte dei progetti (semplici), consiglierei di usarlo MPMoviePlayerControllerin AVPlayerquanto è molto semplice da usare e con poche righe di codice, ottieni un lettore multimediale a tutti gli effetti. E se le tue richieste sulla riproduzione multimediale sono ancora più semplici, dai un'occhiata a MPMoviePlayerViewController(nota che View-part).


2
AVPlayer ti consente anche di utilizzare automaticamente le animazioni dei livelli. Se vuoi eseguire Core Animation in background, non usare un MPMoviePlayerController, anche se potrebbe avere un'impostazione per abilitarli, tieni solo presente che se stai usando roba CALayer
Stephen J

3
No. La risposta è corretta. L'interfaccia utente di MPMoviePlayerController può essere disabilitata e / o sostituita con una personalizzata.
Dave Batton

1
@Besi no, del tutto corretto come scritto - può sicuramente essere disabilitato (usando MPMovieControlStyleNone) e quindi sostituito poiché nulla ti impedisce di aggiungere la tua vista come fratello della vista di MPMoviePlayerController o direttamente sulla sua backgroundView.
Fino al

8
A partire da iOS 9 MPMoviePlayerController è deprecato e quindi dovresti usare AVPlayer per progetti futuri
lewis

1
Questa è un'informazione super preziosa @ lewis42 - la aggiungerò al mio vecchio messaggio :)
Fino al
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.