應用場景,之前項目中集成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);