前言:本文將簡要分享幾個語音聊天室的應用場景,並講述如何實現語音聊天室。文末有 Demo 源碼,歡迎參考。android
語音聊天在泛娛樂社交行業中有着重要的地位,行業中不少佼佼者也都爲用戶提供了語音聊天室,甚至有些平臺最初就是依託語音聊天起家的,好比你們熟悉的YY。 從最初的一對一語音通話,到以 YY 爲引爆點的多人語音羣聊,再到如今彙集了一批「音控」的純語音社交平臺,不少類型的應用中都有語音聊天室。bash
例如語音電臺,這是語音聊天室中比較典型的場景。主播能夠在直播間中與給聽衆講故事、唱歌,內容形式不一而足,觀衆也能夠申請上麥,與主播聊天互動。主要實現的功能就是語音連麥,以及經過消息系統來實現的文字消息功能。看似簡單,可是有些優質的語音社交平臺能達到每個月1億的流水。服務器
再譬如語音開黑,它也是語音聊天室的常見應用場景。因爲目前還有一些遊戲不支持實時語音通話的功能。同時,也有一些王者玩家想收費帶青銅小白上分,而遊戲中不支持付費帶玩,那麼語音聊天室成爲了知足需求的出口。在一些應用中,玩家能夠經過可付費預定的語音聊天室,容許其餘玩家預定陪玩的,同時還能夠語音開黑。功能上與語音直播類似,只是在這個頻道中,不須要增長觀衆上下麥的邏輯。網絡
以上只是包含了語音聊天的部分場景而已,綜上來看,語音聊天室須要知足的主要功能包括:架構
要實現一個具有以上功能的語音聊天室,大體能夠分爲兩步:實現語音連麥、支持背景音樂播放。併發
首先是實現語音連麥。若是要經過自研的方法實現,會相對複雜一些,不只須要本身部署服務器並作好高併發應對,對編解碼器進行優化以解決回聲和噪聲問題,還要合理部署邊緣節點來解決網絡延時問題。解決以上幾個主要問題後,還須要優化對中小運營商網絡的支持。整體來說,就是須要解決設備端、網絡中的語連麥穩定低延時問題與可用性問題。咱們在《詳解音視頻中的低延時》這篇文章中詳細分析了優化的思路。ide
而以上這些問題,咱們早已爲開發者解決,並將接口集成於聲網 SDK 中。開發者無需重複造車輪,再本身搭建媒體服務、信令服務、優化音視頻編解碼、作網絡傳輸策略優化等問題。高併發
咱們要要基於聲網的視頻通話 SDK 來實現這個場景。爲何是基於視頻通話 SDK 來開發,而不是語音 SDK 呢?post
視頻通話 SDK 支持語音與視頻功能。若開發者作好語音聊天室後,還能夠根據本身須要在該基礎上實現視頻連麥。測試
更便於已經開發視頻連麥直播的開發者,進一步實現語音聊天室。
下圖爲實現語音聊天室場景的架構圖與實現思路:
咱們會基於如下開發環境來作開發:
SDK 的集成步驟比較簡單,對於有開發基礎的同窗,應該無需手把手教了。
房主一端建立 RtcEngine
對象,並填入 App ID。經過 setChannelProfile
接口將頻道設置爲直播模式。而後用 setClientRole
來設定主播(Broadcaster)和觀衆(Audience)的角色。 一般,觀衆上麥請求、主播經過上麥申請等一系列操做都是經過消息服務來完成的。當觀衆發出上麥請求,並獲得了房主的上麥許可後,只須要經過 setClientRole
將該觀衆設定爲 Broadcaster ,便可上麥。這時,咱們就完成了連麥的功能。當觀衆下麥的時候,一樣地,將其身份修改會 Audience 便可。
在主播或觀衆離開房間時,經過調用 LeaveChannel
來完成。咱們能夠經過一張圖,來了解語音聊天室中接口的調用邏輯:
在一些應用場景下,好比秀場、娛樂直播中,一般都會有背景音樂。因此,在實現了基本的連麥功能後,咱們還須要增長背景音樂的混音、播放控制。
在這個 Demo 中,咱們的音樂放在了本地,而非雲端。也就是說,主播能夠在本身的客戶端上選擇想播放的音樂,而後咱們能夠經過 AudioMixing
接口,在本地與主播語音混音後,播放給連麥聽衆和普通聽衆。
最後,考慮到在娛樂直播、遊戲開黑、社交,甚至是教育場景下的語音聊天室,對於聲音的碼率、採樣率、聲道數的需求都有細微差異。咱們在 SDK 中,還提供了「設置音質」的接口,即 setAudioProfile
,供開發者根據實際聽到的效果來自由調整。
public abstract int setAudioProfile(int AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5, int AUDIO_SCENARIO_CHATROOM_ENTERTAINMENT = 1);
複製代碼
舉個例子,若是作的是娛樂方向的應用,會遇到聽衆頻繁上下麥的狀況,而且須要48 KHz採樣率、音樂編碼、雙聲道、編碼碼率 192 kbps,那麼可按照上述代碼來設置 profile、scenario(上述代碼段可左右拖動,查看完整代碼)。
而在教育應用中也有師生之間的語音聊天室。而教育對於語音連麥的要求是,更注重流暢性與穩定性。那麼能夠將 scenario 的參數設定爲AUDIO_SCENARIO_EDUCATION = 2
。 咱們在 SDK 中對這個接口的 profile 與 scenario 各有5個不一樣的參數設置,具體你們可查看 setAudioProfile
的詳細文檔。
有些開發者但願以語音社交切入泛娛樂市場,也有一些市場上的視頻社交玩家,但願加入語音聊天室,來進一步拓展市場版圖。因爲該場景是基於聲網視頻通話 SDK 實現,能夠同時知足以上兩種需求。
咱們在 Github 已經提供了一套完整的 Demo,你們能夠在「語音聊天室」的開發者文檔頁面上獲取。在 Demo 的基礎上,開發者只須要不到1周的時間,對 UI 和功能作簡單修改便可準備測試上線。另外,咱們還會後續對 demo 進行更新維護,從交互上讓它更接近實際產品,但願能給你們更多的參考意義。
如遇到開發問題,歡迎訪問聲網 Agora問答版塊,發帖與聲網工程師交流。