本文為您介紹解決連麥中觀眾在視頻與語音模式切換時樣式和布局不同步的方案。
背景
在主播與觀眾連麥的情境中,參與連麥的觀眾通常可以選擇使用語音或者視頻模式進行連麥,這兩種模式下,直播間觀眾和麥上主播展示樣式會有差異,傳統的方式是當連麥中的觀眾進行視頻連麥和語音連麥切換時,採用信令訊息通知的方式來實現布局和樣式變更。這類方案存在兩個弊端 :
由於直播和信令的傳輸延遲差異大,會出現APP樣式(比如頭像、暱稱等)和視頻流布局的樣式不一致。
若連麥觀眾在語音與視頻模式之間頻繁切換,則需要頻繁更新混流布局,增大系統性風險。
方案
連麥觀眾在視頻模式時,正常推送視頻流用於連麥和混流 ,當從視頻切換到語音模式時,用戶端推送一張系統圖片進行混流和佔位 。同時依託SEI資訊即時調整直播間的樣式展示。
下文以連麥觀眾從視頻模式切換到語音模式為例,為您闡述切換過程中的直播間樣式處理方案:
對於直播間現有觀眾和麥上主播的推薦處理方式:
建立直播推流引擎AlivcLivePushConfig設定物件時,其pauseImg參數傳遞一張預設圖片,當從視頻連麥切換成語音連麥後,該預設圖片用作連麥觀眾布局佔位和混流,這樣可以避免頻繁更新混流。
連麥觀眾B調用muteLocalCamera介面關閉視頻推送,觀眾B本端可以直接貼頭像, 從視頻連麥切換成語音連麥。
通知商務服務端連麥觀眾B視頻關閉,商務服務端儲存連麥觀眾B視頻關閉狀態,通過廣播將連麥觀眾B視頻關閉訊息通知給麥上其他主播,主播收到該訊息後貼連麥觀眾B的頭像。
連麥觀眾B同步調用sendMessage介面(SEI介面),自訂視頻關閉/開啟訊息體,發送連麥觀眾B視頻關閉SEI訊息(用於通知麥下一般觀眾)。
麥下一般觀眾解析自訂SEI訊息,連麥觀眾B視頻關閉,查詢連麥觀眾B的小窗位置資訊,貼頭像。
連麥觀眾B的小窗位置資訊在周期性SEI中,具體請參見基於SEI實現布局平滑切換。
對於新加入直播間觀眾的推薦處理方式 :
進入直播間,從商務服務端擷取直播資訊,播放URL,使用CDN播放地址播放視頻流。
從商務服務端擷取直播間資訊,主播和連麥觀眾基本資料、布局資訊,主播和連麥觀眾的視頻開啟/關閉狀態。
針對連麥觀眾是視頻連麥的,在視頻視窗疊加使用者資訊;語音連麥觀眾,直接顯示頭像資訊。
連麥觀眾B的小窗位置資訊在周期性SEI中,具體請參見基於SEI實現布局平滑切換。