一文了解 Android MediaPlayer buffer大小

本文探讨了Android MediaPlayer的缓冲区大小,特别是在不同Android版本(2.3.7, 4.0.4, 8.0.0)中的设置。缓冲区的上下限在固件中预设,影响视频播放前的等待时间和流媒体稳定性。例如,2.3.7版的最低和最高缓冲值分别为512K和5M,而后续版本则提升到4M和20M。了解这些细节有助于优化短视频应用的性能。" 88096230,7490950,快速排序的分区策略解析,"['排序算法', '算法', '快速排序']
摘要由CSDN通过智能技术生成

前几天用VideoView (MediaPlayer+SurfaceView) 做一个类似于抖音APP的短视频Demo(测试机型 Android8.0 小米6),发现MediaPlayer onPrepared的时间非常长,好像把一个不到10M的视频全部缓存结束后,才回调onPrepared,开始视频播放。
因此:

  • 学习一下MediaPlayer的buffer大小到底是多少;

MediaPlayer的buffer大小

通过change-buffer-size-on-mediaplayer了解到,Mediaplayer的缓冲区管理类为NuCachedSource2,该类在Android源码frameworks某个路径下,缓冲区的上限、下限为固件中写死的两个数值:

Android 2.3.7

线上源码:
frameworks/base/media/libstagefright/NuCachedSource2.h

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

线上源码:
frameworks/base/media/libstagefright/NuCachedSource2.h

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,
};

Android 8.0.0

线上源码:
frameworks/av/include/media/stagefright/NuCachedSource2.h

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,
};
  • kDefaultLowWaterThreshold 越大 说明播放前的缓冲时间越长;
  • kDefaultKeepAliveIntervalUs 说明如果15s内收不到数据,就需要重启链接;

2.3.7版本 最低、最高值分别是512K 和 5M ;
Android 2.3.7以后,最低值为4M 最高值为20M;

参考:
https://stackoverflow.com/questions/4413300/change-buffer-size-on-mediaplayer
https://issuetracker.google.com/issues/36945644

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
欢迎关注我的公众号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjxiaxueliang

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值