舞台现场直播技术实践
舞臺現(xiàn)場直播由于場景復(fù)雜度高,對各環(huán)節(jié)的可靠性要求也非常高。YY音視頻技術(shù)專家朱明亮在LiveVideoStack線上交流分享中結(jié)合YY直播實(shí)踐詳細(xì)解析了直播中涉及的視頻采集卡編程,軟硬件編碼,視頻濾鏡處理等內(nèi)容。本文由LiveVideoStack整理而成。
文 / 朱明亮
整理 / LiveVideoStack
直播回放
https://www.baijiayun.com/web/playback/index?classid=18122048034091&token=Jv7T0C-YExG1r0cPh106AjAUFyC70_gPZ0Q5yXJijyDhyxC9yFqkUsWhhzWOZ5uojAk6Qj2pOAo
大家好,我是來自YY的朱明亮。今天我將從以下幾個方面,為大家介紹YY在舞臺現(xiàn)場直播領(lǐng)域的技術(shù)實(shí)踐。
1.?總體直播方案
1.1 背景介紹
每年,YY都會舉辦粉絲嘉年華活動,這是網(wǎng)絡(luò)主播與粉絲線下見面的機(jī)會,很多主播會來到現(xiàn)場表演與互動;每年年末YY還會舉辦年度盛典,旨在表彰平臺上一年內(nèi)最優(yōu)秀的網(wǎng)絡(luò)主播,其中包括紅毯與晚會等活動;除此之外,YY平臺上一些高人氣主播的高質(zhì)量直播活動也需要我們強(qiáng)有力的技術(shù)支持,我們會允許主播使用相關(guān)直播方案,保證直播的質(zhì)量及穩(wěn)定性。
?
上圖展示的就是年度盛典現(xiàn)場,復(fù)雜絢麗的舞美燈光音效對直播方案提出了更高的技術(shù)要求。
1.2 普通直播方案
為了保障規(guī)模巨大場景復(fù)雜的大型直播活動高質(zhì)量進(jìn)行,我們需要選擇可靠高效的直播解決方案。對一些優(yōu)先級與復(fù)雜程度一般的直播活動我們會選用較為普通的直播解決方案,前端采集畫面數(shù)據(jù)的為普通攝像頭或高清攝像機(jī),采集到的數(shù)據(jù)通過采集卡輸入至導(dǎo)播軟件;除此之外,導(dǎo)播軟件也可讀取本地文件如片花或片頭等以應(yīng)對如直播剛開始時攝像頭或高清攝像機(jī)無信號等突發(fā)情況,待采集端設(shè)備恢復(fù)正常工作后再將信號源切換到攝像頭或高清攝像機(jī);視頻數(shù)據(jù)經(jīng)過導(dǎo)播軟件的編碼推流等一系列處理流程后會被上傳至YY平臺,并通過YY的私有協(xié)議或RTMP協(xié)議進(jìn)行分發(fā),最終,用戶可以通過PC、移動端與網(wǎng)頁端等進(jìn)行觀看。
1.3 高可靠直播方案——雙源雙線路
?
如果面對的是如年度盛典與YY粉絲嘉年華等高規(guī)格高優(yōu)先級的大型直播活動,我們需要高可靠直播方案為整場活動的順利進(jìn)行保駕護(hù)航。我們的思路是采用雙源雙線路的模式,前端采用多機(jī)位高清攝像機(jī)采集現(xiàn)場畫面,多路視頻數(shù)據(jù)接入現(xiàn)場的硬件導(dǎo)播臺,導(dǎo)播臺分出的一路HD SDI信號會先經(jīng)過采集卡再到達(dá)軟件導(dǎo)播并在軟件導(dǎo)播處進(jìn)行一系列音視頻與畫面處理,隨后處理完成的數(shù)據(jù)經(jīng)由編碼與YY的私有協(xié)議推至YY云平臺,這是上圖展示的線路1;為了提升整個系統(tǒng)的可靠性,我們的直播頻道采用多線路直播方案,一旦某個線路出現(xiàn)斷路或推流失敗,系統(tǒng)會自動將其他可用線路信號切換到該頻道,從而保障直播的穩(wěn)定;除此之外,每條線路還有備用直播方案,硬件導(dǎo)播臺會繼續(xù)分出一路HD SDI信號至硬件編碼機(jī)并由此推流至平臺,備用推流主要用于該線路主推流方案失效時確保直播過程的順利進(jìn)行;除了上述兩條線路,我們還把由硬件導(dǎo)播臺分出的第三路信號通過衛(wèi)星發(fā)送并用衛(wèi)星接收機(jī)在活動現(xiàn)場之外接收,此路信號會被傳輸至軟件導(dǎo)播臺,而后被推流至YY云中的同一頻道,也就是上圖展示的線路2;我們會為線路1與線路2選用不同的運(yùn)營商,從而避免由運(yùn)營商網(wǎng)絡(luò)故障造成對直播活動的影響。雙源雙線路可有效提高直播活動的整體可靠性。
2.?軟件導(dǎo)播臺
?
這里著重介紹一下之前提到的軟件導(dǎo)播臺MShow。
2.1 MShow簡介
MShow是一個PC端的編碼推流軟件,可實(shí)現(xiàn)信號切換、音視頻處理、編碼推流、提供高質(zhì)量直播服務(wù)等,為YY的重大直播活動提供可靠技術(shù)保障。同樣,MShow支持4K/H.265硬件編碼直播與1080P/30fps/H.265軟件編碼直播。
2.2 MShow整體框架
?
MShow主要基于VideoSDK開發(fā)音視頻處理功能包括編解碼、采集、濾鏡、渲染、推流等等;當(dāng)被運(yùn)用在YY平臺時,MShow依賴YY的業(yè)務(wù)系統(tǒng)包括頻道邏輯、開播邏輯、流管理、帳戶體系等等;而被運(yùn)用于第三方平臺時則不依賴上述業(yè)務(wù)邏輯。
2.3 MShow音視頻框架?
?
音視頻框架主要由視頻與音頻兩部分組成。在視頻部分,數(shù)據(jù)由包括采集卡、攝像頭與文件組成的前端輸入Video Source,并在隨后的Video Filter進(jìn)行濾鏡處理,最后傳輸至編碼器;音頻部分的流程與視頻類似,數(shù)據(jù)由麥克、聲音回放系統(tǒng)或采集卡組成的前端輸入Audio Source,進(jìn)行后續(xù)的一系列處理。需要注意的是,上圖展示的由Video Source指向Audio Source的虛線表示有的視頻采集卡本身涵蓋了音頻信號,這些Video端收集到的音頻信號可傳輸至音頻處理部分與來自音頻前端的數(shù)據(jù)一起進(jìn)行編碼等后續(xù)處理,這些處理完畢的碼流會通過YY協(xié)議上傳至平臺,并進(jìn)行封裝與轉(zhuǎn)碼從而形成多碼流。
3.?關(guān)鍵技術(shù)實(shí)踐
3.1 音視頻時戳處理
?
設(shè)計(jì)整個架構(gòu)經(jīng)歷的關(guān)鍵技術(shù)實(shí)踐值得我們探索,首先是音視頻時戳處理。所謂時戳處理就是在切換不同視頻源時進(jìn)行的防止時戳突變或不同步的必要處理過程,有時一些片源其本身就包含了不規(guī)范的時戳,會出現(xiàn)突變或倒退,此時就需要我們主動對其進(jìn)行修正。上圖右側(cè)展示的示意圖中,藍(lán)色橫線表示整個直播流的一條時間軸,其保存的當(dāng)前直播流的最大時間戳一直隨著直播單調(diào)遞增;當(dāng)?shù)谝欢我曨l結(jié)束之后,系統(tǒng)就會保存此視頻的最大時戳,當(dāng)然需對第一段視頻的時戳進(jìn)行變換,變換到系統(tǒng)時戳的時基;當(dāng)切換到下一段視頻時,如果下一段音視頻的時戳不是從0開始,那么系統(tǒng)就會對此時間軸的時戳進(jìn)行標(biāo)準(zhǔn)化處理,也就是將時戳最小規(guī)范到0,加上當(dāng)前系統(tǒng)保存的最大時間戳再,最后將新時戳變換到其所在的音視頻時間軸之上從而保證音視頻切換平滑流暢。
3.2 視頻濾鏡處理
?
MShow會根據(jù)前端信號與所需編碼推流的一些參數(shù)如寬高分辨率等形成特定的Filter字符串,并將其傳遞給avfilter graph alloc,再借助avfilter graph parse ptr解析此字符串,生成相應(yīng)的Filter Graph;與此同時,MShow會將由采集卡獲取的原始視頻數(shù)據(jù)通過av buffersrc add frame傳至BufferSrc,視頻幀會經(jīng)過FFmpeg Filter Graph的處理,處理完成后會通過av buffersink get frame被編碼推流至MShow,完成視頻濾鏡的整個處理流程。
3.3 采集音視頻預(yù)覽
?
采集音視頻預(yù)覽主要在導(dǎo)播界面上進(jìn)行。在采集卡接收到音頻音效之后,操作者可能聽不到聲音,此時我們就需要對采集音視頻進(jìn)行預(yù)覽。視頻預(yù)覽較為簡單,主要過程就是接收到數(shù)據(jù)之后直接使用DX/OpenGL等渲染得到預(yù)覽畫面;音頻預(yù)覽則是在采集卡獲取到原始音頻數(shù)據(jù)之后使用SDL播放。如果音頻數(shù)據(jù)并非來自采集卡而是來自系統(tǒng)回放設(shè)備則不需要預(yù)覽播放,否則會出現(xiàn)回聲現(xiàn)象。
4.?采集卡編程
?
采集卡編程主要分為兩種常見類型:DirecShow采集與Decklink采集。前者多用于攝像頭與Magewell,后者則多用于Blackmagic。
4.1 DirectShow采集
?
DirectShow采集流程如上圖所示:首先,DirectShow會創(chuàng)建Filter Graph Manager,Filter Graph Manager則創(chuàng)建Graph,再創(chuàng)建一個可從采集卡上獲取原始信號的Capture Filter并加入Graph,再創(chuàng)建Grabber Filter,加入Graph,并實(shí)現(xiàn)ISampleGrabber接口,可將采集到的原始數(shù)據(jù)傳入MShow,由Mshow進(jìn)行后續(xù)處理。
?
整體流程主要是,首先用戶選擇所需采集的設(shè)備,隨后系統(tǒng)創(chuàng)建Filter Graph并枚舉所有設(shè)備匹配用戶所選;然后根據(jù)用戶所選設(shè)備創(chuàng)建Capture Filter,同時加入Graph;接下來,系統(tǒng)會創(chuàng)建SampleGrabberCallback用來接收原始數(shù)據(jù),根據(jù)用戶需求設(shè)置視頻格式并啟動Graph。
4.2 Decklink采集
?
Decklink采集的流程如上圖所示:首先MShow用戶選擇一個合適的Decklink Device,之后系統(tǒng)會創(chuàng)建一個Decklink Device Discovery實(shí)例,此實(shí)例會發(fā)現(xiàn)系統(tǒng)中的所有decklink設(shè)備并根據(jù)用戶選擇創(chuàng)建Device Instance,并從該設(shè)備查詢獲取一個IDecklink input Object;此Object會進(jìn)行一系列實(shí)際操作如設(shè)置音視頻數(shù)據(jù)回調(diào)、設(shè)置音頻獲取參數(shù)、采樣率、聲道數(shù)等等;接下來,系統(tǒng)會啟用AudioInput與VideoInput,其中的VideoInput會根據(jù)用戶選擇的分辨率或幀率為其匹配一個最佳的模式并調(diào)用StartStreams,啟動采集流程。一般情況下,根據(jù)輸入設(shè)備不同,Decklink中只有一種格式是有效的,設(shè)置正確方可成功采集視頻,不匹配則會出現(xiàn)黑屏;為了自動偵測采集卡視頻格式,需要實(shí)現(xiàn)Format Changed通知函數(shù);如果設(shè)置的格式與采集卡的格式不一致,就會觸發(fā)Format Changed事件,在該函數(shù)里獲取正確的視頻參數(shù),重新配置視頻參數(shù),并通知應(yīng)用程序及時改變設(shè)置,比如MShow得到通知后需改變Filter Graph。調(diào)用SetCallBack,設(shè)置接收原始視頻數(shù)據(jù)的回掉,采集到的原始視頻數(shù)據(jù)由此回傳至MShow。
?
在Decklink編程中我們需要注意以下幾點(diǎn):
1)Decklink一般僅支持兩種顏色空間:8BitBGRA與8bitYUV。如果選擇8BitBGRA那么其對應(yīng)的FFmpeg中的顏色空間應(yīng)為8BitBGR0而非8BitBGRA,否則畫面就會出現(xiàn)混亂的現(xiàn)象。8bitYUV對應(yīng)到FFmpeg里的YUYV422。
2)大部分設(shè)備使用Decklink僅有一種有效視頻格式。啟用EnableVideo時需要使用bmdVideoInputEnableFormatDetection用以自動偵測實(shí)際支持的格式并觸發(fā)Format Change事件,需實(shí)現(xiàn)VideoInputFormatChanged,我們需要重置采集流程并重設(shè)視頻參數(shù);同時通知外部APP重置Filter Graph。
3)一般情況下攝像機(jī)輸入的格式為Interlaced,此時我們需要在DShow上啟用Deinterlace。
5.?穩(wěn)定性與可靠性
?
為保證整個系統(tǒng)運(yùn)行的穩(wěn)定性與可靠性,我們做出了以下三個方面的實(shí)踐與努力:在方案上我們采用了雙線路推流與硬編備份的高可用方案,使得每條線路都有兩條編碼與推流,其中硬編作為備份;在硬件選擇上我們選擇高可靠性的采集卡與攝像機(jī);在系統(tǒng)維護(hù)上我們實(shí)行日志機(jī)制與實(shí)時監(jiān)控報(bào)警,多管齊下確保系統(tǒng)正常運(yùn)行。
具體來說,我們在確保系統(tǒng)穩(wěn)定可靠上做出的探索,主要包括機(jī)器性能、編解碼錯誤事件、網(wǎng)絡(luò)狀況及傳輸性能三個方面數(shù)據(jù)的實(shí)時上報(bào)與碼率自適應(yīng),相信這些探索能顯著提升系統(tǒng)整體運(yùn)行的安全穩(wěn)定。
精品文章推薦
技術(shù)干貨:
HDR視頻生態(tài)系統(tǒng)縱覽
2018:視頻標(biāo)準(zhǔn)混戰(zhàn)的元年序幕
Demuxed:編解碼器和壓縮的未來
愛奇藝視頻版權(quán)保護(hù)技術(shù)與維權(quán)實(shí)踐
VP9如何給Twitch的電競直播帶來價值?
精致前處理,精準(zhǔn)碼控 — 極致視覺效果
DeepFocus,基于AI實(shí)現(xiàn)更逼真的VR圖像
基于QoE的實(shí)時視頻編碼優(yōu)化:低功耗,低延時,高質(zhì)量
總結(jié)
以上是生活随笔為你收集整理的舞台现场直播技术实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Netflix:我们是如何评估Codec
- 下一篇: 音视频技术开发周刊 81期