在今年Facebook F8大會上,Facebook宣佈了將在Instagram Direct上開放一對一與群組視訊聊天功能,這種新功能可以幫助使用者使用實時視訊聊天來相互連線,即使是他們沒能相聚在一起。毫無疑問,社交領域的一線平臺開始越來越重視實時音視訊技術在社交領域的應用。
不過,在Instagram正準備增加視訊社交功能之前,我們國內的某款已上市社交應用,已經基於實時音視訊基礎能力,開始擴充新的玩法了。而且,據說上線後,立刻成為使用者們正向體驗的功能,使用者活躍與留存雙破新高。這個新功能就是KTV。我們也用電腦+手機錄製了一段視訊,大家可以感受下這款設計應用中的多人KTV功能(如果你只想聽效果,請空降38秒處)。
在社交直播中,有人是靠顏值上位,有人則是以優美的聲線取勝,KTV正是為後者準備的。從上面這個視訊可以看出,具體功能如下:
-
房主建立房間後,開啟KTV功能,上麥;
-
房主線上點歌,歌曲與KTV歌房中常見MV一樣,包括畫面、字幕伴奏;
-
觀眾可以申請上麥,進行點歌、演唱;
-
上麥的觀眾在演唱時可自主調節伴奏與人聲音量;
-
房主可控制歌曲暫停、切歌。
與直播秀場有什麼差別?
你可能想問:聽上去就是直播秀場,這有什麼差別麼?其實,兩者之間在功能和體驗都存在差別。
在功能方面如表格所示,秀場直播主播演唱時,觀眾可以文字參與評論、互動,也可以上麥。但觀眾上麥後只能聊天,不能上臺演唱。而一起KTV的伴奏曲庫存放於線上,任何觀眾都可以線上點歌、演唱。
從體驗角度講,秀場直播只是主播的個人秀。秀場相當於是主播的“獨樂樂”。而一起KTV更接近線下KTV體驗。每個人都可以點歌,都有機會演唱,是一種互動體驗的升級。
實現KTV功能需要留意哪些問題
一起KTV與我們曾分享過的“賽事直播”場景很像,都是基於實時音視訊技術的基本能力擴充而來的。從表面來看,一起KTV功能很簡單,但其中存在一些難點:
歌曲控制同步
“一起KTV”強調的是要“一起”唱,主播可以邀請多個聽眾上麥,你方唱罷,我登場,每個人都有機會站在聚光燈下。
在這個過程中,“話筒”會按順序傳遞給不同連麥觀眾,主播仍然可以控制歌曲的播放,如切歌、暫停等操作。但如果採用RTMP傳輸,網路延時較高。那麼網路情況較好情況下,當主播暫停歌曲或切歌后,可能連麥演唱的觀眾在3~4秒後才會發現,或者歌曲已經開始,下一個演唱者還沒能開唱。如果網路情況差,延遲可能會超過10秒。
高音質、高畫質
每個站上臺演唱的人都想展現自己真正的技術。如果無法以高質量音質傳輸,無疑會影響使用者體驗。同時,該場景下的MV畫面相當於連麥中的視訊畫面,卡頓、模糊等問題同樣存在。開發者如果希望通過自研實現,需要基於UDP協議進行傳輸,並在邊緣節點的部署、主幹網路擁塞、弱網傳輸等方面做出優化策略。
如我們在《詳解音視訊直播中的低延時》中所說,開發者除了要對網路傳輸進行優化,還需要儘可能優化編解碼演算法,降低音視訊在端上的延時。
聲網的實現思路
我們具體研究了該功能的實現方式,開發者們可以點選這裡檢視詳細開發步驟,或者也可以通過Github直接獲取 原始碼,自己動手嘗試一下。我們的實現邏輯如上圖所示,具體邏輯是這樣的:
-
房主開啟“一起KTV”功能後成為演唱者;
-
房主端從第三方線上曲庫讀取MV歌曲資料;
-
觀眾上麥申請被房主通過後,可線上點歌,並開始排麥;
-
房主的歌聲與MV伴奏在本地經過混音、編碼,基於UDP協議傳輸至Agora SD-RTN™;
-
然後我們通過UDP協議將房主K歌歌聲與MV畫面傳輸給觀眾;
-
輪到播放上麥觀眾所點的歌時,觀眾成為演唱者,除了沒有歌曲控制許可權外,歌曲演唱、混音、編碼、傳輸流程與房主一致。
除實現主要的功能之外,我們還需要支援傳輸720p以上的高清畫面。這是為了保證在手機上MV(包含了歌詞)的觀看體驗。同時,還需要額外開發包括音量調節、切歌、演唱者切換等主播控制功能。
如對我們的方案感興趣,或遇到開發問題,歡迎訪問聲網 Agora問答版塊,發帖與聲網工程師交流。