為方便開發(fā)者了解和接入融云直播聊天室,本文將介紹融云直播聊天室功能特點(diǎn)企蹭、主要構(gòu)成及常見功能的解決方案谅摄。
一系馆、產(chǎn)品介紹
融云直播聊天室由蘑,是專門為視頻直播業(yè)務(wù)提供的一個(gè)產(chǎn)品尼酿。主要特點(diǎn)是:
豐富的聊天室消息類型和消息進(jìn)階功能
1.支持消息類型包括文字、語音涎永、圖片等內(nèi)置消息類型和可實(shí)現(xiàn)點(diǎn)贊羡微、禮物等功能的自定義消息類型抢野;
2.支持內(nèi)容安全管理指孤,包括敏感詞設(shè)置恃轩,聊天內(nèi)容反垃圾處理等黎做;
3.支持聊天室消息管理功能蒸殿,包括消息優(yōu)先級鸣峭、消息分發(fā)控制等摊溶;
4.支持聊天室消息云端存儲(chǔ)功能莫换,可以實(shí)現(xiàn)視頻回放時(shí)歷史記錄回看等場景骤铃;
5.支持服務(wù)端發(fā)送聊天室消息惰爬,可以實(shí)現(xiàn)聊天室通知等場景撕瞧;
便捷細(xì)致的聊天室管理功能
1.支持聊天室用戶管理功能,包括創(chuàng)建咨跌、加入锌半、銷毀刊殉、禁言州胳、查詢栓撞、封禁(踢人)等瓤湘;
2.支持聊天室用戶白名單功能,白名單用戶處于被保護(hù)狀態(tài)不會(huì)被自動(dòng)踢出挽懦,且發(fā)送消息優(yōu)先級別最高信柿;
3.支持聊天室實(shí)時(shí)消息數(shù)據(jù)統(tǒng)計(jì)渔嚷;
4.支持聊天室消息實(shí)時(shí)路由功能,由此功能可以對聊天室消息進(jìn)行數(shù)據(jù)實(shí)時(shí)分析和挖掘堤如;
滿足個(gè)性化需求的聊天室服務(wù)
1.融云直播聊天室人數(shù)無上限搀罢;
2.支持海量消息的并發(fā)榔至,消息速度極快欺劳;
3.支持與多家視頻 CDN 服務(wù)商完美兼容划提;
4.支持同一用戶進(jìn)入多個(gè)聊天室鹏往,可以同時(shí)建立多個(gè)連接伊履;
5.支持海外節(jié)點(diǎn)及專屬海外數(shù)據(jù)中心,包括美國群凶、東南亞请梢、歐洲等地溢陪;
6.融云直播聊天室可以實(shí)現(xiàn)平滑的橫向擴(kuò)展睛廊,支持任意規(guī)模的同時(shí)在線用戶消息分發(fā)超全。
通過以上各點(diǎn)可以極大的節(jié)約視頻直播產(chǎn)品的開發(fā)和運(yùn)營成本嘶朱。目前融云承擔(dān)的日消息分發(fā)量峰值已經(jīng)超過 2000 億疏遏。
二、直播聊天室主要構(gòu)成
融云的視頻直播聊天室方案倘零,由兩部分構(gòu)成呈驶,視頻直播 SDK 和融云聊天室 SDK袖瞻。后者由融云提供聋迎,前者你使用自己的推流和拉流來實(shí)現(xiàn)霉晕,或者使用第三方成熟的 SDK 來實(shí)現(xiàn)奕枢。融云的開源視頻直播室 App 里整體方案為您打包了金山云視頻 SDK缝彬,同時(shí)我們也支持七牛谷浅、樂視、阿里撼玄、UCloud 等視頻云 SDK掌猛。
1荔茬、視頻直播 SDK
主播端
主播端使用的是推流 SDK慕蔚,主播需要把攝像頭采集的視頻源做編碼孔飒,然后推到視頻直播云上。
觀眾端
觀眾端使用的是拉流 SDK桂对,觀眾需要的是把視頻從服務(wù)端拉倒本地做解碼接校,并展示到手機(jī)終端上蛛勉。觀眾端還必須包括一個(gè)視頻播放器诽凌。
您也可以把以上的主播端和觀眾端打包到同一個(gè) App 里侣诵,同時(shí)提供主播推流功能狱窘,又提供觀眾端拉流觀看的功能蘸炸。融云直播聊天室對于以上幾種模式的支持都是完全相同的搭儒。
2淹禾、融云聊天室 SDK
IMLib
IMLib 是融云的 SDK 的一個(gè)產(chǎn)品組件铃岔,提供的是基礎(chǔ)的通信能力,當(dāng)使用融云聊天室的時(shí)候躲胳,您只需要簡單調(diào)用初始化、連接摇天、加入聊天室泉坐、發(fā)送消息等功能裳仆。
直播聊天室 App 開源代碼
基于融云的 IMlib SDK歧斟,融云把常見的視頻直播聊天室的常用功能封裝成了一個(gè) App静袖,SealLive队橙。在這個(gè) App 內(nèi)捐康,融云實(shí)現(xiàn)了登錄解总、連接倾鲫、直播界面的顯示乌昔、輸入框磕道、發(fā)送接收消息的處理流程,我們建議您直接使用這部分代碼悼做,可以大大的減輕整個(gè)聊天室 UI 的開發(fā)工作肛走。
iOS 直播聊天室源碼葫男。
三梢褐、App 與 SDK 的邏輯關(guān)系
集成融云 SDK 之前赵讯,請先了解 App 與 SDK 的邏輯關(guān)系猪贪,如下:
連接成功之后 (Android 為 connect 方法热押,iOS 為 connectWithToken 方法)桶癣,融云提供兩種加入聊天室的方式:
1) App Server 創(chuàng)建聊天室牙寞,客戶端調(diào)用?joinExistChatRoom?加入聊天室间雀,如果聊天室不存在镊屎,則加入不成功惹挟,需要 App Server 先調(diào)用 RongCloud Server 創(chuàng)建聊天室,如圖:
如果聊天室已經(jīng)存在缝驳,則可直接加入聊天室连锯,如圖:
2) App Server 只管理聊天室 Id 列表归苍,客戶端調(diào)用?joinChatRoom?加入聊天室,如果聊天室不存在則自動(dòng)創(chuàng)建运怖。
1、App 服務(wù)器需要實(shí)現(xiàn)的功能
·管理用戶體系和融云 userId 的映射關(guān)系
融云不維護(hù)用戶體系和好友關(guān)系摇展,App 需要為您用戶體系中的每個(gè)用戶和融云的 userId 建立一一對應(yīng)的映射關(guān)系吻氧。之后就可以根據(jù) userId ,加入吗购、退出聊天室并收發(fā)消息医男。
·實(shí)現(xiàn)從融云 Server 獲取 Token 的邏輯,詳細(xì)請查看獲取 Token 方法捻勉。
·根據(jù) App 的產(chǎn)品邏輯,維護(hù)每個(gè)聊天室的信息和聊天室列表
2刀森、App 服務(wù)器還可以實(shí)現(xiàn)的功能
通過調(diào)用融云 Server API 實(shí)現(xiàn)以下功能:
·創(chuàng)建踱启、銷毀聊天室。
·查詢聊天室的信息研底。
·查詢聊天室中的用戶列表埠偿。
·設(shè)置聊天室用戶用戶禁言、封禁榜晦。
·設(shè)置消息敏感詞冠蒋。
·按消息類型設(shè)置消息優(yōu)先級。
3乾胶、App 客戶端需要實(shí)現(xiàn)的功能
·初始化融云 SDK抖剿。
·加入、退出聊天室识窿。
·初始化視頻播放器(多家合作廠家可選)斩郎。
·調(diào)用融云 SDK 接口實(shí)現(xiàn)收發(fā)消息功能。
·實(shí)現(xiàn)文字喻频、表情缩宜、點(diǎn)贊、鮮花等功能甥温、UI 顯示處理锻煌。
其中,App 以上部分的功能和 UI 都已經(jīng)實(shí)現(xiàn)并開源姻蚓,可以開箱即用也可以隨意定制宋梧。
4、App 客戶端還可以實(shí)現(xiàn)的功能
通過融云 SDK 方法實(shí)現(xiàn)以下功能:
·自定義任意消息及其顯示樣式(也可以不顯示)史简。
·客戶端本地插入消息乃秀,而不發(fā)送出去肛著。
·監(jiān)聽消息收發(fā),App 可以按自己需求控制邏輯和 UI跺讯。
·后期可以很方便地集成 IMKit枢贿,快速擴(kuò)展出單聊、群聊刀脏、黑名單局荚、客服、實(shí)時(shí)音視頻等功能愈污。
四耀态、聊天室集成指南
1、Demo 源碼
iOS 直播聊天室源碼首装。
2、集成指南
直播聊天室開發(fā)指南杭跪,請參考?iOS IMLib 開發(fā)指南和?Android IMLib 開發(fā)指南仙逻。
五、服務(wù)器相關(guān)接口
詳細(xì)請查看 Server 開發(fā)指南聊天室服務(wù)相關(guān)接口涧尿。
六系奉、聊天室登錄、重連問題
登錄聊天室是否要先連接融云
必須先連接融云姑廉,所有接口都是連接融云后才可以調(diào)用缺亮。
是否可以實(shí)現(xiàn)匿名登錄
從融云 SDK 的角度,都是需要確定一個(gè) UserId 來與融云服務(wù)器連接桥言,以保證其后所有的操作都有指向性萌踱。
但作為 App 應(yīng)用層來講,可以不暴露融云的 UserId限书,所謂匿名就是以一個(gè)隨機(jī)的或者說不跟你們應(yīng)用帳號(hào)綁定的 UserId 來登錄虫蝶。
斷線情況如何處理
進(jìn)入聊天室后如果出現(xiàn)斷開連接,當(dāng)與融云服務(wù)器的連接恢復(fù)后倦西,SDK 會(huì)嘗試重連聊天室能真。重連過程不需要用戶參與,用戶可以設(shè)置聊天室狀態(tài)監(jiān)聽扰柠,來獲取聊天室重連的狀態(tài)信息粉铐。
七、聊天室消息問題
進(jìn)入時(shí)如何獲取最新消息
對于同一個(gè)聊天室卤档,只存儲(chǔ)該聊天室的 50 條最新消息蝙泼,也就是說移動(dòng)端用戶進(jìn)入聊天室時(shí),最多能夠拉取到最新的 50 條消息劝枣。
可通過融云加入聊天室方法汤踏,設(shè)置獲取歷史消息條數(shù)织鲸,加入后可獲取到對應(yīng)條數(shù)的歷史消息。
詳細(xì)請查看?Android 加入聊天室和?iOS 加入聊天室溪胶。
如何發(fā)送和接收聊天室消息
詳細(xì)請查看?iOS 發(fā)送與接收消息?和?Android 發(fā)送與接收消息文檔搂擦。
如何發(fā)送用戶進(jìn)入聊天室消息
如用戶加入聊天室時(shí),需要發(fā)送“XX加入聊天室”的通知消息哗脖,融云推薦使用自定義消息在客戶端來實(shí)現(xiàn)瀑踢,可以在消息體中附加其他需要的信息屬性。也可以用既有的消息類型才避,無論何種只需要跟聊天消息區(qū)別開即可橱夭。
如何往聊天室中發(fā)送通知消息
往聊天室中發(fā)送通知消息是指用應(yīng)用內(nèi)的系統(tǒng)帳號(hào)向某聊天室發(fā)送通知消息,消息類型推薦使用自定義消息桑逝,通過調(diào)用 Server API 接口發(fā)送棘劣。
發(fā)送方法請參考發(fā)送聊天室消息方法。
八肢娘、點(diǎn)贊呈础、禮物消息問題
如何發(fā)送展示點(diǎn)贊消息
發(fā)送點(diǎn)贊消息推薦使用自定義消息類型,鑒于有些用戶會(huì)連續(xù)點(diǎn)擊橱健,建議做消息合并機(jī)制處理。比如設(shè)置定時(shí)器沙廉,每 5 秒觸發(fā)一次拘荡,將 5 秒內(nèi)所有的點(diǎn)贊數(shù)一次性發(fā)出去,降低服務(wù)器壓力撬陵,保證重要消息的暢達(dá)珊皿。另外點(diǎn)贊的動(dòng)畫效果可以參考我們的直播聊天室 Demo 源碼:
iOS 直播聊天室源碼巨税。
如何發(fā)送展示禮物消息
發(fā)送禮物消息使用融云自定義消息類型實(shí)現(xiàn)蟋定,展示就是界面上的一個(gè) View,完全可以根據(jù)你們的需求來自定義草添。因?yàn)榱奶焓翌愋偷膽?yīng)用 UI 都是特殊定制的驶兜,作為融云 SDK 來講,只是負(fù)責(zé)消息通知远寸,并不負(fù)責(zé) UI 繪制抄淑。
自定義消息開發(fā)指南:
九驰后、聊天室用戶信息顯示
1肆资、如何顯示用戶昵稱和頭像
融云不維護(hù)用戶的信息,所以用戶的昵稱和頭像信息都需要您自己來維護(hù)管理灶芝。詳細(xì)請查看用戶信息顯示集成指南郑原。
2唉韭、如何顯示用戶列表
用戶列表顯示邏輯是根據(jù)您的需求來確定。舉一個(gè)例子:聊天室人數(shù)從幾百到十幾萬不等犯犁,比如需求定為只顯示 10 個(gè)用戶的頭像属愤,那就可以根據(jù)用戶等級或者加入時(shí)間的順序,選取 10 個(gè)在線用戶的信息來顯示栖秕〈核可以由應(yīng)用自己的服務(wù)器來維護(hù)這個(gè)用戶列表,不定時(shí)通知給全體成員簇捍,也可以每個(gè)用戶加入/退出聊天室時(shí)發(fā)送狀態(tài)消息只壳,由端上接收并維護(hù)這個(gè)列表。顯示的方法也是移動(dòng)端進(jìn)行 UI 繪制暑塑。
3吼句、如何顯示用戶等級信息
融云不維護(hù)用戶的信息,所以關(guān)于用戶信息和等級的顯示事格,都需要您自己進(jìn)行開發(fā)惕艳。通常有兩種處理方式:
1) 在收到消息需要展示用戶信息的時(shí)候,您可以通過您的 Server 端接口獲取到用戶信息來展示驹愚。
2) 用戶在發(fā)送消息時(shí)把自己的信息附加到消息中远搪,接收方通過解析消息獲得用戶信息。
十逢捺、聊天室管理功能
聊天室踢人功能實(shí)現(xiàn)
可通過調(diào)用融云 Server API?聊天室封禁服務(wù)接口谁鳍,實(shí)現(xiàn)將用戶踢出聊天室。
設(shè)置聊天室禁言用戶
可通過融云 Server API 接口劫瞳,設(shè)置聊天室禁言用戶倘潜,被禁言用戶不能在聊天室中發(fā)送消息,詳細(xì)請查看聊天室成員禁言服務(wù)志于。
聊天室成員自動(dòng)退出機(jī)制
聊天室中用戶在離線 30 秒后或離線后聊天室中產(chǎn)生 30 條消息時(shí)會(huì)被自動(dòng)退出聊天室涮因。如應(yīng)用場景中有駐留用戶,不允許被自動(dòng)退出聊天室伺绽,則需要將用戶加入到聊天室白名單中养泡。
聊天室用戶白名單設(shè)置方法
可通過融云 Server API 接口,設(shè)置聊天室白名單憔恳,詳細(xì)請查看聊天室用戶白名單服務(wù)瓤荔。
聊天室自動(dòng)銷毀機(jī)制
聊天室中 1 小時(shí)無人說話時(shí),同時(shí)沒有人加入聊天室時(shí)钥组,會(huì)把聊天室內(nèi)所有成員踢出聊天室并銷毀聊天室输硝。
聊天室不被自動(dòng)銷毀實(shí)現(xiàn)方式
可通過融云 Server API 接口,設(shè)置需要背堂危活的聊天室点把,設(shè)置后聊天室不會(huì)被自動(dòng)銷毀橘荠,詳細(xì)請查看聊天室保活服務(wù)郎逃。
用戶如何同時(shí)加入多個(gè)聊天室
默認(rèn)同一用戶不能同時(shí)加入多個(gè)聊天室哥童,可通過提交工單方式開啟用戶同時(shí)加入多個(gè)聊天室功能。同時(shí)褒翰,在開啟多設(shè)備消息同步情況下贮懈,多端用戶可同時(shí)加入到多個(gè)聊天室。
如何動(dòng)態(tài)獲取聊天室在線人數(shù)
調(diào)用 Server API 中的查詢聊天室內(nèi)用戶方法优训,可通過返回值?total?獲取聊天室中在線人數(shù)朵你。
十一、聊天室消息進(jìn)階功能
1揣非、是否支持合并消息
支持合并消息抡医,以點(diǎn)贊消息來舉例,用戶不停的點(diǎn)擊贊按鈕時(shí)早敬,您可以把用戶點(diǎn)擊數(shù)記錄下來忌傻,然后在用戶停止的時(shí)候或者利用計(jì)時(shí)器,每隔幾秒鐘把這些點(diǎn)贊信息組裝一條自定義消息發(fā)送出去搞监。接收方收到消息之后把次數(shù)等信息解析出來水孩,做相應(yīng)的展示。
自定義消息開發(fā)指南請查看:
iOS 自定義消息琐驴。
2荷愕、消息的分級與拋棄模型
當(dāng)聊天室內(nèi)人數(shù)眾多,消息量會(huì)變得非常大棍矛,這時(shí)可能會(huì)出現(xiàn)服務(wù)端超過預(yù)設(shè)承載能力或者分發(fā)的消息量超過客戶端消息接收能力的情況,這時(shí)抛杨,就需要引入消息分級機(jī)制够委。
融云并沒有對任何消息進(jìn)行拋棄,但是在消息量極大的情況下怖现,比如 1 萬人到百萬左右的聊天室內(nèi)茁帽,消息并發(fā)量極大的情況下,每個(gè)用戶端能收發(fā)到的消息和體驗(yàn)已經(jīng)很有限屈嗤,因此消息拋棄指的是確保用戶端總是能收到最重要的消息潘拨,因此不重要的消息看起來就像是被拋棄了。
在開發(fā)過程中饶号,除官方的普通文本消息之外铁追,開發(fā)者需要針對不同的消息類別定義不同的消息類型,以便通過消息的 ObjectName 設(shè)置消息分級茫船。目前融云支持兩級消息分類琅束,分別是高優(yōu)先級消息和低優(yōu)先級消息扭屁。當(dāng)發(fā)生消息拋棄行為時(shí),優(yōu)先拋棄低優(yōu)先級消息涩禀。
3料滥、如何統(tǒng)計(jì)聊天室點(diǎn)贊消息數(shù)
您可以通過開通服務(wù)端實(shí)時(shí)消息路由來實(shí)現(xiàn)此功能,用戶在發(fā)送點(diǎn)贊消息時(shí)艾船,這條消息同步給您的應(yīng)用服務(wù)器葵腹。您的應(yīng)用服務(wù)器通過消息類型來分析統(tǒng)計(jì)這些數(shù)據(jù)。
查看服務(wù)端實(shí)時(shí)消息路由功能介紹屿岂。
4践宴、如何實(shí)現(xiàn)消息回看功能
如果直播聊天室中需要實(shí)現(xiàn)消息回看功能,則需要開通聊天室消息云端存儲(chǔ)功能雁社。開通成功后浴井,可通過接口獲取聊天室中歷史消息,消息回看 UI 界面的展示需要由您自己實(shí)現(xiàn)。
聊天室中存儲(chǔ)的消息類型及自定義消息如何設(shè)置存儲(chǔ)涂佃,請查看聊天室消息云端存儲(chǔ)功能介紹堂湖。
5、如何保證重要消息不被丟棄
目前有兩種設(shè)置方式撕氧,可保證重要消息不被丟棄:
1) 添加聊天室用戶白名單,白名單中用戶發(fā)送消息的優(yōu)先級別最高喇完,在服務(wù)器負(fù)載較高的情況下也不被丟棄伦泥。查看聊天室用戶白名單功能介紹。
2) 設(shè)置聊天室消息優(yōu)先級锦溪,把不重要的消息設(shè)置為低優(yōu)先級消息不脯;這樣高并發(fā)時(shí)保證高優(yōu)先級消息先通過。查看聊天室消息優(yōu)先級服務(wù)功能介紹刻诊。
十二防楷、多端情況下退出聊天室
多端情況下,一端退出聊天室其他終端是否同步退出聊天室则涯?
在開通了多端同時(shí)登錄情況下复局,用戶登錄多個(gè)終端,加入聊天室后粟判,如在一端退出聊天室亿昏,其他端不會(huì)同步退出,仍然可以收到聊天室中的消息档礁,如果需要一端退出聊天室后角钩,其他已登錄的終端也一起退出聊天室,則需要在退出時(shí)發(fā)送一條命令消息通知其他端退出聊天室,此步驟需要開發(fā)者自行實(shí)現(xiàn)彤断。
另外野舶,需要注意如果用戶登錄終端 A 后,加入了聊天室并在聊天室的會(huì)話界面中宰衙,這時(shí)用戶又登錄了終端 B 平道,但未進(jìn)入聊天室會(huì)話界面,這時(shí) A 供炼、B 兩個(gè)終端都會(huì)收接聊天室的消息一屋,只是 B 端的聊天室消息不進(jìn)行展示。如用戶在 A 端退出聊天室袋哼,這時(shí)融云認(rèn)為用戶在 B 端仍然在聊天室中冀墨,會(huì)繼續(xù)向 B 端發(fā)送聊天室消息。如果需要 B 端同時(shí)也退出聊天室涛贯,則需要 A 端在退出時(shí)發(fā)送一條命令消息通知其他端退出聊天室诽嘉,此步驟需要開發(fā)者自行實(shí)現(xiàn)。