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
.
Quali sono le principali differenze?
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
.
Quali sono le principali differenze?
Risposte:
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
ti 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 AVPlayer
over MPMoviePlayerController
sarebbe ad esempio la sua versione estesa, in AVQueuePlayer
quanto è in grado di riprodurre senza pause di più sorgenti di film. Un altro vantaggio è sicuramente il AVFoundation
framework 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
è 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 MPMoviePlayerController
utilizza alcuni che NSNotifications
coprono tutto ciò di cui l'app normale ha bisogno.
Sotto il cofano, si MPMoviePlayerController
basa AVPlayer
- ma in realtà ciò accade completamente trasparente per l'utente - non hai accesso a quel livello durante l'utilizzo MPMoviePlayerController
.
MPMoviePlayerController
utilizza l'underlaying AVPlayer
come un'istanza singleton, quindi non è possibile utilizzare più istanze di MPMoviePlayerController
per riprodurre video contemporaneamente.
D'altra parte, non appena si tenta di estendere la funzionalità di MPMoviePlayerController
con 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 MPMoviePlayerController
in AVPlayer
quanto è 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).
backgroundView
.