Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Transmisión al MediaPlayer de Android

Estoy tratando de escribir un servidor HTTP ligero en mi aplicación para feed datos MP3 generados dinámicamente al built-in Android MediaPlayer . No se permite 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 debe ser básicamente algo así como "http://localhost/myfile.mp3" . Tengo un simple servidor configurado que espera a que MediaPlayer realice esta solicitud. Sin embargo, MediaPlayer no es muy cooperativo. En primer lugar, hace un HTTP GET y trata de agarrar el archivo completo. Se agota si intentamos y simplemente volcar datos en el socket por lo que intentamos usar el encabezado HTTP Range para escribir datos en trozos. MediaPlayer no le gusta esto y no seguir solicitando los trozos subsiguientes.

¿Alguien ha tenido éxito en transmitir datos directamente a MediaPlayer ? ¿Necesito implementar un servidor RTSP o Shoutcast en su lugar? ¿Estoy simplemente perdiendo un HTTP header crítico? ¿Qué estrategia debo usar aquí?

  • Android MediaPlayer - cómo jugar en el STREAM_ALARM?
  • Android 4.0.4 MediaPlayer prepara el problema usando urls RTSP
  • Error de MediaPlayer de Android (1, -38) y (-38, 0)
  • Contexto dentro de un Runnable
  • ¿Por qué MediaPlayer muestra tanto el registro de Verbose en android?
  • JNI: QCMediaPlayer mediaplayer NO presente
  • Cómo cambiar el User-agent por defecto en mediaplayer del android
  • El reproductor de video apaga el modo en Android usando appcompat-v7
  • One Solution collect form web for “Transmisión al MediaPlayer de Android”

    De hecho, el servidor HTTP estaba alojado en el propio teléfono. Era muy simple: sólo un thread escuchaba en un socket para una solicitud HTTP GET . Cuando consiguió la petición del HTTP , ella un new socket , escriba detrás algunas cabeceras del HTTP y comience a tirar los datos audio MP3 de nuevo al socket . Este servidor HTTP no hizo nada más.

    El Android Media Player estaba reproduciendo la música mientras la estaba transmitiendo. El Media Player comportó muy mal si su buffer reproducción se vació mientras estaba reproduciendo audio. Era muy importante para mí asegurarse de que mi servidor HTTP seguía escribiendo datos en ese socket . Me trasladé bytes en el zócalo en trozos pequeños (10 kB). Los encabezados de mi respuesta HTTP terminaron pareciendo 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"); 

    Siempre y cuando mantuve la pipa alimentada, el Android Media Player seguía consumiéndolo sin quejarme. Reproducción de audio sólo requiere una solicitud y respuesta. Terminó trabajando bastante bien.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.