Android MediaPlayer buffer大小

Android MediaPlayer buffer

前几天用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 ==========

您对“我的文章”有任何疑问,可用微信扫描以下“二维码”向我提问!

在这里插入图片描述

bjxiaxueliang CSDN认证博客专家 Java OpenGL Android
一名普通Android程序员,专注Android、OpenGL ES、移动音视频等终端技术研发。
希望通过该博客分享自己的Android Coding心路。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值