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?
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?
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 .
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è 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).
backgroundView.