【发布时间】:2010-12-10 21:03:11
【问题描述】:
有没有办法改变流MediaPlayer的默认缓冲区大小?
【问题讨论】:
标签: android
有没有办法改变流MediaPlayer的默认缓冲区大小?
【问题讨论】:
标签: android
缓冲区大小被烘焙到固件中。您所能做的就是密切关注缓冲区的填充量,即使这只是百分比。
对不起!
【讨论】:
public booleansetParameter(int key, int value) 如果您知道密钥的值(我为 RK 设备提供它们),您可以这样做。不幸的是我找不到调用这个方法的方法(虽然它是公开的),但我会找到的,一定有办法做到这一点!
大小在frameworks/base/media/libstagefright/include/NuCachedSource2.h中设置
kDefaultHighWaterThreshold 和 kDefaultLowWaterThreshold 在 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,
};
如果您介意这个问题,那么您可能对错误报告感兴趣 https://code.google.com/p/android/issues/detail?id=29870
【讨论】:
这可能与您的具体问题并不完全相关,但也许其他人会因此得到帮助:
我只需要知道缓冲区有多大。我猜是固定的字节数,而不是固定的播放时间。
要估计音频/视频缓冲区大小,您可以实现OnBufferingUpdateListener 来检测缓冲区何时完全填满,并使用TrafficStats 确定您的流媒体在启动流之间消耗了多少字节并且缓冲区已满。这应该是 MediaPlayer 使用的缓冲区大小的指标...
【讨论】:
流式传输实时内容时会出现问题,例如:实时网络广播。作为实时内容,我无法计算任何内容,因为轨道长度是无限的,并且永远不会调用 MediaPlayer 中的 onBuffering 方法。
我的意图是根据比特率因素设置一个缓冲区以优化资源并增加它以防止 3G 断开连接。好吧,我确实无法阻止 3G 断开连接,但我想说的是,我可以延长此连接时间,以使流媒体对最终用户更加活跃。
所以我想我可以编写一个 Java 代理来连接实时内容并根据比特率设置我自己的缓冲区大小,然后将此代理作为 url 传递给 MediaPlayer 并播放内容。
但在开始编写此代码之前,我想知道是否有其他方法或其他更好的技巧可以应用于 MediaPlayer 来解决此问题。
【讨论】: