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

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

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

这些流具有适合移动和3G连接的比特率。同一流只需不到一秒钟的时间即可在等效的 iOS 应用中开始缓冲。

有没有办法指定应缓冲的时间量?我知道调谐收音机应用程序提供此功能( https://play.google.com/store/apps/details?id=tunein.player )。

谢谢。

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


答案 1

几个月来,我一直在为这个问题而苦苦挣扎。最后我找到了解决方案。

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

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

通过改编此代码,可以轻松创建更好的流媒体播放器。

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

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


答案 2

实际上,您无能为力,因为 Android MediaPlayer 类不提供对较低级别设置(如缓冲区大小)的访问。唯一的选择是使用AudioTrack和像FFmpeg这样的库来制作自己的播放器来进行解码。


推荐