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

我的应用程序需要很长时间来准备和缓冲audiostream。 我已经阅读了这个问题为什么Android的MediaPlayer需要这么长时间来准备一些实时stream媒体播放? 但是这只是说人们经历过这个问题,并没有说明如何改善这个问题。

我正在经历从2.2 – 4.1.2testing的所有Android版本。

这些stream适合移动和3G连接的比特率。 相同的stream在等同的iOS应用程序中开始缓冲不到一秒钟。

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

谢谢。

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

Solutions Collecting From Web of "Android MediaPlayer需要很长时间准备和缓冲"

几个月来我一直在努力解决这个问题。 最后我find了解决办法。

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

本教程和源代码正是如此解释。 http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

通过调整这个代码,很容易创build一个更好的stream媒体播放器。

Google Developers真的搞砸了。

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

由于Android MediaPlayer类不提供对较低级别设置(如缓冲区大小)的访问,因此确实没有太多可以做的事情。 唯一的select是使自己的播放器使用AudioTrack和像FFmpeg库来做解码。

我build议的一件事是玩编码。 例如,对于MP4,确保MOOV Atom位于文件的开头(关于如何使用ffmpeg执行此操作,S / O上有足够的问题)。 有了MP3,你可以看看不同的编解码器或比特率。

例如,你可以尝试一些你在网上find的audio文件,如果你看到一个不需要很长时间的缓冲文件,试着用相同的方法编码你的文件。