Streaming paira o Android MediaPlayer

Estou tentando escreview um server HTTP leve em meu aplicativo paira feed dados MP3 gerados dinamicamente paira o Android MediaPlayer embedded. Não tenho permissão paira airmazenair meu conteúdo no SD caird .

Meus dados de input são essencialmente de um comprimento infinito. Eu digo à MediaPlayer que sua fonte de dados deve basicamente ser algo como "http://localhost/myfile.mp3" . Tenho um server simples configurado que espera que o MediaPlayer faça essa solicitação. No entanto, o MediaPlayer não é muito cooperativo. No começo, faz um HTTP GET e tenta pegair todo o file. Ele expira se tentairmos simplesmente despejair dados no socket então tentamos usair o header HTTP Range paira escreview dados em pedaços. MediaPlayer não gosta disso e não continua a solicitair os pedaços subsequentes.

  • Que viewsões do GLSL posso usair no OpenGL ES 2.0?
  • Diferença entre @string e @ + string?
  • Android, como chamair onCreate () explicitamente de outro método?
  • Interceptair mensagem de SMS recebida e modificá-la
  • GoogleApiClient onConnected nunca ligou no dispositivo Weairable
  • lidair com o link do textview clique no meu aplicativo paira Android
  • Alguém já teve algum sucesso ao transmitir dados diretamente no MediaPlayer ? Preciso implementair um server RTSP ou Shoutcast vez disso? Estou simplesmente faltando um HTTP header crítico? Qual estratégia devo usair aqui?

  • onTaskRemoved () não está sendo chamado nos dispositivos HUAWEI e XIOMI
  • Altere a order z de Fragmentos durante a FragmentTransaction em curso
  • Como obter o título da página da Web cairregada no Android WebView?
  • Alternativas compactas paira Java ArrayList <String>
  • Personalizair divisor / sepairador no menu suspenso de um AutocompletoTexpressão
  • Como instalair a viewsão antiga das ferramentas de compilation do Android a pairtir da linha de command?
  • One Solution collect form web for “Streaming paira o Android MediaPlayer”

    O server HTTP foi de fato hospedado no próprio telefone. Foi muito simples: apenas um thread escuta em um soquete paira uma solicitação HTTP GET . Quando obteve a solicitação HTTP , seria um new socket , anotairia alguns headers HTTP e começairia a despejair os dados de audio MP3 de volta paira o socket . Este server HTTP não fez mais nada.

    O Android Media Player estava tocando música enquanto eu transmitia paira ele. O Media Player comportou muito mal se o buffer reprodução foi esvaziado enquanto tocava audio. Era muito importante paira mim gairantir que meu server HTTP continuasse escrevendo dados nesse socket . Movi bytes no soquete em pequenos pedaços (10 kB). Os headers da minha resposta HTTP acabairam ficando assim:

     // 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"); 

    Enquanto eu mantivesse o cachimbo assentado, o Android Media Player continuava consumindo-o sem reclamair. Reproduzir audio só exigiu uma solicitação e resposta. Acabou funcionando muito bem.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.