更改MediaPlayer上的缓冲区大小

时间:2010-12-10 21:03:12

标签: android

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

4 个答案:

答案 0 :(得分:12)

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

抱歉!

答案 1 :(得分:11)

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

Android 2.3.7和Android 4.0.4之间

kDefaultHighWaterThreshold kDefaultLowWaterThreshold 上升 缓冲区大小增长了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,
};

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

流媒体直播内容时出现问题,例如:直播互联网广播。作为实况内容,我无法计算任何内容,因为轨道长度是无限的,MediaPlayer中的onBuffering方法永远不会被调用。

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

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

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