ijkplayer參數(shù)設(shè)置講解

防丟失衫嵌,所以記錄一下所禀。
參數(shù)相關(guān)
IJKFFOptions參數(shù)說明

//打開h265硬解
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", 1);
/*-------------CodecOption-------------*/
//解碼參數(shù),畫面更清晰
[options setCodecOptionIntValue:IJK_AVDISCARD_DEFAULT forKey:@"skip_loop_filter"];
[options setCodecOptionIntValue:IJK_AVDISCARD_DEFAULT forKey:@"skip_frame"];

//以下是直播取募、點播參數(shù)設(shè)置不同
if (直播) {
   // Param for living
   //最大緩存大小是3秒,可以依據(jù)自己的需求修改
   [options setPlayerOptionIntValue:3000 forKey:@"max_cached_duration"];
   //無限讀
   [options setPlayerOptionIntValue:1 forKey:@"infbuf"];  
   //關(guān)閉播放器緩沖
   [options setPlayerOptionIntValue:0 forKey:@"packet-buffering"];
} else {
   // Param for playback
   [options setPlayerOptionIntValue:0 forKey:@"max_cached_duration"];
   [options setPlayerOptionIntValue:0 forKey:@"infbuf"];
   [options setPlayerOptionIntValue:1 forKey:@"packet-buffering"];
}

/*-------------PlayerOption-------------*/
//在視頻幀處理不過來的時候丟棄一些幀達到同步的效果
//跳幀開關(guān),如果cpu解碼能力不足宁仔,可以設(shè)置成5,否則會引起音視頻不同步峦睡,也可以通過設(shè)置它來跳幀達到倍速播放
[options setPlayerOptionIntValue:5/*0*/ forKey:@"framedrop"];
//最大fps
[options setPlayerOptionIntValue:30 forKey:@"max-fps"];
//幀速率(fps) 可以改翎苫,確認非標準楨率會導(dǎo)致音畫不同步,所以只能設(shè)定為15或者29.97
[options setPlayerOptionIntValue:29.97 forKey:@"r"];
//設(shè)置音量大小榨了,256為標準音量煎谍。(要設(shè)置成兩倍音量時則輸入512,依此類推)
[options setPlayerOptionIntValue:512 forKey:@"vol"];
//指定最大寬度
[options setPlayerOptionIntValue:960 forKey:@"videotoolbox-max-frame-width"];
//開啟/關(guān)閉 硬解碼(硬件解碼CPU消耗低龙屉。軟解呐粘,更穩(wěn)定)
[options setPlayerOptionIntValue:0 forKey:@"videotoolbox"];
//是否有聲音
[options setPlayerOptionIntValue:1  forKey:@"an"];
//是否有視頻
[options setPlayerOptionIntValue:1  forKey:@"vn"];
//每處理一個packet之后刷新io上下文
[options setPlayerOptionIntValue:1 forKey:@"flush_packets"];
//是否禁止圖像顯示(只輸出音頻)
[options setPlayerOptionIntValue:1 forKey:@"nodisp"];
//
[options setPlayerOptionIntValue:0 forKey:@"start-on-prepared"];
//
[options setPlayerOptionIntValue:@"fcc-_es2" forKey:@"overlay-format"];
//
[options setPlayerOptionIntValue:3 forKey:@"video-pictq-size"];
//
[options setPlayerOptionIntValue:25 forKey:@"min-frames"];


/*-------------FormatOption-------------*/
//如果是rtsp協(xié)議,可以優(yōu)先用tcp(默認是用udp)
[options setFormatOptionValue:@"tcp" forKey:@"rtsp_transport"];
//播放前的探測Size转捕,默認是1M, 改小一點會出畫面更快
[options setFormatOptionIntValue:1024*16*0.5 forKey:@"probsize"];
//播放前的探測時間
[options setFormatOptionIntValue:50000 forKey:@"analyzeduration"];
//自動轉(zhuǎn)屏開關(guān)
[options setFormatOptionIntValue:0 forKey:@"auto_convert"];
//重連次數(shù)
[options setFormatOptionIntValue:1 forKey:@"reconnect"];
//超時時間作岖,timeout參數(shù)只對http設(shè)置有效。若果你用rtmp設(shè)置timeout瓜富,ijkplayer內(nèi)部會忽略timeout參數(shù)鳍咱。rtmp的timeout參數(shù)含義和http的不一樣。
[options setFormatOptionIntValue:30 * 1000 * 1000 forKey:@"timeout"];
//
[options setFormatOptionIntValue:@"nobuffer" forKey:@"fflags"];
//
[options setFormatOptionIntValue:@"ijkplayer" forKey:@"user-agent"];
//
[options setFormatOptionIntValue:0 forKey:@"safe"];
//
[options setFormatOptionIntValue:0 forKey:@"http-detect-range-support"];
//
[options setFormatOptionIntValue:4628439040 forKey:@"ijkapplication"];
//
[options setFormatOptionIntValue:6176477408 forKey:@"ijkiomanager"];

注意

skip_loop_filter參數(shù)相關(guān)

// for codec option 'skip_loop_filter' and 'skip_frame'
typedef enum IJKAVDiscard {
    /* We leave some space between them for extensions (drop some
     * keyframes for intra-only or drop just some bidir frames). */
    IJK_AVDISCARD_NONE    =-16, ///< discard nothing
    IJK_AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
    IJK_AVDISCARD_NONREF  =  8, ///< discard all non reference
    IJK_AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
    IJK_AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
    IJK_AVDISCARD_ALL     = 48, ///< discard all
} IJKAVDiscard;

前面兩個都看得懂
第三個是拋棄非參考幀(I幀)
第四個是拋棄B幀
第五個是拋棄除關(guān)鍵幀以外的与柑,比如B谤辜,P幀
第六個是拋棄所有的幀,這我就奇怪了价捧,之前Android默認的就是48丑念,難道把所有幀都丟了?
那就沒有視頻幀了结蟋,所以應(yīng)該不是這么理解脯倚,應(yīng)該是skip_loop_filter和skip_frame的對象要過濾哪些幀類型。
skip_loop_filter這個是解碼的一個參數(shù),叫環(huán)路濾波推正,設(shè)置成48和0恍涂,圖像清晰度對比,0比48清楚植榕,理解起來就是再沧,0是開啟了環(huán)路濾波,過濾的是大部分尊残,而48基本沒啟用環(huán)路濾波炒瘸,所以清晰度更低,但是解碼性能開銷小
skip_loop_filter(環(huán)路濾波)簡言之:
a:環(huán)路濾波器可以保證不同水平的圖像質(zhì)量寝衫。
b:環(huán)路濾波器更能增加視頻流的主客觀質(zhì)量顷扩,同時降低解碼器的復(fù)雜度。
具體參考:
http://blog.csdn.net/h514434485/article/details/52241778
http://www.cnblogs.com/TaigaCon/p/5500110.html
skip_frame我沒完全理解意思慰毅,應(yīng)該是等同上面這個類似隘截。

相關(guān)問題以及解決方案

1、達不到秒開事富,首屏顯示慢技俐,后來把播放前探測時間改為1

//播放前的探測時間
[options setFormatOptionIntValue:1 forKey:@”analyzeduration”];

2、音畫不同步统台,有同事發(fā)現(xiàn)在模擬器的情況下音畫不同步雕擂,剛開始理解以為是CPU處理畫面處理不過來,所以加了framedrop參數(shù) 做了丟幀處理贱勃,后來才明白是因為模擬器處理效率低井赌,不需要做丟幀處理

//開啟硬解碼(硬件解碼CPU消耗低。軟解贵扰,更穩(wěn)定)
[options setPlayerOptionIntValue:1 forKey:@”videotoolbox”];

3仇穗、延遲產(chǎn)生的原因以及優(yōu)化

  1. 產(chǎn)生原因
    保證直播的流暢性是指在直播過程中保證播放不發(fā)生卡頓,卡頓是指在播放過程中聲音和畫面出現(xiàn)停滯戚绕,非常影響用戶體驗纹坐。造成卡頓的原因有幾種情況:
    (1) 推流端網(wǎng)絡(luò)抖動導(dǎo)致數(shù)據(jù)無法發(fā)送到服務(wù)器,造成播放端卡頓;
    (2) 播放端網(wǎng)絡(luò)抖動導(dǎo)致數(shù)據(jù)累積在服務(wù)器上拉不下來舞丛,造成播放卡頓耘子。
    由于從服務(wù)器到播放器的網(wǎng)絡(luò)情況復(fù)雜,尤其是在3G和帶寬較差的WIFI環(huán)境下球切,抖動和延遲經(jīng)常發(fā)生谷誓,導(dǎo)致播放不流暢,播放不流暢帶來的負面影響就是延時增大吨凑。如何在網(wǎng)絡(luò)抖動的情況下保證播放的流暢性和實時性是保障直播性能的難點捍歪。
  2. 流暢度優(yōu)化
    目前主流的直播協(xié)議是RTMP、HTTP-FLV和HLS,都是基于TCP的長連接糙臼。在播放的過程中庐镐,若播放端所處的網(wǎng)絡(luò)環(huán)境在一個較佳的狀態(tài),此時播放會很流暢弓摘。若網(wǎng)絡(luò)環(huán)境不是很穩(wěn)定焚鹊,經(jīng)常會發(fā)生抖動,如果播放端沒有做特殊處理韧献,可能會經(jīng)常發(fā)生卡頓,嚴重的甚至?xí)霈F(xiàn)黑屏研叫。而移動直播由于其便捷性锤窑,用戶可以隨時隨地發(fā)起和觀看直播,我們無法保證用戶的網(wǎng)絡(luò)一直處于一個非常好的狀態(tài)嚷炉,所以渊啰,在網(wǎng)絡(luò)不穩(wěn)定的情況下保證播放的流暢度是非常重要的。
    為了解決這個問題申屹,首先播放器需要將拉流線程和解碼線程分開绘证,并建立一個緩沖隊列用于緩沖音視頻數(shù)據(jù)。拉流線程將從服務(wù)器上獲取到的音視頻流放入隊列哗讥,解碼線程從隊列中獲取音視頻數(shù)據(jù)進行解碼播放嚷那,隊列的長度可以調(diào)整。當網(wǎng)絡(luò)發(fā)生抖動時杆煞,播放器無法從服務(wù)器上獲取到數(shù)據(jù)或獲取數(shù)據(jù)的速度較慢魏宽,此時隊列中緩存的數(shù)據(jù)可以起到一個過渡的作用,讓用戶感覺不到網(wǎng)絡(luò)發(fā)生了抖動决乎。
    當然這是對于網(wǎng)絡(luò)發(fā)生抖動的情況所采取的策略队询,如果播放端的網(wǎng)絡(luò)遲遲不能恢復(fù)或者服務(wù)器的邊緣結(jié)點 出現(xiàn)宕機,則需要應(yīng)用層進行重連或調(diào)度构诚。

4蚌斩、軟硬編解碼的選擇

軟編解碼:使用CPU進行編解碼,大多使用FFmpeg來編碼和解壓音視頻數(shù)據(jù)范嘱;
硬編解碼:主要使用非CPU進行編解碼送膳,如GPU等。在使用中彤侍,大多直接調(diào)用系統(tǒng)API進行音視頻編解碼處理肠缨。

序號 優(yōu)點 缺點
1 軟編解碼 在不同的設(shè)備、系統(tǒng)版本中兼容性極高盏阶;解碼時晒奕,色彩還原度更高;編解碼過程可擴展性強; CPU占用高脑慧,手機易發(fā)熱魄眉,耗電量大。
2 硬編解碼 系統(tǒng)占用少闷袒,執(zhí)行效率高坑律。 兼容性低,需根據(jù)硬件廠商和系統(tǒng)版本單獨適配囊骤;可控性比較差晃择;

綜合以上情況,在推流方面也物,iOS系統(tǒng)和硬件設(shè)備統(tǒng)一性高宫屠,使用全硬編方案效果更好;Android因機型繁雜滑蚯,支持程度不一浪蹂,推薦4.3以上使用硬編。在播放解碼方面告材,iOS硬解和軟解支持性都較高坤次,軟解功耗更高,但是在部分細節(jié)方面表現(xiàn)較優(yōu)斥赋,可控性強缰猴,具體視項目情況選擇;Android推薦4.1版本以上使用硬解灿渴,以下版本使用軟解洛波。

注:參考 https://superdanny.link/2017/05/09/iOS-IJKPlayer/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骚露,隨后出現(xiàn)的幾起案子蹬挤,更是在濱河造成了極大的恐慌,老刑警劉巖棘幸,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焰扳,死亡現(xiàn)場離奇詭異,居然都是意外死亡误续,警方通過查閱死者的電腦和手機吨悍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹋嵌,“玉大人育瓜,你說我怎么就攤上這事≡岳茫” “怎么了躏仇?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵恋脚,是天一觀的道長。 經(jīng)常有香客問我焰手,道長糟描,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任书妻,我火速辦了婚禮船响,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躲履。我一直安慰自己见间,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布工猜。 她就那樣靜靜地躺著缤剧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪域慷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天汗销,我揣著相機與錄音犹褒,去河邊找鬼。 笑死弛针,一個胖子當著我的面吹牛叠骑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播削茁,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼宙枷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茧跋?” 一聲冷哼從身側(cè)響起慰丛,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘾杭,沒想到半個月后诅病,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡粥烁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年贤笆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨阻。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡芥永,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钝吮,到底是詐尸還是另有隱情埋涧,我是刑警寧澤板辽,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站飞袋,受9級特大地震影響戳气,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巧鸭,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一瓶您、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纲仍,春花似錦呀袱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乡革,卻和暖如春寇僧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沸版。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工嘁傀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人视粮。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓细办,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕾殴。 傳聞我的和親對象是個殘疾皇子笑撞,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容