2011-11-16 33 views
85

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

Quali sono le principali differenze?

+4

Ho provato a riformulare questa domanda per assicurarmi che non stia generando risposte basate sull'opinione pubblica. – Till

risposta

172

NOTA come di iOS9, Apple ha deprecato l'MPMoviePlayerController:

La classe MPMoviePlayerController è formalmente sconsigliato in iOS 9. (. La classe MPMoviePlayerViewController è anche formalmente sconsigliato) Per riprodurre contenuti video in iOS 9 e, successivamente, utilizzare la classe AVPictureInPictureController o AVPlayerViewController dal framework AVKit o la classe WKWebView da WebKit.

Copiato dallo MPMoviePlayerController reference.

AVPlayer

AVPlayer ti dà una flessibilità molto di più, ma è piuttosto scarsamente documentato. L'utilizzo di questa API ti costringerà a creare la tua interfaccia utente. AVFoundation (il framework che ti porta a AVPlayer) in genere è un po 'difficile per l'utente (coder) in quanto ti costringe a usare molto Key-Value Observing per verificare gli stati. Il concetto di KVO è fantastico, non fraintendetemi - ancora, 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 esperimento.

Un grande vantaggio di AVPlayer su MPMoviePlayerController sarebbe ad esempio la sua versione estesa, AVQueuePlayer in quanto è in grado di eseguire la riproduzione senza pause di più origini di film. Un altro vantaggio è sicuramente il ricco framework AVFoundation che ti consente di fare cose come composizione/codifica/conversione di film al volo.

Un altro enorme vantaggio di AVPlayer consiste nel fatto che si possono effettivamente riprodurre più sorgenti video contemporaneamente (ad esempio fianco a fianco) senza alcun problema.

MPMoviePlayerController

MPMoviePlayerController è facile da usare e copre la maggior parte ha bisogno di out of the box. L'utilizzo di questa API ti fornirà un'interfaccia utente di bell'aspetto e comunemente compresa. L'interfaccia utente tuttavia può essere disattivata e sostituita con una personalizzata.

Per le modifiche di stato, MPMoviePlayerController utilizza un numero di NSNotifications che copre tutto ciò di cui ha bisogno l'app normale.

Sotto il cofano, MPMoviePlayerController costruisce in cima AVPlayer - ma che in realtà accade tutto trasparente per l'utente - non avere accesso a tale strato durante l'utilizzo MPMoviePlayerController.

MPMoviePlayerController utilizza l'underlaying AVPlayer come istanza Singleton, quindi non è possibile utilizzare più istanze di MPMoviePlayerController per riprodurre i video contemporaneamente.

D'altra parte, non appena si tenta di estendere la funzionalità di MPMoviePlayerController con le proprie funzionalità, il codice diventa rapidamente pericoloso - ad es.probabilmente inizierai a usare timer multipli per coprire cose come un corretto rilevamento di fame (in realtà, quella funzione è stata inclusa nella versione di iOS5 di questa classe), aggiornamenti dell'interfaccia utente personalizzati, ... o potresti finire per avere più di una manciata di stati proprietà che cercano di coprire cose come abortire con garbo della riproduzione mentre il lettore è ancora pre-buffering.


raccomandazione personale

Ho usato entrambi e continuerò a usare entrambi, a seconda delle esigenze di App ho il piacere di costruire. Per la maggior parte dei (semplici) progetti, consiglierei di utilizzare MPMoviePlayerController su AVPlayer poiché è molto semplice da utilizzare e con poche righe di codice, si ottiene un lettore multimediale completo. E se le tue esigenze di riproduzione multimediale sono ancora più semplici, dai uno sguardo a MPMoviePlayerViewController (nota come View-part).

+0

+1 Grazie per aver chiarito questo !! – bentford

+2

AVPlayer consente inoltre di utilizzare automaticamente le animazioni di livello. Se vuoi eseguire Core Animation in background, non utilizzare un MPMoviePlayerController, anche se potrebbe avere un'impostazione per abilitarli, tieni presente che se stai usando roba CALayer –

+0

Non dovrebbe essere: l'interfaccia utente tuttavia ** non può essere disabilitato e/o sostituito con uno personalizzato? – Besi