stream媒体到Android MediaPlayer

我正在尝试在我的应用程序中编写一个轻量级的HTTP服务器,将dynamic生成的MP3数据提供给内置的Android MediaPlayer 。 我不允许将我的内容存储在SD card

我的input数据本质上是无限长的。 我告诉MediaPlayer ,它的数据源应该基本上是"http://localhost/myfile.mp3" 。 我有一个简单的服务器设置,等待MediaPlayer发出这个请求。 不过, MediaPlayer不是很合作。 起初,它会进行HTTP GET并尝试抓取整个文件。 如果我们尝试简单地将数据转储到socket ,则超时,所以我们尝试使用HTTP范围头以块的forms写入数据。 MediaPlayer不喜欢这个,不会继续请求后续的块。

有没有人有任何成功的stream媒体直接进入MediaPlayer ? 我是否需要实施RTSPShoutcast服务器? 我只是缺less一个关键的HTTP header ? 我应该在这里使用什么策略?

Solutions Collecting From Web of "stream媒体到Android MediaPlayer"

HTTP服务器确实是在手机上托pipe的。 这是非常简单的:只是一个thread监听一个HTTP GET请求的套接字。 当它得到HTTP请求时,它会创build一个new socket ,写回一些HTTP标头并开始将MP3audio数据转储回socket 。 这个HTTP服务器没有做任何事情。

Android Media Player正在播放音乐,因为我正在streamAndroid Media Player 。 如果播放buffer在播放audio时清空,则Media Playerperformance非常差。 确保我的HTTP服务器不停地将数据写入该socket对我来说非常重要。 我以小块(10 kB)将字节移入套接字。 我的HTTP响应头结束了看起来像这样:

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

只要我保持pipe道的兴奋, Android Media Player一直在消费,毫无怨言。 播放audio只需要一个请求和响应。 它结束了很好的工作。