2011-01-19 12 views
5

De acuerdo con las notas de la versión, StageFright reemplaza el marco de OpenCore en la versión de GingerBread. Parece que ha habido numerosas discusiones que dicen: la transmisión HTTP Live de Apple es compatible por defecto desde Android 2.3. Incluso el Wikipedia menciona esto.
Sin embargo, cuando trato de ejecutar el test stream proporcionado por Apple mediante el MediaPlayerDemo_Video.java incluido con la API Demos consigo las siguientes excepciones: MediaPlayer Framework en GingerBread y HTTP Live Streaming Support de 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 

--- código relevante (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); 

Preguntas:
1. ¿La compilación GingerBread es realmente compatible con el protocolo HTTP Live Streaming de Apple?
2. ¿Qué salió mal anteriormente?

Por favor ayuda.

+0

He añadido un {{citation needed}} en la página Wiki y parece que el autor ha respondido cambiando la sección. – Samuh

+0

Preview SDK for Honeycomb está disponible para descargar y se anuncia para admitir m3U8. sin embargo, no pude reproducir el flujo de prueba de Apple. – Samuh

+0

He archivado un error para esto: http://code.google.com/p/android/issues/detail?id=14646&q=stars%3D2&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars – Samuh

Respuesta

8

Muy bien, he encontrado algunos datos y voy a actualizar este hilo respondiendo mi propia pregunta. Si alguien tiene sugerencias u otras consideraciones para llevar a la mesa, por favor agregue.

  1. Stagefright marco que viene con Honeycomb acumulación apoya HTTP Live Streaming. La documentación dice la mayoría de las partes del borrador de la especificación sin mencionar explícitamente qué partes.

  2. El video y el audio deben cumplir con media formats supported by Android.

  3. Pude reproducir transmisiones protegidas por contenido que emplea cifrado AES-128. Sin embargo, el rendimiento del emulador (lamentablemente, no tenía el dispositivo) no era bueno. El audio y el video estaban terriblemente fuera de sincronización. Las aplicaciones de streaming TIENEN que probarse en dispositivos reales.

  4. No puede transmitir sus datos a través de https. Además, con el fin de detectar que la corriente se ajusta al estándar HTTPLive que tendrá que reemplazar "http://" parte de la dirección URL con "httplive://"

+0

Hola, he hecho lo mismo que dijiste. lo he probado en (URL con "https://www.ecured.cuPropiedades") 2.2.2.3 y 4.0 (URL con "http") funciona bien pero no funciona solo en Xperia Neo v que tienen OS 2.3.4. ¿Puedes decir cuál es la razón de este problema, por favor? – Hasmukh

0

pan de jengibre no ayuda que juega algunas corrientes HLS utilizando el httplive: // esquema de prefijo pero los códecs soportados son muy limitados y es muy fácil construir una secuencia perfectamente válida que interrumpe el marco de medios y no se reproduce.

Mis experiencias han demostrado que este bloqueo normalmente se produce al cargar o decodificar el primer segmento, incluso para contenido cifrado, pero que la clave no se solicita, lo que sugiere que el marco está ignorando las líneas clave.

Por supuesto, para aquellos que solo necesitan soportar los dispositivos más nuevos en el mercado, el soporte para HLS en ICS parece razonable (aunque imperfecto), pero aquellos de nosotros que necesitamos algún tipo de compatibilidad con versiones anteriores quedan decididamente fuera en el frío, y parece que la única opción para la transmisión (a diferencia de la descarga progresiva) es RTSP, que a su vez está poco implícito en Android.

Cuestiones relacionadas