Open VeiZhang opened 5 years ago
经过几百次重复播放,我发现ijkplayer有一定概率出现延迟高,加载慢,fps低的问题,大概5-6次播放就会出现一次,感觉和网速没有关系,用VLC2.26播放相同的rtmpUrl都很正常,目前我的解决思路就是一出这种异常,就重新创建player
@zj381652512 跟你复现的操作不一样,每次播放或者seek,前几秒都会出现fps低的情况。
我觉得这个应该是视频在等音频。
一般从封装中读出的视频pts会大于音频pts,如果采取音频为主时钟,就需要视频重复已经播放的帧来等待音频。
参考https://www.jianshu.com/p/358a42ecc7d6
@ribory 没效果,我已经设置了该选项
@ribory 没效果,我已经设置了该选项
我这边是这个原因,我的参数设置
private IjkMediaPlayer createPlayer() {
IjkMediaPlayer ijkMediaPlayer = new IjkMediaPlayer();
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "min-frames", 100);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
//如果项目中同时使用了HTTP和HTTPS的视频源的话,要注意如果视频源刚好是相同域名,会导致播放失败,这是由于dns缓存造成的;
//设置清除dns cache;
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "http-detect-range-support", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 10000000);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect", 5);
ijkMediaPlayer.setVolume(1.0f, 1.0f);
setEnableMediaCodec(ijkMediaPlayer, mEnableMediaCodec);//
return ijkMediaPlayer;
}
//设置是否开启硬解码
private void setEnableMediaCodec(IjkMediaPlayer ijkMediaPlayer, boolean isEnable) {
int value = isEnable ? 1 : 0;
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", value);//开启硬解码
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", value);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", value);
}
@ribory 好的,谢谢,我用你的配置试试
//播放前的探测Size,默认是1M, 改小一点会出画面更快 setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"probesize", 200); 设置这个参数我的页面正常了。
使用官方ijk的示例,修改使用硬解,播放该段视频HEVC-000.ts,前几秒FPS低,导致画面卡,之后是正常播放。 请教如何解决或者跳过卡的帧?