应用场景,之前项目中集成ijkplayer播放直播流,每次开启都很慢,大概需要五到十秒。
刚好最近在研究ijkplayer,就顺带把这个问题顺带解决了。
IJKFFOptions *options=[IJKFFOptions optionsByDefault];
//不限制输入缓存区大小
[optionssetOptionIntValue:1 forKey:@"infbuf" ofCategory:kIJKFFOptionCategoryPlayer];
//最大缓存区大小
[optionssetOptionIntValue:1024 forKey:@"maxx-buffer-size" ofCategory:kIJKFFOptionCategoryPlayer];
//设置rtmp的来源
[optionssetOptionValue:[YPGlobalObject shareInstance].bundleIdentifier forKey:@"rtmp_pageurl" ofCategory:kIJKFFOptionCategoryFormat];
//底下这几句补上,可以大大提高ijkplayer打开直播流的速度
[optionssetOptionIntValue:100L forKey:@"analyzemaxduration" ofCategory:1];
[optionssetOptionIntValue:10240L forKey:@"probesize" ofCategory:1];
[optionssetOptionIntValue:1L forKey:@"flush_packets" ofCategory:1];
[optionssetOptionIntValue:0L forKey:@"packet-buffering" ofCategory:4];
[optionssetOptionIntValue:1L forKey:@"framedrop" ofCategory:4];
在ffplay播放时,如果加上-fflags nobuffer可以缩短播放的rtmp视频延迟甚至能达到在1s内播放的效果。同样,只要是基于ffmpeg中的ffplay播放器,都可以通过加上类似设置达到这个效果。比如在PLDroidPlayer当中,也可以加入这个选项:
AVOptions options = new AVOptions();
options.setInteger(AVOptions.VALUE_FFLAGS_NOBUFFER, 1);
options.setInteger(AVOptions.KEY_PROBESIZE,10240);