2011-01-19 12 views
5

Secondo le note di rilascio, StageFright sostituisce il framework OpenCore nella versione di GingerBread. Sembra che ci siano state numerose discussioni che dicono: lo streaming HTTP di Apple è supportato di default da Android 2.3. Anche lo Wikipedia menziona questo.
Tuttavia, quando provo a fare funzionare il test stream fornito da Apple utilizzando il MediaPlayerDemo_Video.java bundle con Demos API ottengo le seguenti eccezioni: MediaPlayer Framework su GingerBread e supporto HTTP Live Streaming di Apple

setDataSource('http://devimages.apple.com/iphone/samples/bipbop/gear1/ 
prog_index.m3u8') 
connect to devimages.apple.com:80/iphone/samples/bipbop/gear1/ 
prog_index.m3u8 @0 
INFO/NuCachedSource2(34): ERROR_END_OF_STREAM 
error (1, -2147483648) 
ERROR/MediaPlayerDemo(667): error: Prepare failed.: status=0x1 
java.io.IOException: Prepare failed.: status=0x1 
at android.media.MediaPlayer.prepare(Native Method) 
at 
com.video.stream.MediaPlayerDemo_Video.playVideo(MediaPlayerDemo_Video.java: 
125) 
at 
com.video.stream.MediaPlayerDemo_Video.surfaceCreated(MediaPlayerDemo_Video.java: 
181) 
    ... 
    surfaceChanged called 
    Displayed com.video.stream/.MediaPlayerDemo_Video: +1s652ms (total 
    +7s427ms) 
    GC_EXPLICIT freed 2K, 55% free 2514K/5511K, external 716K/1038K, 
    paused 183ms 
    GC_EXPLICIT freed 17K, 52% free 2782K/5767K, external 716K/1038K, 
    paused 87ms 
    GC_EXPLICIT freed 68K, 50% free 2972K/5895K, external 2544K/3109K, 
    paused 104ms 
    request time failed: java.net.SocketException: Address family not 
    supported by protocol 

--- codice rilevante (MediaPlayerDemo_Video.java):

path = "http://devimages.apple.com/iphone/samples/bipbop/gear1/ 
prog_index.m3u8"; 
mMediaPlayer = new MediaPlayer(); 
mMediaPlayer.setDataSource(path); 
mMediaPlayer.setDisplay(holder); 
mMediaPlayer.prepare(); 
mMediaPlayer.setOnBufferingUpdateListener(this); 
mMediaPlayer.setOnCompletionListener(this); 
mMediaPlayer.setOnPreparedListener(this); 
mMediaPlayer.setOnVideoSizeChangedListener(this); 
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

Domande:
1. GingerBread build supporta realmente il protocollo HTTP Live Streaming di Apple ?
2. Che cosa è andato storto sopra?

Per favore aiuto.

+0

Ho aggiunto un {{citation needed}} sulla pagina Wiki e sembra che l'autore abbia risposto cambiando la sezione. – Samuh

+0

L'SDK di anteprima per Honeycomb è disponibile per il download ed è pubblicizzato per supportare m3U8. tuttavia, non ero in grado di riprodurre il flusso di test di Apple su di esso. – Samuh

+0

Ho archiviato un bug per questo: http://code.google.com/p/android/issues/detail?id=14646&q=stars%3D2&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars – Samuh

risposta

8

OK, ho trovato alcuni dati e ho intenzione di aggiornare questo thread rispondendo alla mia domanda. Se qualcuno ha suggerimenti o altre considerazioni da portare a tavola, per favore aggiungi.

  1. Stagefright quadro che viene fornito con Honeycomb accumulo supporta HTTP Live Streaming. La documentazione legge gran parte delle specifiche di bozza senza menzionare esplicitamente quali parti.

  2. Il video e l'audio devono essere conformi a media formats supported by Android.

  3. Sono stato in grado di riprodurre flussi protetti dal contenuto utilizzando la crittografia AES-128. Tuttavia, le prestazioni dell'emulatore (purtroppo non avevo il dispositivo) non erano buone. Audio e video erano terribilmente fuori sincrono. Le applicazioni di streaming devono essere testate su dispositivi reali.

  4. Non è possibile trasmettere i dati su https. Inoltre, al fine di rilevare che il flusso sia conforme a standard di HTTPLive dovrete sostituire "http://" parte dell'URL con "httplive://"

+0

Ciao, ho fatto la stessa cosa che hai detto. ho testato in (URL con "httplive") 2.2.2.3 e 4.0 (URL con "http") funziona bene ma non funziona solo in Xperia Neo v che hanno OS 2.3.4. puoi dire qual è la ragione di questo problema per favore? – Hasmukh

0

Gingerbread non supporto che gioca alcuni flussi HLS utilizzando il httplive: prefix schema // ma i codec supportati sono molto limitati ed è molto facile costruire un flusso perfettamente valido che blocchi il framework multimediale e non funzioni.

Le mie esperienze hanno mostrato che questo arresto si verifica normalmente durante il caricamento o la decodifica del primo segmento, anche per contenuto crittografato, ma che la chiave non viene richiesta suggerendo che il framework ignora le linee KEY.

Naturalmente, per coloro che hanno solo bisogno di supportare i dispositivi più recenti sul mercato, il supporto per HLS in ICS sembra ragionevole (anche se ancora imperfetto) tuttavia quelli di noi che hanno bisogno di una sorta di retrocompatibilità sono rimasti decisamente fuori al freddo, e sembra l'unica opzione per lo streaming (al contrario del download progressivo) è RTSP, che a sua volta è mal imposto in Android.

Problemi correlati