更改MediaPlayer上的缓冲区大小

有没有办法在流媒体MediaPlayer上更改默认缓冲区大小?

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

缓冲区大小被烘焙到固件中。 您所能做的就是密切关注缓冲区的填充量,即使只是基于百分比。

抱歉!

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

kDefaultHighWaterThresholdkDefaultLowWaterThreshold在Android 2.3.7和Android 4.0.4之间上升。缓冲区大小增长了8倍,如此线程Android中所述 – ICS 4.0中的MediaPlayer缓冲区大小

你需要一个自定义的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, }; 

如果您介意这个问题,那么您可能对错误报告感兴趣https://code.google.com/p/android/issues/detail?id=29870

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

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

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

流媒体直播内容时会出现问题,例如:直播网络电台。 作为实况内容我无法计算任何东西,因为轨道长度是无限的,并且从不调用MediaPlayer中的onBuffering方法。

我的目的是根据比特率因子设置一个缓冲区来优化资源并增加它以防止3G断开。 好吧,我真的不能阻止3G断线,但我想说我可以延长这个连接,以便让最终用户更加流畅。

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

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