Android 3.x / HLS cómo iniciar al final de la secuencia

Estoy jugando un stream HLS con el siguiente código:

mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_all.m3u8"); mediaPlayer.setDisplay(holder); mediaPlayer.setOnBufferingUpdateListener(this); mediaPlayer.setOnCompletionListener(this); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setOnVideoSizeChangedListener(this); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepareAsync(); 

Con este código, lo que veo en el video es de aproximadamente 5 minutos de retraso de acuerdo con la misma secuencia que se reproduce en VLC.

El reproductor está empezando a reproducir el primer fragmento del archivo .m3u8. Pero la especificación del hls precisa que el primer pedazo es el más viejo y el último el más nuevo. Así que el jugador debe comenzar a jugar la última parte del archivo.

Sospecho que hay algo que ver con los parámetros del método setDataSource, pero no puedo imaginar cómo.

Me encontré con el mismo problema – parece que cuando se inicia un feed HLS en vivo (que no tiene la etiqueta EXT-X-ENDLIST) en Android, hay un error en el núcleo de análisis de componentes HLS que no se inicia en el punto en vivo (Fin del feed), y en su lugar comienza al principio del flujo.

Hay un error introducido en code.google.com acerca de esto – puede "star" o upvote allí:

http://code.google.com/p/android/issues/detail?id=37156

No creo que la especificación de HLS no indique explícitamente qué segmento comenzar para, pero generalmente comienza en el tercer último segmento para hls vivos.

La secuencia a la que se está refiriendo es una fuente HLS de Video on Demand (VOD). La única diferencia es que la lista de reproducción termina con # EXT-X-ENDLIST. Cuales causas:

  • El reproductor no actualiza la lista de reproducción
  • Comenzando en el primer pedazo.
 $ Curl http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700.m3u8
 ...
 #EXTINF: 10,
 Http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700/Seg_060110_103747_44/nasatv_700_060110_103747_87966.ts
 #EXTINF: 0,
 Http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700/Seg_060110_103747_44/nasatv_700_060110_103747_87967.ts
 # EXT-X-ENDLIST

Echa un vistazo a la página de Envivio creo que tienen algunos canales de HLS en vivo que puede probar con.

Un comentario general: no confíe en VLC cuando se trata de probar HLS.

  • android - cómo transmitir vídeo desde el teléfono al servidor?
  • Servidor para transmitir vídeo RTSP a Android
  • RTSP en Jelly bean no funciona
  • Captura de la cámara IP Stream y publicar en mi sitio web
  • Live555 en Android
  • Codificación H.264 de la cámara con Android MediaCodec
  • Soporte de nivel de perfiles de Android H.264
  • Una biblioteca para compresión / descompresión de vídeo sin pérdidas / bajo nivel de plataforma cruzada (C ++ / Android)
  • ¿Es posible capturar / guardar archivos JPEG desde un flujo MJPEG? (Y también el propio MJPEG)?
  • Transmisión de vídeo de cámara Android
  • Implementación de la cámara IP en Android (Ver vídeo en directo desde la cámara IP)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.