直播實(shí)踐之IJKPlayer淺析(一)

從去年末至今年年初错蝴,直播真是火了一把,各個(gè)平臺(tái)都做直播颓芭,YY顷锰,斗魚,映客亡问,天貓官紫,淘寶,脈脈州藕,任意類型的App加上直播后都會(huì)有全新業(yè)務(wù)形式束世,今天就從技術(shù)角度來說說直播客戶端以及主要IJKPlayer的相關(guān)日常。


1. 主要直播鏈路如下:

從技術(shù)選型來說來說床玻,播放端在市面上有很多開源播放器毁涉。

1. 在技術(shù)選擇過程中沒有選用AVFoundation中的AVPlayer,由于AVPlayer在播放直播流m3u8過程中對(duì)延遲的控制不好锈死,而rtmp擁有較小的延遲的優(yōu)點(diǎn)贫堰,然而這里還有坑,后續(xù)會(huì)慢慢道來馅精。

2. 由于先前沒有視頻的技術(shù)儲(chǔ)備严嗜,從而選擇業(yè)內(nèi)成熟的直播方案。

整理了一下市面上的直播方案洲敢,有如下幾種:

播放器 特點(diǎn) 類型
IJKPlayer 支持格式多漫玄,社區(qū)活躍高 直播,錄播压彭,本地播放
ZFPlayer AVFoundation系統(tǒng)原生 支持錄播視頻睦优,業(yè)務(wù)樣式比較多,可參考
VLC 完全跨平臺(tái)壮不,但是移植到客戶端上成本較高 使用范圍廣汗盘,支持360全景
AVFoundation 蘋果原生、Airplay原生支持 支持HLS直播询一、大部分播放功能

經(jīng)過市場分析隐孽,B站癌椿,美拍和斗魚都使用IJKPlayer,經(jīng)歷市場試驗(yàn)菱阵,IJKPlayer較為穩(wěn)定的一款播放器踢俄。經(jīng)過對(duì)比,我們選擇了IJKPlayer這套iOS和Android可以基于同一套C層邏輯的直播方案晴及。

為了業(yè)務(wù)快速上線都办,我們選擇了較為穩(wěn)定ffpmeg2.8版本,期間也踩了不少坑虑稼,比如硬件解碼綠屏的問題琳钉,回放視頻時(shí)間軸不準(zhǔn)確的問題,我們都采用對(duì)應(yīng)的規(guī)避手段蛛倦,避免出現(xiàn)這樣的情況歌懒。

2. 流格式的選擇

RTMP和HLS之間的主要優(yōu)劣對(duì)比如下:

RTMP HLS
優(yōu)點(diǎn) 延遲較短,無需多次建連 基于分片文件胰蝠,可以做到無縫切換分辨率歼培,HLS是蘋果推出的,iOS支持的很好
缺點(diǎn) 累積延遲茸塞,TCP不會(huì)丟包躲庄,對(duì)于服務(wù)器CPU占比較高 延遲高,20s-30s钾虐,不適合互動(dòng)很強(qiáng)的直播噪窘,HLS在建立連接和斷開連接時(shí)候的握手,揮手會(huì)產(chǎn)生消耗

既然使用了開源代碼效扫,如果使用HLS還不如直接用AVFoundation來的穩(wěn)定和直接倔监。

正如剛才所說的rtmp雖然可以做到很低的延遲,但是沒有辦法解決累積延遲菌仁,通過多路查找浩习,我們先從官方的issue里面也找到相關(guān)問題,然后從播放器參數(shù)角度上一定程度的優(yōu)化了延遲的情況济丘,當(dāng)然這塊也需要推流端以及流媒體服務(wù)器的配合才能將延遲優(yōu)化做到最好谱秽。

3. 直播中播放器相關(guān)幾個(gè)主要問題

1. 視頻打開速度慢

rtmp直播流打開慢,在avformat_find_stream_info()摹迷,這個(gè)函數(shù)會(huì)花去主要的時(shí)間疟赊,因?yàn)橐隽鞯姆治霾鸱值龋詢?yōu)化可以重點(diǎn)從這個(gè)函數(shù)入手峡碉。
另一種方法比較極端些近哟,自己實(shí)現(xiàn)這個(gè)函數(shù)的功能。根據(jù)metadata信息鲫寄,手動(dòng)設(shè)置解碼參數(shù)吉执,這個(gè)效果比較明顯疯淫,針對(duì)264+aac的rtmp可以考慮這種優(yōu)化方案。
IJKPlayer相關(guān)的優(yōu)化參數(shù)如下:

參數(shù) 優(yōu)化數(shù)值 優(yōu)化點(diǎn)
max_queue_size 10 x 1024 x 1024 減小預(yù)讀取的閥值戳玫,這樣能更快的打開視頻
probsize 4096 探測帶第一幀后就會(huì)數(shù)據(jù)返回峡竣,如果這個(gè)值設(shè)置過小,會(huì)導(dǎo)致流的信息分析不完整量九,從而導(dǎo)致丟失流,用于秒開

2. 開啟硬解碼會(huì)綠屏

綠邊相關(guān)問題颂碧,硬件解碼開啟后荠列,OpenGLES的相關(guān)渲染對(duì)推流過來的尺寸有嚴(yán)格要求,需要2*n,這塊需要和推流端一起配合载城,這樣硬件解碼才能給用戶和手機(jī)帶來更多的好處肌似。

3. 累積延遲

通過排查,RTMP經(jīng)過CDN的這一層會(huì)有4.0到5.0秒的延遲诉瓦,我們在IJKPlayer這一層做了對(duì)應(yīng)的參數(shù)優(yōu)化川队,相關(guān)參數(shù)如下:

參數(shù) 優(yōu)化點(diǎn)
skip_loop_filter Skip loop filtering for selected frames.
skip_frame codec discard all non reference

優(yōu)化延遲問題,也可以從推流端入手,將編碼器調(diào)低GOP睬澡,譬如1秒一個(gè)GOP固额,這樣延遲也很低,也不用等待煞聪,壞處是編碼器壓縮率會(huì)降低斗躏,圖像質(zhì)量沒有那么好。并且對(duì)服務(wù)端的壓力也很大昔脯。

還有一個(gè)主要原因是ffplay默認(rèn)的幀率控制沒有追幀的策略啄糙,所以網(wǎng)絡(luò)如果發(fā)生抖動(dòng),延時(shí)會(huì)累加云稚。優(yōu)化策略就是調(diào)整幀率控制部分隧饼。原則就是要在流暢度和實(shí)時(shí)性之間得到一個(gè)平衡。

4. 斷開直播推流后静陈,error回調(diào)較慢

這樣的問題主要出在燕雁,IJKPlayer在播放RTMP中對(duì)應(yīng)的Time-out參數(shù)起作用只有在Http這層,如果使用HLS或者FLV的話的確有用窿给,如果是RTMP的話贵白,Time-out參數(shù)完全和Http中的不是一個(gè)含義,rtmp time-out相關(guān),后續(xù)通過咨詢,error狀態(tài)的回調(diào)取決于服務(wù)端流傳遞的情況崩泡,好的狀態(tài)下30s內(nèi)就可以回調(diào)error禁荒。

2. 總結(jié)

斷斷續(xù)續(xù)說了很多直播中采坑,這只是個(gè)開始角撞,后續(xù)慢慢更新呛伴。更多IJKPlayer內(nèi)容可以直接關(guān)注官方Issue

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勃痴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子热康,更是在濱河造成了極大的恐慌沛申,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姐军,死亡現(xiàn)場離奇詭異铁材,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奕锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門著觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惊暴,你說我怎么就攤上這事饼丘。” “怎么了辽话?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵肄鸽,是天一觀的道長。 經(jīng)常有香客問我油啤,道長典徘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任村砂,我火速辦了婚禮烂斋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘础废。我一直安慰自己汛骂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布评腺。 她就那樣靜靜地躺著帘瞭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒿讥。 梳的紋絲不亂的頭發(fā)上蝶念,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音芋绸,去河邊找鬼媒殉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摔敛,可吹牛的內(nèi)容都是我干的廷蓉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼马昙,長吁一口氣:“原來是場噩夢啊……” “哼桃犬!你這毒婦竟也來了刹悴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤攒暇,失蹤者是張志新(化名)和其女友劉穎土匀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體形用,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡就轧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了田度。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓丰。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖每币,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琢歇,我是刑警寧澤兰怠,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站李茫,受9級(jí)特大地震影響揭保,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魄宏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一秸侣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宠互,春花似錦味榛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至券册,卻和暖如春频轿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烁焙。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工航邢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骄蝇。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓膳殷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乞榨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秽之,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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