IjkMediaPlayer在播放RTMP等网络直播流时,默认采用的是点播模式的参数
点播模式追求流畅性,提前加载若干秒的视频,这样到播放时就不用因为等待数据造成卡顿
但是这种模式也带来了延时性问题,这种策略是不适合直播模式的
在有互动的直播模式下,实时性更重要,我们可以按照以下设置来保证实时性
//创建IjkMediaPlayer
protected IjkMediaPlayer createIjkMediaPlayer() {
IjkMediaPlayer player = new IjkMediaPlayer();
//设置启动时的探测时间
player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", 100L);
player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 100L);
//设置探测区大小
player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10 * 1024L);
//关闭播放缓冲区
player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0L);
//立刻写出处理完的Packet
player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1L);
//允许丢帧
player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1L);
//优化进度跳转
player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
player.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "fastseek");
return player;
}