一套代码快速实现一个语音聊天室
語音聊天在泛娛樂社交行業中有著重要的地位,行業中很多佼佼者也都為用戶提供了語音聊天室,甚至有些平臺最初就是依托語音聊天起家的,比如大家熟悉的YY。
從最初的一對一語音通話,到以 YY 為引爆點的多人語音群聊,再到現在聚集了一批“音控”的純語音社交平臺,很多類型的應用中都有語音聊天室。
例如語音電臺,這是語音聊天室中比較典型的場景。主播可以在直播間中與給聽眾講故事、唱歌,內容形式不一而足,觀眾也可以申請上麥,與主播聊天互動。主要實現的功能就是語音連麥,以及通過消息系統來實現的文字消息功能。看似簡單,但是有些優質的語音社交平臺能達到每月1億的流水。
再譬如語音開黑,它也是語音聊天室的常見應用場景。由于目前還有一些游戲不支持實時語音通話的功能。同時,也有一些王者玩家想收費帶青銅小白上分,而游戲中不支持付費帶玩,那么語音聊天室成為了滿足需求的出口。在一些應用中,玩家可以通過可付費預約的語音聊天室,允許其他玩家預約陪玩的,同時還可以語音開黑。功能上與語音直播相似,只是在這個頻道中,不需要增加觀眾上下麥的邏輯。
如何實現語音聊天室
以上只是包含了語音聊天的部分場景而已,綜上來看,語音聊天室需要滿足的主要功能包括:
- 支持多人參與的語音聊天;
- 支持播放背景音樂;
- 支持設置背景圖片;
要實現一個具備以上功能的語音聊天室,大致可以分為兩步:實現語音連麥、支持背景音樂播放。
首先是實現語音連麥。如果要通過自研的方法實現,會相對復雜一些,不僅需要自己部署服務器并做好高并發應對,對編解碼器進行優化以解決回聲和噪聲問題,還要合理部署邊緣節點來解決網絡延時問題。解決以上幾個主要問題后,還需要優化對中小運營商網絡的支持。總體來講,就是需要解決設備端、網絡中的語連麥穩定低延時問題與可用性問題。我們在《詳解音視頻中的低延時》這篇文章中詳細分析了優化的思路。
而以上這些問題,我們早已為開發者解決,并將接口集成于聲網 SDK 中。開發者無需重復造車輪,再自己搭建媒體服務、信令服務、優化音視頻編解碼、做網絡傳輸策略優化等問題。
接下來,我們來看一下基于聲網視頻通話SDK,實現語音聊天室的步驟吧。
首先,要說明下為什么是基于視頻通話 SDK 來開發,而不是語音 SDK 呢?
下圖為語音聊天室場景化方案的架構圖與實現思路:
我們會基于以下開發環境來做開發:
- Android SDK API Level ≥ 16
- Android Studio 2.0 或以上版本
- 支持語音和視頻功能的真機
- App 要求 Android 4.1 或以上設備
SDK 的集成步驟比較簡單,對于有開發基礎的同學,應該無需手把手教了。
第一步:實現語音連麥
房主一端創建 RtcEngine 對象,并填入 App ID。通過 setChannelProfile 接口將頻道設置為直播模式。然后用 setClientRole 來設定主播(Broadcaster)和觀眾(Audience)的角色。
通常,觀眾上麥請求、主播通過上麥申請等一系列操作都是通過消息服務來完成的。當觀眾發出上麥請求,并得到了房主的上麥許可后,只需要通過 setClientRole 將該觀眾設定為 Broadcaster ,即可上麥。這時,我們就完成了連麥的功能。當觀眾下麥的時候,同樣地,將其身份修改會 Audience 即可。
在主播或觀眾離開房間時,通過調用 LeaveChannel 來完成。我們可以通過一張圖,來了解語音聊天室中接口的調用邏輯:
第二:增加背景音樂
在一些應用場景下,比如秀場、娛樂直播中,通常都會有背景音樂。所以,在實現了基本的連麥功能后,我們還需要增加背景音樂的混音、播放控制。
在這里,主播可以在自己的客戶端上選擇要播放的音樂,然后通過 SDK 的 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,面向 iOS 與 Android 開發者,大家可以在「語音聊天室」的開發者文檔頁面上獲取。在 Demo 的基礎上,開發者只需要不到1周的時間,對 UI 和功能做簡單修改即可準備測試上線。
總結
以上是生活随笔為你收集整理的一套代码快速实现一个语音聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置review board自动发送邮件
- 下一篇: 编程常用的命名规则