19

Ho un cliente che ha contenuti video per il web in formato Flash. Il mio compito è di aiutarli a mostrare i video in un'app per iPhone.Pro e contro di MPMoviePlayerController contro l'avvio di UIWebView per lo streaming di film

Mi rendo conto che il primo passo è quello di ottenere questi video nel formato Quicktime appropriato per l'iPhone.

Quindi dovrò aiutare il cliente a capire come o dove ospitare questi file. Se è difficile, presumo che possano essere ospitati su YouTube.

La mia preoccupazione principale, tuttavia, è quale approccio adottare per lo streaming del video. Quali sono i pro e i contro di MPMoviePlayerController rispetto all'avvio di UIWebView con l'URL del flusso? C'è qualche differenza? Uno di loro è più o meno indulgente? Uno di questi è un'esperienza utente migliore? Qualche trucco che potrei aspettarmi di incontrare?

Suppongo che riprodurre video sia piuttosto semplice su iPhone. È ragionevole provare entrambi e averne uno disponibile come riserva, o sarebbe una perdita di tempo? Sto cercando di programmarlo un po ', quindi mi piacerebbe sentire le esperienze del mondo reale da chiunque lo abbia fatto.

risposta

9

UIWebView non è in grado di riprodurre video. Navigando su una pagina Youtube con UIWebview verrà semplicemente lanciata l'app YouTube di iPhone. In questo modo, in un determinato modo, il controllo tornerà alla tua app dopo la riproduzione del video. Vedi qui: http://iphoneincubator.com/blog/tag/uiwebview

Si consiglia di utilizzare il controller MPMoviePlayer, a condizione che si stia eseguendo uno streaming semplice. Ecco alcuni esempi di codice per iniziare:

NSString *url = @"http://www.example.com/path/to/movie.mp4"; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] 
             initWithContentURL:[NSURL URLWithString:url]]; 
[moviePlayer play]; 
+0

OK. Quindi la mia vera scelta è tra l'app YouTube e MPMoviePlayerController. Grazie - la seconda scelta sembra davvero facile. Probabilmente andrò avanti e proverò in entrambe le direzioni. – Nosredna

+0

Dan - È possibile modificare la risposta in modo che le due righe di codice siano entrambe formattate come "codice". Almeno per me su Firefox 3.5 vedo la riga NSString come codice formattato ma la linea MPMoviePlayerController non lo è. Solo un suggerimento per farlo sembrare migliore per il prossimo ragazzo. –

25

EDIT: Il mio esempio originale in questa risposta inizializzato il WebView con una cornice di CGRectZero. Questo ha funzionato fino a iOS 3.2. A partire da iOS 4 la webview deve avere un frame diverso da zero o il video non verrà riprodotto. Ho modificato il mio esempio qui sotto per riflettere questo cambiamento.


La risposta accettata qui non è precisa. In effetti, puoi utilizzare UIWebView per lo streaming di video e, in qualche modo, è migliore di MPMoviePlayerController. Se comunichi a UIWebView di richiedere un file video (ad esempio un mp4) tramite loadRequest :, si aprirà una nuova finestra e lo streaming del video all'interno della tua app. A differenza di MPMoviePlayerController, la finestra video creata da UIWebView può essere ruotata in orizzontale o verticale. Al termine del video, l'utente può chiudere questa finestra e tornare alla tua app.


EDIT 2: Dal momento che ora è possibile implementare un lettore video che ruota utilizzando MPMoviePlayerViewController, non posso più pensare a una ragione per usare UIWebView per video utilizzando la tecnica descritta in questa risposta.


Suggerimento: Dal momento che UIWebView crea una propria finestra per riprodurre il video, non hai nemmeno bisogno di aggiungere l'UIWebView alla gerarchia della vista. Puoi semplicemente creare l'oggetto UIWebView e chiamare loadRequest: per riprodurre il video senza mai passare l'oggetto ad aggiungereSubview :.

self.webView = [[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 
NSURL *url = [NSURL URLWithString:@"http://www.jonathancoulton.com/music/thingaweek/CodeMonkey.mp3"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 
+0

Ho trovato che utilizzare UIWebView è il metodo migliore per mostrare un video con orientamento verticale. Tuttavia, ho dovuto aggiungere UIWebView alla gerarchia delle viste durante il test nella sim v3.1.3. Ho avuto problemi nel tentativo di riprodurre un file .mov ma aprirlo nel lettore Quicktime e fare un "save as" per iPhone mi ha dato una versione .m4v utilizzabile. – Jason

+0

Posso anche aggiungere che il riproduttore di filmati lanciato da UIWebView non può gestire tanti formati video come MPMoviePlayerController. Ad esempio, i filmati con codifica JPEG che molte videocamere digitali registrano vengono semplicemente presentati come un pulsante di riproduzione con una linea incrociata sopra di esso (che indica un film rotto). Quindi è l'orientamento dell'interfaccia o tutti i formati video. – alleus

+0

@cduhn: Puoi confermare questo codice per 4.0? Ottengo "impostazione percorso film: (null)" in questo modo. Anche se funziona ancora in 3.2 - molto confuso – scud