更改MediaPlayer上的缓冲区大小

有没有什么办法可以改变MediaPlayer上的默认缓冲区大小?

Solutions Collecting From Web of "更改MediaPlayer上的缓冲区大小"

缓冲区大小被烘焙到固件中。 你所能做的就是保持缓冲区填充的多less,甚至只是一个百分比的基础上。

抱歉!

大小在frameworks / base / media / libstagefright / include / NuCachedSource2.h中设置

kDefaultHighWaterThresholdkDefaultLowWaterThreshold在Android 2.3.7和Android 4.0.4之间上升缓冲区的大小增加了8倍,就像在这个线程中声明的Android – MediaPlayer Buffer Size in ICS 4.0

你需要一个自定义的ROM。

Android 2.3.7

 enum { kPageSize = 65536, kHighWaterThreshold = 5 * 1024 * 1024, kLowWaterThreshold = 512 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. kKeepAliveIntervalUs = 15000000, }; 

Android 4.0.4

 enum { kPageSize = 65536, kDefaultHighWaterThreshold = 20 * 1024 * 1024, kDefaultLowWaterThreshold = 4 * 1024 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. kDefaultKeepAliveIntervalUs = 15000000, }; 

如果你介意这个问题,那么也许你对这个bug报告感兴趣https://code.google.com/p/android/issues/detail?id=29870

这可能与您的具体问题不完全相关,但也许其他人会得到这样的帮助:

我只需要知道缓冲区有多大。 我猜这是固定数量的字节,而不是固定的播放时间。

要估计audio/video缓冲区大小,可以实现一个OnBufferingUpdateListener来检测缓冲区何时完全填满,并使用TrafficStats来确定stream媒体在启动stream和缓冲区满之间消耗了多less字节。 这应该是MediaPlayer使用的缓冲区大小的一个指标。

stream式传输实况内容时出现问题,例如:现场networking电台。 作为实时内容,我无法计算任何内容,因为轨道长度是无限的,MediaPlayer中的onBuffering方法从不会被调用。

我的意图是根据比特率因子设置一个缓冲区来优化资源并增加资源以防止3G连接断开。 那么,我真的不能阻止3G连接断开,但我想说的是,我可以长时间连接这个连接,以保持最终用户的stream畅性。

所以我认为我可以编写一个Java代理来连接到实况内容,并根据比特率设置我自己的缓冲区大小,然后在MediaPlayer上将此代理作为URL传递并播放内容。

但在开始编码之前,我想知道是否有另一种方法,或另一个更好的技巧,我可以应用到MediaPlayer来解决这个问题。