每每到618、雙11這樣的大型活動的時候,每天都有幾個重要的大v或者品牌直播需要保障,
以往的重點場次監播方式是這么造的:
對每路直播的源流、各檔轉碼流分別起一個ffplay播放視窗,再手動調整尺寸在顯示幕桌面進行布局,排到一屏里來監播,
這樣做的缺點:
-
操作復雜,手動調整畫面不美觀
-
不同的拉流時間點,起播時間有誤差,畫面無法協調一致
-
當拉多路流的時候,帶寬也受限制,基本上拉3-4個2m碼率以上的流本機就會卡頓了,此時如果流有問題,就不能準確判斷卡頓來源了,檢查起來也比較費勁
展示方式是這樣的:
ffplay 'rtmp://stream1' & ffplay 'rtmp://stream2' & ffplay 'rtmp://stream3' & ffplay 'rtmp:/stream4' & ffplay 'rtmp://stream5' & ffplay 'rtmp://stream6' & ffplay 'rtmp://stream7' & ffplay 'rtmp://stream8'
PS:這么多的視窗,點著是挺麻煩的??
在我們混流生產層能力完備后,就開始琢磨怎么將它賦能在平常或者大促的直播間重保上,同時也為了更加專業、更高效的進行監播,經過了一段時間的打磨,提煉了一個簡單的混流編排功能,
它的作業模式是這樣的:
在這里你可以創建混流任務,并支持你在不斷流的狀態下做到更新任務輸入資訊,
將要監播的直播流地址,需要展示的文字內容、布局方式、混流輸出的模板配置進行下發,就可以拉到自動編排好的直播流地址,
它現在長這個樣子:
最終呈現出來的混流的效果是這樣的??:
也可以是這樣的:
也可以呈現其他的布局方式,目前還沒做的那么豐富,不過底層能力和api介面是都支持的,完全靈活布局,
在混流任務運行程序中,可以自由修改混流輸入源的配置,
這種新型的監播方式,可以直觀的區分源流、各檔轉碼流的播放效果:畫面內容是否正常,有無花屏、是否卡頓?
當出現問題時能夠指導我們快速做出決策:
-
轉碼流有問題,源沒有問題,快速排查任務日志,定位是什么原因導致
-
轉碼流有問題,源也有問題,迅速問題源流的流詳細資訊,定位問題并通知業務方進行操作
-
主流都有問題,備流沒問題,通知業務方迅速切備流
還有其他的一些有點:
-
操作簡單方便,還可以記憶配置,下次直接修改
-
每個播放端只需拉一路流,節省本地帶寬
-
最多可以支持16路混流,一屏監播16路流的畫面
-
不斷流,輕松切換各種布局
-
不斷流,隨便操作流的添加、洗掉、修改
-
方便分享給其他人進行播放
混流布局功能的底層實作框架:
- 定義通用的layout布局結構-BasicClip
{
ClipType string `json:"clipType"`
LeftMargin int `json:"leftMargin"`
PosX *int `json:"posX"`
PosY *int `json:"posY"`
Width int `json:"width"`
Height int `json:"height"`
}
在此基礎上擴展出更豐富的BorderClip, TextClip, ImageClip等型別,來滿足不同的布局元素設計,
- 定義通用的videoMask結構,它可以包含多個clip interface, 即各種clip元素,在videoMask中各個clip是同一個layer的,只允許在限定的尺寸中進行布局,
type VideoMask struct {
Layer int `json:"layer"`
Clips []interface{} `json:"clips"`
}
- 每個輸入的視頻流,可以包含多個videoMask,多個videoMask在最終overlay的時候,按定義的layer先后順序進行鋪疊,以達到最終的預期視頻布局效果,
應用場景拓展
- 什么情況下使用混流?
?當設備不支持同時拉多路流時使用混流,比如sip入會的場景,
?需要多個視頻畫面、多個音頻流合成一個直播流時使用混流,比如會議錄制(rtc協議)場景、教育類場景(直播老師和學生的畫面)、直播連麥的場景等,
總結:此次能在618重保期間發揮它的價值,也算是有所得,希望以后可以在日常直播、展會等其他重要直播活動中發揮作用,關于混流的產品介紹以及更多的使用場景也會在后續的文章中一一展開,敬請期待,
作者:京東科技 孟曉偉
來源:京東云開發者社區
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/554664.html
標籤:其他
上一篇:主動發現系統穩定性缺陷:混沌工程
下一篇:返回列表
