我們此前曾分享了上線首日就為熊貓直播獲取幾十萬流水的新玩法“直播間PK”。其實,直播間還能加入更多新玩法,能互動連麥的賽事直播。
現在很多比賽與活動都會出現在網路直播間中,比如最近剛剛開賽的KPL電競賽事,抑或是今年即將開賽的世界盃。賽事直播的數量會逐漸變多。
目前,如果主播想在直播間直播世界盃、KPL等賽事,有兩種方法:
- 一種是單純的轉播賽事畫面(包括電視臺解說);
- 另一種是通過OBS類軟體,將賽事直播畫面與主播畫面合圖後推流。
但是,這兩種方式都存在缺點。第一種方式的缺點是無法播放主播自己的音視訊流,與轉播電視臺節目無異。第二種雖然實現了轉播畫面與直播畫面合圖推流,但是無法讓主播與觀眾直接進行連麥互動,等於捨棄了本已被使用者普遍接受的直播連麥功能。
如果想同時實現賽事直播與主播連麥,也不無可能。在主播直播過程中,主播可以通過拉流的方式,將外部視訊流加入到自己直播畫面中。當然,通過這種方式,我們能引入的視訊源不僅僅侷限於電競比賽、體育賽事,還可以是熱門電視劇、活動直播,甚至是無人機的實時航拍畫面。
這種方式不僅可以解決賽事直播缺少連麥互動,還可以讓普通直播間可以從單純的唱見、手遊直播、戶外直播,瞬間變成圍繞共同興趣或實時熱點的互動直播間,主播與觀眾一邊看“節目”,一邊音視訊連麥互動。
在這個場景中具體需要實現以下幾個功能:
-
引入外部視訊流
-
主播音視訊直播
-
兩個視訊流合圖
-
兩個視訊流時間同步
-
其它業務功能(禮物、彈幕、評論等)
實現難點解析
難點一:外部視訊源轉碼
外部視訊源多種多樣,視訊格式、解析度、幀率、位元速率千差萬別。所以,為了適應不同的終端裝置和網路,會在接到視訊源後進行轉碼。
普通視訊網站在做賽事轉播的時候,一般會提取到的格式是 mp4,但也會出現其它格式。而解析度則可能是 360p、720p 或 1080p。所以獲取到賽事視訊流時,需要先對該流轉碼,生成一路流,再通過 CDN 推到觀眾端。為了相容不同的終端和網路,在轉碼時可生成多個解析度的資源,服務端配套相應的策略來分發。
而“外部視訊源”不但是為了適配終端和網路,還為了便於與主播畫面合圖。直播平臺的主播視訊流是已經定義好的,外部視訊源的幀率、位元速率、解析度不統一的情況時,無法合圖,進一步導致無法推流至觀眾端。
因此,需要有轉碼,這部分工作如果沒有做好,會導致只能支援有限的外部視訊源格式,比如固定的 AVx 或 H.264。 無法降低或修改解析度、位元速率、幀率。外部音視訊流與主播音視訊流的結合也較為複雜,兩路流合成一路流時,合圖的邏輯、音效處理邏輯都需要考慮。
難點二:主播流與外部流時間同步
在使用場景中,主播在獲取到外部音視訊流後,會同步解說。兩路流是分別傳輸至服務端合圖,並不是在主播端合圖。因此,合圖時要做好主播與外部流的時間同步,讓主播的解說與外部流的畫面能夠對應。
如果以 Agora SD-RTN™ 作為服務端,我們可以通過下圖來解釋時間同步的過程。音視訊流傳輸主要有三個環節:
-
藍色部分:第三方視訊流處理(藍色);
-
黃色部分:主播音視訊流傳輸至 Agora SD-RTN™(黃色);
-
紅色部分:合圖後的流經過 CDN 傳送至觀眾端;
需要做同步的是藍色和黃色部分。這兩個環節要延時、並且有時間戳標記。
難點三:信令可靠性
從架構圖可以看出,請求外部視訊流、外部視訊流轉碼、合圖三個環節都需要信令的參與。信令的可靠性,直接影響相應環節的成功率。
提升信令可靠性要通過覆蓋骨幹網路的大網和讓使用者就近接入的邊緣節點,二者缺一不可。
如何通過 Agora SDK 實現?
現在,開發者通過聲網Agora SDK 2.1版新增的“外部輸入直播視訊源”功能,可以直接跨過上述三大難點,實現邏輯如下:
1.第三方視訊流處理:
-
主播端通過信令,請求轉碼伺服器從拉取外部音視訊源;
-
外部視訊流進入轉碼伺服器,轉碼後傳入 Agora SD-RTN™;
2.主播音視訊流傳輸至 Agora SD-RTN™;
3.主播音視訊流與外部音視訊流在 Agora SD-RTN™ 內合圖;
信令控制合圖後的流再次轉碼,成為 rtmp 流,經過 CDN 傳送至觀眾端 。
支援賽事直播場景的同時,“外部輸入視訊源”還可支援多種場景,比如:
-
在直播中拉入一路或多路 RTMP 或 HLS 流,可以是比賽、演出,同時多人看視訊,並互動;
-
除了網路視訊源,還能將無人機或其它網路攝像頭捕獲的畫面引入主播畫面。
基於此功能,還可以實現更多玩法,大家可以自由發揮想象。若想了解詳細介面與實現流程,歡迎訪問聲網 Agora 開發者中心。