potplayer players kmplayer for descargar classic best acg android http stream media-player android-mediaplayer

players - Streaming al Android MediaPlayer



vlc (1)

El servidor HTTP fue alojado en el propio teléfono. Fue muy simple: solo un thread escucha en un socket para una solicitud HTTP GET . Cuando obtuviera la solicitud HTTP , haría un new socket , volvería a escribir algunos encabezados HTTP y comenzaría a descargar los datos de audio MP3 de nuevo en el socket . Este servidor HTTP no hizo nada más.

El Android Media Player estaba reproduciendo la música mientras yo la transmitía. El Media Player comportó muy mal si su buffer reproducción se vació mientras se reproducía el audio. Para mí era muy importante asegurarme de que mi servidor HTTP seguía escribiendo datos en ese socket . Moví los bytes en el socket en trozos pequeños (10 kB). Los encabezados en mi respuesta HTTP terminaron pareciéndose a esto:

// Build response headers StringBuilder sb = new StringBuilder(); sb.append( "HTTP/1.1 200 OK/r/n"); sb.append( "Content-Type: audio/mpeg/r/n"); sb.append( "Connection: close/r/n" ); sb.append( "Accept-Ranges: bytes/r/n" ); sb.append( "Content-Length: " + totalFileSize + "/r/n" ); sb.append( "Content-Disposition: inline; filename=xxxxx.mp3/r/n/r/n");

Mientras mantuve la tubería encendida, el Android Media Player siguió consumiéndolo sin quejarse. Reproducción de audio sólo requiere una solicitud y respuesta. Terminó funcionando bastante bien.

Estoy tratando de escribir un servidor HTTP ligero en mi aplicación para feed datos MP3 generados dinámicamente al Android MediaPlayer integrado. No tengo permitido almacenar mi contenido en la SD card .

Mis datos de entrada son esencialmente de una longitud infinita. Le digo a MediaPlayer que su fuente de datos debería ser básicamente algo como "http://localhost/myfile.mp3" . Tengo un servidor simple configurado que espera a que MediaPlayer realice esta solicitud. Sin embargo, MediaPlayer no es muy cooperativo. Al principio, hace un HTTP GET y trata de agarrar todo el archivo. Se agota el tiempo si intentamos y simplemente volcamos los datos en el socket por lo que intentamos usar el encabezado HTTP Range para escribir los datos en fragmentos. MediaPlayer no le gusta esto y no sigue solicitando los fragmentos posteriores.

¿Alguien ha tenido éxito en la transmisión de datos directamente a MediaPlayer ? ¿Necesito implementar un servidor RTSP o Shoutcast en su lugar? ¿Simplemente estoy perdiendo un HTTP header crítico? ¿Qué estrategia debo usar aquí?