Android MediaPlayer需要很长时间来准备和缓冲

Ste*_*son 24 java android buffer audio-streaming android-mediaplayer

我的应用程序需要很长时间来准备和缓冲音频流.我已经读过这个问题为什么Android的MediaPlayer需要这么长的时间来准备一些直播的流媒体?然而,它只是说人们已经遇到过这个问题,它没有说明如何改善这个问题.

我在所有版本的Android中都遇到过这种情况,从2.2 - 4.1.2开始测试.

这些流具有适合移动和3G连接的比特率.在相同的iOS应用程序中,相同的流只需不到一秒钟即可开始缓冲.

有没有办法指定应该缓冲的时间量?我知道Tune In广播应用程序提供此功能(https://play.google.com/store/apps/details?id=tunein.player).

谢谢.

编辑:我再次测试,发现它只发生在运行Gingerbread及以上的设备上(> = 2.3).我知道Android将底层框架从OpenCore改为StageFright.那么我该如何优化媒体框架呢?旧的HTC Wildfire可以准备,流式传输和播放,这比全新的HTC One X和Nexus 7快10倍.

Jua*_*lez 13

几个月来我一直在努力解决这个问题.最后我找到了解决方案.

真正的问题在于MediaPlayer类的实现.特别是MediaPlayer缓冲数据的方式.这就是为什么解决方案是创建自己的缓冲,将其保存到临时文件并将其提供给MediaPlayer.

本教程和源代码完全解释了如何操作.http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

通过调整此代码,可以轻松创建更好的流媒体播放器.

谷歌开发人员真的搞砸了.

编辑:这个答案相当古老.现在我建议不要使用MediaPlayer和使用ExoPlayer.它可扩展,稳定,可以播放许多不同类型的媒体.你可以在这里找到它:https://github.com/google/ExoPlayer/


Wil*_*ann 9

由于Android MediaPlayer类无法访问较低级别的设置(如缓冲区大小),因此您无能为力.唯一的选择是让自己的播放器使用AudioTrack和像FFmpeg这样的库来进行解码.

  • 史蒂夫,我开发了一个开源的Android应用程序,可能会完成你想要完成的任务.我还添加了FFmpeg支持,因此我可以像mms://那样传输协议.请参阅此处的代码:http://sourceforge.net/projects/servestream/.如果您有任何疑问,可以随时通过SourceForge与我联系.我希望这有帮助. (2认同)