HLS (http streaming en vivo) en Android 3.0 y buscando
Tenemos un proveedor que nos da los archivos m3u8 para flujos HLS (originalmente destinados para su uso en una aplicación iOS).
Android 3.0 soporta http streaming en vivo (http://developer.android.com/guide/appendix/media-formats.html) – y de hecho podemos reproducir estos archivos m3u8 utilizando el estándar VideoView en Android 3.0+.
- Jugar HLS en Android (comparar alternativas)
- cómo obtener metadatos de una radio en línea de streaming
- Cómo utilizar la tarea Async para streaming de audio en android
- Transmisión en vivo en iPhone / Android: RTMP - HTTP
- Hls en html5 no funciona en el navegador de cromo android
EDIT: Android parece tratar esto como "en tiempo real" alimentación de vídeo, y deshabilita la posibilidad de buscar o calcular una duración de vídeo. (Donde-como iOS vamos a buscar dentro de la corriente sin problema)
¿Hay alguna manera de forzar a android 3.0+ a buscar dentro de estos archivos?
A continuación, se muestra una actividad de muestra para que otros puedan probar con:
import android.app.Activity; import android.os.Bundle; import android.widget.MediaController; import android.widget.VideoView; public class SandboxActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); VideoView vw = (VideoView) findViewById(R.id.videoView); vw.setVideoPath("http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"); vw.setMediaController(new MediaController(this)); vw.requestFocus(); vw.start(); } }
Y un diseño de ejemplo:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:id="@+id/root"> <VideoView android:id="@+id/videoView" android:layout_width="wrap_content" android:layout_height="match_parent" /> </RelativeLayout>
Esto está usando un enlace de HLS de la muestra de Apple.
- Android VideoView Detección de ancho de banda
- Transmisión de vídeo de la cámara Android al servidor Wowza. (RTMP)
- MediaPlayer Framework en GingerBread y soporte de streaming en vivo HTTP de Apple
- Problema al reproducir el archivo m3u8 en android 3.2
- Biblioteca para apoyar H.264 AVC. Mp4 en Android 2.2, 2.3?
- ¿El reproductor de medios de Android suministra id de sesión en los encabezados de peticiones HTTP?
- Soporte Android Widevine HLS / DRM
- Analizar y reproducir un archivo .pls en Android
Mira esta página (a la que te refieres)
Dice:
- Protocolo versión 3 (Android 4.0 y superior)
- Versión de protocolo 2 (Android 3.x)
Y aquí puede comprobar el proyecto de HLS . Puede elegir una versión en la parte superior de la página.
La primera referencia a la búsqueda apareció en el borrador 3 (comparando con el borrador 2 de Android 3.x)
El valor de la fecha y la hora proporciona un mapeo informativo de la línea de tiempo de los medios de comunicación a una hora de reloj de pared apropiada, que puede utilizarse como base para buscar
Solo por asegurar. No leí todo el borrador. Pero, mi conjetura sería que Android implementó un borrador bastante temprano en Android 3.0 y que puede haber implementado parcialmente, que es suficiente para jugar, pero no es suficiente para buscar.
No creo que usted tiene una solución fácil para esto, excepto salmuera en el cliente HLS de terceros (como lo sugiere vipw)
Lo siento chicos, estás tratando de obtener sangre de una piedra. Android 3.0 es compatible con un subconjunto muy limitado de HLS, y para soportar la búsqueda en secuencias en directo, vas a necesitar un cliente HLS mejor que Google.
Im no seguro pero puesto que el VideoView no está apoyando la búsqueda para su caso, usted puede intentar algunas diversas opciones como: http://wiki.videolan.org/AndroidCompile (que es fácil de compilar)
Algo relacionado con esto – parece haber un error que impide que los feeds HLS en vivo comiencen en el punto en directo como se supone que. Me imagino que esto puede ser debido a esta limitación buscando. Al iniciar un feed HLS en vivo (que NO tiene la etiqueta EXT-X-ENDLIST) en Android, hay un error en los componentes de análisis de núcleo HLS que no se inicia en el punto en vivo (final del feed) y en su lugar Comienza al principio de la corriente.
Hay un error introducido en code.google.com acerca de esto – puede "star" o upvote allí:
Mi conjetura es que el comportamiento de búsqueda descrito se implementó usando una lista de reproducción de iframe (# EXT-XI-FRAMES-ONLY), que requiere un cliente que soporte al menos la versión 4 de la especificación Pantos.
- Fragmentos, DialogFragment y Rotación de Pantalla
- Causa de NullPointerException android.support.v7.widget.RecyclerView.onMeasure