一套代码快速实现一个语音聊天室
語(yǔ)音聊天在泛娛樂(lè)社交行業(yè)中有著重要的地位,行業(yè)中很多佼佼者也都為用戶(hù)提供了語(yǔ)音聊天室,甚至有些平臺(tái)最初就是依托語(yǔ)音聊天起家的,比如大家熟悉的YY。
從最初的一對(duì)一語(yǔ)音通話(huà),到以 YY 為引爆點(diǎn)的多人語(yǔ)音群聊,再到現(xiàn)在聚集了一批“音控”的純語(yǔ)音社交平臺(tái),很多類(lèi)型的應(yīng)用中都有語(yǔ)音聊天室。
例如語(yǔ)音電臺(tái),這是語(yǔ)音聊天室中比較典型的場(chǎng)景。主播可以在直播間中與給聽(tīng)眾講故事、唱歌,內(nèi)容形式不一而足,觀眾也可以申請(qǐng)上麥,與主播聊天互動(dòng)。主要實(shí)現(xiàn)的功能就是語(yǔ)音連麥,以及通過(guò)消息系統(tǒng)來(lái)實(shí)現(xiàn)的文字消息功能。看似簡(jiǎn)單,但是有些優(yōu)質(zhì)的語(yǔ)音社交平臺(tái)能達(dá)到每月1億的流水。
再譬如語(yǔ)音開(kāi)黑,它也是語(yǔ)音聊天室的常見(jiàn)應(yīng)用場(chǎng)景。由于目前還有一些游戲不支持實(shí)時(shí)語(yǔ)音通話(huà)的功能。同時(shí),也有一些王者玩家想收費(fèi)帶青銅小白上分,而游戲中不支持付費(fèi)帶玩,那么語(yǔ)音聊天室成為了滿(mǎn)足需求的出口。在一些應(yīng)用中,玩家可以通過(guò)可付費(fèi)預(yù)約的語(yǔ)音聊天室,允許其他玩家預(yù)約陪玩的,同時(shí)還可以語(yǔ)音開(kāi)黑。功能上與語(yǔ)音直播相似,只是在這個(gè)頻道中,不需要增加觀眾上下麥的邏輯。
如何實(shí)現(xiàn)語(yǔ)音聊天室
以上只是包含了語(yǔ)音聊天的部分場(chǎng)景而已,綜上來(lái)看,語(yǔ)音聊天室需要滿(mǎn)足的主要功能包括:
- 支持多人參與的語(yǔ)音聊天;
- 支持播放背景音樂(lè);
- 支持設(shè)置背景圖片;
要實(shí)現(xiàn)一個(gè)具備以上功能的語(yǔ)音聊天室,大致可以分為兩步:實(shí)現(xiàn)語(yǔ)音連麥、支持背景音樂(lè)播放。
首先是實(shí)現(xiàn)語(yǔ)音連麥。如果要通過(guò)自研的方法實(shí)現(xiàn),會(huì)相對(duì)復(fù)雜一些,不僅需要自己部署服務(wù)器并做好高并發(fā)應(yīng)對(duì),對(duì)編解碼器進(jìn)行優(yōu)化以解決回聲和噪聲問(wèn)題,還要合理部署邊緣節(jié)點(diǎn)來(lái)解決網(wǎng)絡(luò)延時(shí)問(wèn)題。解決以上幾個(gè)主要問(wèn)題后,還需要優(yōu)化對(duì)中小運(yùn)營(yíng)商網(wǎng)絡(luò)的支持。總體來(lái)講,就是需要解決設(shè)備端、網(wǎng)絡(luò)中的語(yǔ)連麥穩(wěn)定低延時(shí)問(wèn)題與可用性問(wèn)題。我們?cè)凇对斀庖粢曨l中的低延時(shí)》這篇文章中詳細(xì)分析了優(yōu)化的思路。
而以上這些問(wèn)題,我們?cè)缫褳殚_(kāi)發(fā)者解決,并將接口集成于聲網(wǎng) SDK 中。開(kāi)發(fā)者無(wú)需重復(fù)造車(chē)輪,再自己搭建媒體服務(wù)、信令服務(wù)、優(yōu)化音視頻編解碼、做網(wǎng)絡(luò)傳輸策略?xún)?yōu)化等問(wèn)題。
接下來(lái),我們來(lái)看一下基于聲網(wǎng)視頻通話(huà)SDK,實(shí)現(xiàn)語(yǔ)音聊天室的步驟吧。
首先,要說(shuō)明下為什么是基于視頻通話(huà) SDK 來(lái)開(kāi)發(fā),而不是語(yǔ)音 SDK 呢?
下圖為語(yǔ)音聊天室場(chǎng)景化方案的架構(gòu)圖與實(shí)現(xiàn)思路:
我們會(huì)基于以下開(kāi)發(fā)環(huán)境來(lái)做開(kāi)發(fā):
- Android SDK API Level ≥ 16
- Android Studio 2.0 或以上版本
- 支持語(yǔ)音和視頻功能的真機(jī)
- App 要求 Android 4.1 或以上設(shè)備
SDK 的集成步驟比較簡(jiǎn)單,對(duì)于有開(kāi)發(fā)基礎(chǔ)的同學(xué),應(yīng)該無(wú)需手把手教了。
第一步:實(shí)現(xiàn)語(yǔ)音連麥
房主一端創(chuàng)建 RtcEngine 對(duì)象,并填入 App ID。通過(guò) setChannelProfile 接口將頻道設(shè)置為直播模式。然后用 setClientRole 來(lái)設(shè)定主播(Broadcaster)和觀眾(Audience)的角色。
通常,觀眾上麥請(qǐng)求、主播通過(guò)上麥申請(qǐng)等一系列操作都是通過(guò)消息服務(wù)來(lái)完成的。當(dāng)觀眾發(fā)出上麥請(qǐng)求,并得到了房主的上麥許可后,只需要通過(guò) setClientRole 將該觀眾設(shè)定為 Broadcaster ,即可上麥。這時(shí),我們就完成了連麥的功能。當(dāng)觀眾下麥的時(shí)候,同樣地,將其身份修改會(huì) Audience 即可。
在主播或觀眾離開(kāi)房間時(shí),通過(guò)調(diào)用 LeaveChannel 來(lái)完成。我們可以通過(guò)一張圖,來(lái)了解語(yǔ)音聊天室中接口的調(diào)用邏輯:
第二:增加背景音樂(lè)
在一些應(yīng)用場(chǎng)景下,比如秀場(chǎng)、娛樂(lè)直播中,通常都會(huì)有背景音樂(lè)。所以,在實(shí)現(xiàn)了基本的連麥功能后,我們還需要增加背景音樂(lè)的混音、播放控制。
在這里,主播可以在自己的客戶(hù)端上選擇要播放的音樂(lè),然后通過(guò) SDK 的 AudioMixing 接口在本地與主播語(yǔ)音混音后播放給連麥聽(tīng)眾和普通聽(tīng)眾。
最后,考慮到在娛樂(lè)直播、游戲開(kāi)黑、社交,甚至是教育場(chǎng)景下的語(yǔ)音聊天室,對(duì)于聲音的碼率、采樣率、聲道數(shù)的需求都有細(xì)微差別。我們?cè)?SDK 中,還提供了“設(shè)置音質(zhì)”的接口,即 setAudioProfile,供開(kāi)發(fā)者根據(jù)實(shí)際聽(tīng)到的效果來(lái)自由調(diào)整。
public abstract int setAudioProfile(int AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO = 5, int AUDIO_SCENARIO_CHATROOM_ENTERTAINMENT = 1);舉個(gè)例子,如果做的是娛樂(lè)方向的應(yīng)用,會(huì)遇到聽(tīng)眾頻繁上下麥的情況,并且需要48 KHz采樣率、音樂(lè)編碼、雙聲道、編碼碼率 192 kbps,那么可按照上述代碼來(lái)設(shè)置 profile、scenario(上述代碼段可左右拖動(dòng),查看完整代碼)。
而在教育應(yīng)用中也有師生之間的語(yǔ)音聊天室。而教育對(duì)于語(yǔ)音連麥的要求是,更注重流暢性與穩(wěn)定性。那么可以將 scenario 的參數(shù)設(shè)定為AUDIO_SCENARIO_EDUCATION = 2。
我們?cè)?SDK 中對(duì)這個(gè)接口的 profile 與 scenario 各有5個(gè)不同的參數(shù)設(shè)置,具體大家可查看 setAudioProfile 的詳細(xì)文檔。
有些開(kāi)發(fā)者希望以語(yǔ)音社交切入泛娛樂(lè)市場(chǎng),也有一些市場(chǎng)上的視頻社交玩家,希望加入語(yǔ)音聊天室,來(lái)進(jìn)一步拓展市場(chǎng)版圖。由于該場(chǎng)景方案是基于聲網(wǎng)視頻通話(huà) SDK 實(shí)現(xiàn),可以同時(shí)滿(mǎn)足以上兩種需求。
我們?cè)?Github 已經(jīng)提供了一套完整的 Demo,面向 iOS 與 Android 開(kāi)發(fā)者,大家可以在「語(yǔ)音聊天室」的開(kāi)發(fā)者文檔頁(yè)面上獲取。在 Demo 的基礎(chǔ)上,開(kāi)發(fā)者只需要不到1周的時(shí)間,對(duì) UI 和功能做簡(jiǎn)單修改即可準(zhǔn)備測(cè)試上線(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的一套代码快速实现一个语音聊天室的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 配置review board自动发送邮件
- 下一篇: python文本编辑器下载_python