【乾貨】直播聊天室詳細分解,讓你一眼學會快速搭建!

直播聊天室

爲方便開發者瞭解和接入融雲直播聊天室,本文將介紹融雲直播聊天室功能特點、主要構成及常見功能的解決方案。

產品介紹

融雲直播聊天室,是專門爲視頻直播業務提供的一個產品。主要特點是:

豐富的聊天室消息類型和消息進階功能

  1. 支持消息類型包括文字、語音、圖片等內置消息類型和可實現點贊、禮物等功能的自定義消息類型;
  2. 支持內容安全管理,包括敏感詞設置,聊天內容反垃圾處理等;
  3. 支持聊天室消息管理功能,包括消息優先級、消息分發控制等;
  4. 支持聊天室消息雲端存儲功能,可以實現視頻回放時歷史記錄回看等場景;
  5. 支持服務端發送聊天室消息,可以實現聊天室通知等場景;

便捷細緻的聊天室管理功能

  1. 支持聊天室用戶管理功能,包括創建、加入、銷燬、禁言、查詢、封禁(踢人)等;
  2. 支持聊天室用戶白名單功能,白名單用戶處於被保護狀態不會被自動踢出,且發送消息優先級別最高;
  3. 支持聊天室實時消息數據統計;
  4. 支持聊天室消息實時路由功能,由此功能可以對聊天室消息進行數據實時分析和挖掘;

滿足個性化需求的聊天室服務

  1. 融雲直播聊天室人數無上限;
  2. 支持海量消息的併發,消息速度極快;
  3. 支持與多家視頻 CDN 服務商完美兼容;
  4. 支持同一用戶進入多個聊天室,可以同時建立多個連接;
  5. 支持海外節點及專屬海外數據中心,包括美國、東南亞、歐洲等地;
  6. 融雲直播聊天室可以實現平滑的橫向擴展,支持任意規模的同時在線用戶消息分發。

通過以上各點可以極大的節約視頻直播產品的開發和運營成本。目前融雲承擔的日消息分發量峯值已經超過 2000 億。

直播聊天室主要構成

融雲的視頻直播聊天室方案,由兩部分構成,視頻直播 SDK 和融雲聊天室 SDK。後者由融雲提供,前者你使用自己的推流和拉流來實現,或者使用第三方成熟的 SDK 來實現。融雲的開源視頻直播室 App 裏整體方案爲您打包了金山雲視頻 SDK,同時我們也支持七牛、樂視、阿里、UCloud 等視頻雲 SDK。

視頻直播 SDK

  • 主播端

    主播端使用的是推流 SDK,主播需要把攝像頭採集的視頻源做編碼,然後推到視頻直播雲上。

  • 觀衆端

    觀衆端使用的是拉流 SDK,觀衆需要的是把視頻從服務端拉倒本地做解碼,並展示到手機終端上。觀衆端還必須包括一個視頻播放器。

    您也可以把以上的主播端和觀衆端打包到同一個 App 裏,同時提供主播推流功能,又提供觀衆端拉流觀看的功能。融雲直播聊天室對於以上幾種模式的支持都是完全相同的。

融雲聊天室 SDK

  • IMLib

    IMLib 是融雲的 SDK 的一個產品組件,提供的是基礎的通信能力,當使用融雲聊天室的時候,您只需要簡單調用初始化、連接、加入聊天室、發送消息等功能。

  • 直播聊天室 App 開源代碼

    基於融雲的 IMlib SDK,融雲把常見的視頻直播聊天室的常用功能封裝成了一個 App,SealLive。在這個 App 內,融雲實現了登錄、連接、直播界面的顯示、輸入框、發送接收消息的處理流程,我們建議您直接使用這部分代碼,可以大大的減輕整個聊天室 UI 的開發工作。

    Android 直播聊天室源碼

    iOS 直播聊天室源碼

App 與 SDK 的邏輯關係

集成融雲 SDK 之前,請先了解 App 與 SDK 的邏輯關係,如下:

image

連接成功之後 (Android 爲 connect 方法,iOS 爲 connectWithToken 方法),融雲提供兩種加入聊天室的方式:

1、 App Server 創建聊天室,客戶端調用 joinExistChatRoom 加入聊天室,如果聊天室不存在,則加入不成功,需要 App Server 先調用 RongCloud Server 創建聊天室,如圖:

image

如果聊天室已經存在,則可直接加入聊天室,如圖:

image

2、 App Server 只管理聊天室 Id 列表,客戶端調用 joinChatRoom 加入聊天室,如果聊天室不存在則自動創建。

image

App 服務器需要實現的功能

  • 管理用戶體系和融雲 userId 的映射關係

    融雲不維護用戶體系和好友關係,App 需要爲您用戶體系中的每個用戶和融雲的 userId 建立一一對應的映射關係。之後就可以根據 userId ,加入、退出聊天室並收發消息。

  • 實現從融雲 Server 獲取 Token 的邏輯,詳細請查看獲取 Token 方法

  • 根據 App 的產品邏輯,維護每個聊天室的信息和聊天室列表

App 服務器還可以實現的功能

通過調用融雲 Server API 實現以下功能:

  • 創建、銷燬聊天室。
  • 查詢聊天室的信息。
  • 查詢聊天室中的用戶列表。
  • 設置聊天室用戶用戶禁言、封禁。
  • 設置消息敏感詞。
  • 按消息類型設置消息優先級。

App 客戶端需要實現的功能

  • 初始化融雲 SDK。
  • 加入、退出聊天室。
  • 初始化視頻播放器(多家合作廠家可選)。
  • 調用融雲 SDK 接口實現收發消息功能。
  • 實現文字、表情、點贊、鮮花等功能、UI 顯示處理。

其中,App 以上部分的功能和 UI 都已經實現並開源,可以開箱即用也可以隨意定製。

App 客戶端還可以實現的功能

通過融雲 SDK 方法實現以下功能:

  • 自定義任意消息及其顯示樣式(也可以不顯示)。
  • 客戶端本地插入消息,而不發送出去。
  • 監聽消息收發,App 可以按自己需求控制邏輯和 UI。
  • 後期可以很方便地集成 IMKit,快速擴展出單聊、羣聊、黑名單、客服、VoIP 等功能。

聊天室集成指南

Demo 源碼

集成指南

直播聊天室開發指南,請參考 iOS IMLib 開發指南和 Android IMLib 開發指南

服務器相關接口

詳細請查看 Server 開發指南聊天室服務相關接口

聊天室登錄、重連問題

登錄聊天室是否要先連接融雲

必須先連接融雲,所有接口都是連接融雲後纔可以調用。

是否可以實現匿名登錄

從融雲 SDK 的角度,都是需要確定一個 UserId 來與融雲服務器連接,以保證其後所有的操作都有指向性。

但作爲 App 應用層來講,可以不暴露融雲的 UserId,所謂匿名就是以一個隨機的或者說不跟你們應用帳號綁定的 UserId 來登錄。

斷線情況如何處理

進入聊天室後如果出現斷開連接,當與融雲服務器的連接恢復後,SDK 會嘗試重連聊天室。重連過程不需要用戶參與,用戶可以設置聊天室狀態監聽,來獲取聊天室重連的狀態信息。


聊天室消息問題

進入時如何獲取最新消息

對於同一個聊天室,只存儲該聊天室的 50 條最新消息,也就是說移動端用戶進入聊天室時,最多能夠拉取到最新的 50 條消息。

可通過融雲加入聊天室方法,設置獲取歷史消息條數,加入後可獲取到對應條數的歷史消息。

詳細請查看 Android 加入聊天室和 iOS 加入聊天室

如何發送和接收聊天室消息

詳細請查看 iOS 發送與接收消息 和 Android 發送與接收消息文檔。

如何發送用戶進入聊天室消息

如用戶加入聊天室時,需要發送“XX加入聊天室”的通知消息,融雲推薦使用自定義消息在客戶端來實現,可以在消息體中附加其他需要的信息屬性。也可以用既有的消息類型,無論何種只需要跟聊天消息區別開即可。

如何往聊天室中發送通知消息

往聊天室中發送通知消息是指用應用內的系統帳號向某聊天室發送通知消息,消息類型推薦使用自定義消息,通過調用 Server API 接口發送。

發送方法請參考發送聊天室消息方法

點贊、禮物消息問題

如何發送展示點贊消息

發送點贊消息推薦使用自定義消息類型,鑑於有些用戶會連續點擊,建議做消息合併機制處理。比如設置定時器,每 5 秒觸發一次,將 5 秒內所有的點贊數一次性發出去,降低服務器壓力,保證重要消息的暢達。另外點讚的動畫效果可以參考我們的直播聊天室 Demo 源碼:

如何發送展示禮物消息

發送禮物消息使用融雲自定義消息類型實現,展示就是界面上的一個 View,完全可以根據你們的需求來自定義。因爲聊天室類型的應用 UI 都是特殊定製的,作爲融雲 SDK 來講,只是負責消息通知,並不負責 UI 繪製。

自定義消息開發指南:


聊天室用戶信息顯示

如何顯示用戶暱稱和頭像

融雲不維護用戶的信息,所以用戶的暱稱和頭像信息都需要您自己來維護管理。詳細請查看用戶信息顯示集成指南。

如何顯示用戶列表

用戶列表顯示邏輯是根據您的需求來確定。舉一個例子:聊天室人數從幾百到十幾萬不等,比如需求定爲只顯示 10 個用戶的頭像,那就可以根據用戶等級或者加入時間的順序,選取 10 個在線用戶的信息來顯示。可以由應用自己的服務器來維護這個用戶列表,不定時通知給全體成員,也可以每個用戶加入/退出聊天室時發送狀態消息,由端上接收並維護這個列表。顯示的方法也是移動端進行 UI 繪製。

如何顯示用戶等級信息

融雲不維護用戶的信息,所以關於用戶信息和等級的顯示,都需要您自己進行開發。通常有兩種處理方式:

  1. 在收到消息需要展示用戶信息的時候,您可以通過您的 Server 端接口獲取到用戶信息來展示。
  2. 用戶在發送消息時把自己的信息附加到消息中,接收方通過解析消息獲得用戶信息。


聊天室管理功能

聊天室踢人功能實現

可通過調用融雲 Server API 聊天室封禁服務接口,實現將用戶踢出聊天室。

設置聊天室禁言用戶

可通過融雲 Server API 接口,設置聊天室禁言用戶,被禁言用戶不能在聊天室中發送消息,詳細請查看聊天室成員禁言服務

聊天室成員自動退出機制

聊天室中用戶在離線 30 秒後或離線後聊天室中產生 30 條消息時會被自動退出聊天室。如應用場景中有駐留用戶,不允許被自動退出聊天室,則需要將用戶加入到聊天室白名單中。

聊天室用戶白名單設置方法

可通過融雲 Server API 接口,設置聊天室白名單,詳細請查看聊天室用戶白名單服務

聊天室自動銷燬機制

聊天室中 1 小時無人說話時,同時沒有人加入聊天室時,會把聊天室內所有成員踢出聊天室並銷燬聊天室。

聊天室不被自動銷燬實現方式

可通過融雲 Server API 接口,設置需要保活的聊天室,設置後聊天室不會被自動銷燬,詳細請查看聊天室保活服務

用戶如何同時加入多個聊天室

默認同一用戶不能同時加入多個聊天室,可通過提交工單方式開啓用戶同時加入多個聊天室功能。同時,在開啓多設備消息同步情況下,多端用戶可同時加入到多個聊天室。

如何動態獲取聊天室在線人數

調用 Server API 中的查詢聊天室內用戶方法,可通過返回值 total 獲取聊天室中在線人數。

聊天室消息進階功能

是否支持合併消息

支持合併消息,以點贊消息來舉例,用戶不停的點擊贊按鈕時,您可以把用戶點擊數記錄下來,然後在用戶停止的時候或者利用計時器,每隔幾秒鐘把這些點贊信息組裝一條自定義消息發送出去。接收方收到消息之後把次數等信息解析出來,做相應的展示。

自定義消息開發指南請查看:

消息的分級與拋棄模型

當聊天室內人數衆多,消息量會變得非常大,這時可能會出現服務端超過預設承載能力或者分發的消息量超過客戶端消息接收能力的情況,這時,就需要引入消息分級機制。

融雲並沒有對任何消息進行拋棄,但是在消息量極大的情況下,比如 1 萬人到百萬左右的聊天室內,消息併發量極大的情況下,每個用戶端能收發到的消息和體驗已經很有限,因此消息拋棄指的是確保用戶端總是能收到最重要的消息,因此不重要的消息看起來就像是被拋棄了。

在開發過程中,除官方的普通文本消息之外,開發者需要針對不同的消息類別定義不同的消息類型,以便通過消息的 ObjectName 設置消息分級。目前融雲支持兩級消息分類,分別是高優先級消息和低優先級消息。當發生消息拋棄行爲時,優先拋棄低優先級消息。

如何統計聊天室點贊消息數

您可以通過開通服務端實時消息路由來實現此功能,用戶在發送點贊消息時,這條消息同步給您的應用服務器。您的應用服務器通過消息類型來分析統計這些數據。

查看服務端實時消息路由功能介紹

如何實現消息回看功能

如果直播聊天室中需要實現消息回看功能,則需要開通聊天室消息雲端存儲功能。開通成功後,可通過接口獲取聊天室中歷史消息,消息回看 UI 界面的展示需要由您自己實現。

聊天室中存儲的消息類型及自定義消息如何設置存儲,請查看聊天室消息雲端存儲功能介紹

如何保證重要消息不被丟棄

目前有兩種設置方式,可保證重要消息不被丟棄:

  1. 添加聊天室用戶白名單,白名單中用戶發送消息的優先級別最高,在服務器負載較高的情況下也不被丟棄。查看聊天室用戶白名單功能介紹。

  2. 設置聊天室消息優先級,把不重要的消息設置爲低優先級消息;這樣高併發時保證高優先級消息先通過。查看聊天室消息優先級服務功能介紹。

多端情況下退出聊天室

多端情況下,一端退出聊天室其他終端是否同步退出聊天室?

在開通了多端同時登錄情況下,用戶登錄多個終端,加入聊天室後,如在一端退出聊天室,其他端不會同步退出,仍然可以收到聊天室中的消息,如果需要一端退出聊天室後,其他已登錄的終端也一起退出聊天室,則需要在退出時發送一條命令消息通知其他端退出聊天室,此步驟需要開發者自行實現。

另外,需要注意如果用戶登錄終端 A 後,加入了聊天室並在聊天室的會話界面中,這時用戶又登錄了終端 B ,但未進入聊天室會話界面,這時 A 、B 兩個終端都會收接聊天室的消息,只是 B 端的聊天室消息不進行展示。如用戶在 A 端退出聊天室,這時融雲認爲用戶在 B 端仍然在聊天室中,會繼續向 B 端發送聊天室消息。如果需要 B 端同時也退出聊天室,則需要 A 端在退出時發送一條命令消息通知其他端退出聊天室,此步驟需要開發者自行實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章