云信小课堂|简单五步,轻松构建本土「Clubhouse」
Vol. 2
最近 Clubhouse 一碼難求,獲得眾多互聯(lián)網(wǎng)圈和投資圈人士的關(guān)注,一時(shí)之間風(fēng)靡全球。
但受限于各方面原因,Clubhouse 目前還是存在很多限制,比如采用邀請機(jī)制、只能 iOS 用戶下載以及國內(nèi) Apple 賬號(hào)無法下載等。
就產(chǎn)品本身而言,作為一個(gè)初創(chuàng)的即時(shí)語聊產(chǎn)品,Clubhouse 也不可避免地存在如房間被動(dòng)退出、語音延遲性等問題,而這也是國外用戶反映普遍存在的問題。
盡管如此,Clubhouse 的突然火爆,還是讓我們看到了即時(shí)語聊市場的龐大需求,聲音社交仍有廣泛的空間。
為了更快地幫助國內(nèi)一些即將或者已經(jīng)開始著手搭建即時(shí)語音聊天的企業(yè)了解 Clubhouse,搶占先機(jī),本篇文章將從產(chǎn)品設(shè)計(jì)、技術(shù)實(shí)現(xiàn)以及在搭建中可能存在的技術(shù)難點(diǎn)幾個(gè)維度,進(jìn)行全面的分析和解讀。
只需五步,即可輕松構(gòu)建本土「Clubhouse」!
架構(gòu)設(shè)計(jì)
客戶端組件:封裝實(shí)現(xiàn)客戶端與應(yīng)用服務(wù) Clubhouse Server 的交互,封裝實(shí)現(xiàn)與音視頻的交互。
網(wǎng)關(guān)代理:應(yīng)用服務(wù)的網(wǎng)關(guān)服務(wù)。
Clubhouse Server:仿 ClubHouse 應(yīng)用服務(wù)。
網(wǎng)易 G2 音視頻 RTC 服務(wù):提供穩(wěn)定流暢、高品質(zhì)、全平臺(tái)的點(diǎn)對點(diǎn)和多人實(shí)時(shí)音視頻通話服務(wù),其中包括:
網(wǎng)易云信 IM SDK
網(wǎng)易云信 G2 SDK
架構(gòu)圖如下:
核心流程
分解一下需求,除去用戶標(biāo)簽、房間標(biāo)簽和話題推薦,Clubhouse 的功能大概分為以下幾個(gè)板塊:
房間列表
創(chuàng)建/加入房間
管理員邀請用戶
舉手發(fā)言
離開房間
其中,整體的房間控制需要在網(wǎng)易云信 G2 音視頻 SDK 的基礎(chǔ)之上,借助服務(wù)端來控制;加入房間后的音視頻能力,則直接由 SDK 提供;另外服務(wù)端通知?jiǎng)t由網(wǎng)易云信 IM SDK 提供的長鏈接服務(wù)來負(fù)責(zé)傳遞。
詳細(xì)流程如下:
1
獲取房間列表
在這一步中,我們調(diào)用服務(wù)端接口獲取到房間列表。
2
創(chuàng)建/加入房間
在這一步中,不論是創(chuàng)建房間還是加入房間,都會(huì)調(diào)用服務(wù)端提供的 /clubRoom/join 接口。
在用戶加入到 channelName 房間時(shí),應(yīng)用服務(wù)器會(huì)判斷 channelName 是否存在。
如果對應(yīng)房間不存在,會(huì)創(chuàng)建一個(gè)房間并加入同時(shí)返回相應(yīng)的房間信息;如果傳入 channelName 存在,則用戶直接加入該房間。
當(dāng)獲取到服務(wù)端返回的房間信息時(shí),再調(diào)用 G2 SDK 的加入房間 API joinChannelWithToken,真正加入音頻房間。
當(dāng)加入房間成功后,G2 SDK 會(huì)抄送消息至應(yīng)用服務(wù)器,更新用戶在房間中的狀態(tài)。
3
管理員邀請用戶加入房間
當(dāng)管理員點(diǎn)擊邀請用戶加入房間時(shí),會(huì)先獲取到好友列表,然后服務(wù)端生成一個(gè)短鏈返回到客戶端。當(dāng)被邀請者點(diǎn)擊短鏈后,會(huì)自動(dòng)加入房間。
4
舉手發(fā)言
在這一步中,客戶端會(huì)先調(diào)用/clubRoom/handsup接口,告訴服務(wù)端我想發(fā)言。
然后,服務(wù)端通過云信 IM 提供的透傳協(xié)議以及長鏈接將消息發(fā)送給房間管理員。
管理員點(diǎn)擊同意時(shí),會(huì)調(diào)用管理員會(huì)控接口/clubRoom/control/host更新成員音頻狀態(tài)為「發(fā)言狀態(tài)」,同時(shí)應(yīng)用服務(wù)器通過 IM 透傳協(xié)議通知舉手者音頻已打開,此時(shí)舉手者調(diào)用 G2 的 API enableLocalAudio 來開啟麥克風(fēng)。
5
離開房間
最后,當(dāng)用戶點(diǎn)擊離開房間按鈕后,直接調(diào)用 G2 SDK 的 leaveChannel 方法離開房間,此時(shí),G2 會(huì)抄送用戶離開消息至應(yīng)用服務(wù)器,服務(wù)器標(biāo)記該用戶離開。
G2 SDK詳細(xì)說明
其中,G2 SDK 用到的方法的詳細(xì)說明如下:
1. 導(dǎo)入類
在項(xiàng)目中導(dǎo)入 NERtcSDK 類:
#import <NERtcSDK/NERtcSDK.h>2. 初始化
打開 App 后,先執(zhí)行 - setupEngineWithContext: 方法完成初始化。
@interface Myapp ()<NERtcEngineDelegateEx>...NERtcEngine *coreEngine = [NERtcEngine sharedEngine];NERtcEngineContext *context = [[NERtcEngineContext alloc] init];// 設(shè)置通話相關(guān)信息的回調(diào)context.engineDelegate = self;// 設(shè)置當(dāng)前應(yīng)用的appKeycontext.appKey = AppKey;[coreEngine setupEngineWithContext:context];...3. 加入房間
加入房間前,請確保已完成初始化相關(guān)事項(xiàng)。通過 – joinChannelWithToken:channelName:myUid:completion: 方法加入房間。
// 示例[NERtcEngine.sharedEngine joinChannelWithToken:@""channelName:roomIdmyUid:userIdcompletion:^(NSError * _Nullable error, uint64_t channelId, uint64_t elapesd) {if (error) {//加入失敗} else {//加入成功}}];4. 退出通話房間
通過 leaveChannel 接口退出通話房間。
// 示例// 退出通話房間[NERtcEngine.sharedEngine leaveChannel];NERtcEngineDelegate 提供 – onNERtcEngineDidLeaveChannelWithResult: 來監(jiān)聽當(dāng)前用戶退出房間的結(jié)果。
技術(shù)難點(diǎn)分析
1.音頻技術(shù)難點(diǎn)與解決方案
問題描述
弱網(wǎng)情況下的丟包問題
設(shè)備適配問題
音質(zhì)問題
解決方案
云信音視頻通話2.0使用自研的網(wǎng)絡(luò)引擎弱網(wǎng)算法,保證在80%丟包的傳輸場景下,音頻也能進(jìn)行正常通話,弱網(wǎng)優(yōu)勢更明顯。
云信針對超過數(shù)千款設(shè)備進(jìn)行音質(zhì)適配,保證回聲抑制的效果在絕大多數(shù)機(jī)型上都有最優(yōu)的表現(xiàn)。
自研的音頻AI降噪算法,可以針對嘈雜人聲、鍵盤聲等非穩(wěn)態(tài)噪聲進(jìn)行定向降噪,提升對于環(huán)境穩(wěn)態(tài)噪聲的抑制能力,保留更純粹人聲。
2.內(nèi)容管控技術(shù)難題與解決方案
問題描述
對于 Clubhouse 這一類聲音社交的語音聊天室場景,場景中可能出現(xiàn)如暴恐、涉政、色情、廣告等不可控違規(guī)內(nèi)容。隨著有關(guān)部門的監(jiān)管力度不斷增強(qiáng),平臺(tái)對于內(nèi)容進(jìn)行管控的工作成為了必要。
實(shí)時(shí)音頻場景下的內(nèi)容審核,由于其場景實(shí)時(shí)進(jìn)行的特殊性,對反垃圾服務(wù)也提出了較為嚴(yán)苛的要求。例如,審核結(jié)果必須足夠?qū)崟r(shí),嘈雜場景下的音頻采集不能嚴(yán)重影響檢出率,高并發(fā)場景下需要做到快速響應(yīng)不擁塞等等。
解決方案
云信針對該場景打磨出了一套完備的實(shí)時(shí)音頻反垃圾服務(wù),為客戶的業(yè)務(wù)合規(guī)性保駕護(hù)航。該服務(wù)通過業(yè)內(nèi)領(lǐng)先的語音識(shí)別技術(shù),結(jié)合反垃圾文本過濾規(guī)則體系,精準(zhǔn)、高效分析識(shí)別違規(guī)音頻。此外,依托網(wǎng)易云計(jì)算資源,動(dòng)態(tài)擴(kuò)容,彈性伸縮,滿足客戶的涉黃、涉政、廣告等其他多維度場景的高并發(fā)、高精準(zhǔn)的反垃圾檢測。
總? 結(jié)
按照如上五步,我們就可以基于網(wǎng)易云信提供的強(qiáng)大的基礎(chǔ)能力,輕松快速地打造一個(gè)屬于自己的「Clubhouse」,趕上風(fēng)口,下一個(gè)出圈的就是你!
示例項(xiàng)目
網(wǎng)易云信官網(wǎng)-多人語聊解決方案
http://yunxin.163.com/voicechat
網(wǎng)易云信聊天室 NEChatroom源碼
https://github.com/netease-im/NEChatroom
網(wǎng)易云信G2 SDK iOS端API文檔
https://dev.yunxin.163.com/docs/product/音視頻通話2.0/快速入門/實(shí)現(xiàn)音視頻通話/實(shí)現(xiàn)音視頻通話(iOS)
網(wǎng)易云信G2 SDK Android端API文檔
http://163.lu/FwUqw1
立即點(diǎn)擊閱讀原文,構(gòu)建屬于你的「Clubhouse」吧!
總結(jié)
以上是生活随笔為你收集整理的云信小课堂|简单五步,轻松构建本土「Clubhouse」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天天鉴宝联手网易智企,开创直播鉴定服务电
- 下一篇: WebRTC 系列之音频会话管理