当probesize和analyzeduration过小时,可能会造成预读数据不足,无法解析出码流信息,从而导致播放失败、无音频或无视频的情况。所以,在服务端对视频格式进行标准化转码,从而确定视频格式,进而再去推算 avformat_find_stream_info 分析码流信息所兼容的最小的 probesize 和 analyzeduration,就能在保证播放成功率的情况下最大限度地区优化首屏秒开
// 跳过循环滤波
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
// 设置最长分析时长
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 100L);
// 通过立即清理数据包来减少等待时长
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1L);
// 暂停输出直到停止后读取足够的数据包
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0L);
// 网络不好的情况下进行丢包
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1L);
// 去掉音频
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "an", 1);
// 不查询stream_info,直接使用
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"find_stream_info", 0);
// 等待开始之后才绘制
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "render-wait-start", 1);
描述 | 大小 | 时长(ms) |
---|---|---|
第一次安装 | 51.4M | 842 |
杀进程进入 | 238 | |
未杀进程重进 | 245 | |
第一次安装 | 39.2M | 294 |
杀进程进入 | 264 | |
未杀进程重进 | 256 | |
第一次安装 | 11.5M | 140 |
杀进程进入 | 146 | |
未杀进程重进 | 126 |
描述 | 大小 | 时长(ms) |
---|---|---|
第一次安装 | 51.4M | 207 |
杀进程进入 | 194 | |
未杀进程重进 | 212 | |
第一次安装 | 39.2M | 176 |
杀进程进入 | 156 | |
未杀进程重进 | 133 | |
第一次安装 | 11.5M | 98 |
杀进程进入 | 106 | |
未杀进程重进 | 88 |
PS:数据为多组测试数据平均值