2011-01-18 9 views
14

Ho una configurazione server HTTP live streaming che serve contenuti audio mp3 segmentati (l'URL punta al file indice playlist.m3u8). Devo creare un'applicazione client iOS per consumare questo flusso audio senza utilizzando qualsiasi controllo/interfaccia utente Apple standard. Dovrebbe riprodurre lo streaming in background e voglio utilizzare la mia interfaccia utente personalizzata per fornire i controlli.Riproduci stream di file audio utilizzando HTTP Live Streaming su client iOS senza perdere l'interfaccia utente in Quick Time

Dal momento che il contenuto è puramente audio, non voglio utilizzare la classe MPMoviePlayerController quando rileva l'interfaccia utente. Ho provato ad utilizzare AVAudioPlayer, anche se non è pensato per i flussi di rete, che non sorprendentemente non riesce a riprodurre con un codice di errore "-43": NSOSStatusErrorDomain.

Ho anche provato a creare un UIWebView con 1 pixel di altezza e larghezza e puntandolo al file playlist.m3u8 sul server. Questo funziona, ma sfortunatamente continuo a perdere l'interfaccia utente poiché UIWebView semplicemente delegherà il compito di riprodurre il player QuickTime che viene lanciato nella mia app a schermo intero per dispositivi iOS 3.xx.

In sostanza, mi pare che Apple non ha fornito alcun API client per consumare HTTP Live Streaming audio flussi e gli sviluppatori sono costretti ad abbandonare l'interfaccia utente per QuickTime player che riproduce il flusso con il logo QT usurpare lo schermo. ugh ...

Mi piacerebbe sapere se qualcuno ha suggerimenti per aiutarmi con quanto sopra. In caso contrario, il mio piano B deve abbandonare HTTP Live Streaming e utilizzare la famosa implementazione di streaming classica Matt Gallagher. Tuttavia, sono un po 'preoccupato per lo Apples guidelines che sta chiaramente suggerendo che per le app che ci si aspetta inviino una grande quantità di contenuti audio o video su reti cellulari (che è la mia app) è necessario per utilizzare lo streaming HTTP Live. Questo significa che la mia implementazione del piano B è soggetta al rifiuto da parte di Apple? Qualche modo per aggirare questa linea guida?

risposta

5

Ho usato lo streamer audio di Matt Gallagher in una delle mie app. È un'app per radio su Internet molto simile a Pandora e LastFM. E sì è stato accettato da Apple ed è stato in App Store da allora.

Quindi, a mio parere, il piano B in realtà non è così rischioso. :-)

+0

Grazie per le informazioni. Hai inviato l'app prima del 2010-Feb-05? Guardando la cronologia delle revisioni dei documenti delle linee guida di Apple, è stato il momento in cui hanno emesso il mandato sulle app che richiedono l'uso di HTTP Live Streaming per lo streaming multimediale high b/w. Immagino che potrebbero aver reso la loro politica di revisione più rigida solo per le app inviate allo store dopo che tale linea guida è stata annunciata pubblicamente. – bhavinb

+0

Hmmm .. L'ho presentato verso settembre 2010 e sono stato approvato nell'ottobre successivo. –

13

http://developer.apple.com/library/ios/#documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html

La documentazione dicono:

riproduzione si verifica in una vista di proprietà del giocatore di film e avviene sia schermo intero o in linea.

In iOS 3.1 e precedenti, questa classe ha implementato un lettore di film a schermo intero .

Un test rapido che utilizza i flussi di esempio di Apple dimostra che ciò che si vuole fare è possibile.

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"]]; 
player.movieSourceType = MPMovieSourceTypeStreaming; 
player.view.hidden = YES; 
[self.view addSubview:player.view]; 
[player play]; 
+1

la domanda menzionata "... che viene lanciata nella mia app a schermo intero per dispositivi iOS 3.xx". Conosco la possibilità di View ridimensionabile e la possibilità di nasconderlo in iPhone 4.0 e versioni successive (dal momento che iOS 3.2 era solo iPad, dopo iOS 3.1.x, c'è direttamente iOS 4.0 per iPhone). L'API 'player.view.hidden = YES;' è possibile solo in iOS 3.2 e versioni successive che significa per iPhone con iOS 4.0 e versioni successive. Quindi questa non è un'opzione praticabile in quanto voglio supportare iPhone su iOS3.xe versioni successive nella mia app – bhavinb

+2

Gotcha. Mi dispiace, ho perso il requisito iOS nella domanda. Tuttavia, potresti considerare seriamente quanto impegno vuoi mettere nei dispositivi che eseguono 3.x. Ho contribuito a creare un'app con oltre mezzo milione di download e il 93% degli utenti utilizza 4.0 o versioni successive. Vedi anche questo link: http://www.quora.com/What-proportion-of-all-iPhone-owners-use-iOS4-*-today – SteveB

+0

Devi copiare e incollare quel link perché l'asterisco è scherzare. Scusa se non sono riuscito a collegarlo correttamente. – SteveB

Problemi correlati