當前位置:首頁 » 雲伺服器 » 開源通信伺服器搭建

開源通信伺服器搭建

發布時間: 2024-10-20 18:41:41

㈠ centos下 Janus Server 搭建筆記

Janus 是一個開源的,通過 C 語言實現了對 WebRTC 支持的 Gateway;Janus 自身實現得很簡單,提供插件機制來支持不同的業務邏輯,配合官方自帶插件就可以用來實現高效的 Media Server 服務。

本文主要介紹如何在 Centos 7.0 下搭建起 janus 伺服器,實現 janus 官方 Demo 瀏覽器與 Android APP Demo(janus-gateway-android)之間的音視頻通話。

目前瀏覽器僅支持 FireFox 瀏覽器,因為 Chrome 瀏覽器打開音視頻採集的話需要 HTTPS 加密訪問

效果圖如下:

編譯運行 Janus Server 需要依賴較多的一些第三方庫

2.1 安裝依賴

Ubuntu 下通過 aptitude 批量安裝依賴工具包,這里建議 Ubuntu 鏡像源(/etc/apt/source.list)不要為了追求速度而改用了國內的某些鏡像源,如 網易 163,這可能會導致某些工具包下載失敗,建議依然使用官方自帶的鏡像源。

yum list | grep nice

yum install gtk-doc

批量安裝命令:

如果出現某個工具包下載失敗,請修改鏡像源為官方地址,並執行以下命令

以更新鏡像源,完成後重新安裝。

2、 安裝 WebSocket

janus 支持 WebSocket 是可選項,如果不安裝,編譯 janus 時,默認不支持 WebSocket 的鏈接請求,而 Android APP Demo 是通過 WebSocket 與 janus 進行通信的,因為我們希望 Android APP Demo 能與瀏覽器(HTTP)進行視頻通話,所以就必須要在編譯 janus 時支持 WebSocket。

依次執行以下命令,分別進行下載,編譯,安裝:

安裝成功後,在編譯 janus 時,janus 默認會增加對 WebSocket 的集成,或者通過增加編譯參數 --enable-websockets 打開 WebSocket 開關,或 --disable-websockets 關閉 WebSocket 開關。

3、 安裝 Http Server

Janus 源碼目錄下的 html 下自帶 Web Demo(html & javaScript ),Janus 編譯完成並 Start 以後,需要通過 http server 訪問 Janus Web Demo,其中包括:

以上 janus 插件均可通過相應的 http 鏈接進行訪問體驗。

以下介紹一種快速,便捷,輕巧的 HTTP Server 安裝方式:

通過 Node.js (基於 Chrome V8 引擎的 JavaScript 運行環境) 進行安裝,首先安裝 Node.js:

安裝成功後,通過 npm (npm 是 Node.js 的包管理器,是全球最大的開源庫生態系統) 進行安裝 httpserver:

啟動方式:

進入到 html 目錄,執行 http-server 命令即可,如:

輸入 http url 即可訪問。

註:需首先 build & start janus Server!

4、 安裝 libsrtp

Janus 需要至少 version 1.5 以上的 libsrtp,如果系統中已經安裝了 libsrtp,則首先卸載後,手動安裝新版本,這里我們安裝 libsrtp 2.0,依次執行以下命令:

5、 編譯 Janus

通過 Git 下載 Janus 源碼,並編譯安裝:

configure 執行成功後,會輸出 janus 所支持的 協議及插件,如下:

6、 運行 Janus

如果全部安裝以上步驟進行編譯的 janus ,那麼 janus 的全局配置文件存放目錄為 :

或者在啟動 janus 時,加上相應的啟動參數,參數可通過 janus --help 查看;

janus 默認的配置中是沒有 WebSocket 的配置的,直接啟動 Janus 會因沒有 WebSocket 配置文件而報錯。幸運的是在配置目錄中 Janus 已經給我們提供了一個 WebSocket 的示例配置文件 : janus.transport.websockets.cfg.sample,(如果我們要通過 WebSocket 連接 Janus,則需要有個 WebSocket 的配置文件)這里我們可以直接拷貝這個示例文件:

通過查看此配置文件,可以得知 Janus 默認的 WebSocket 的埠號為 8188, 記住這個埠號,在 Android APP Demo 中會使用到!

啟動 Janus:

根據需要可以選擇是否加上後面兩個啟動參數。

我們使用 PC 下的 瀏覽器 與 Android APP Demo 進行聯調。

1、 啟動 Web Demo

進入到 janus 目錄下的 html 目錄,啟動 http-server

這樣外部便可以通過 http://100.100.32.64:8080 進行訪問了,進入首頁後,找到 videoRoom,Start

2、 啟動 Android APP Demo

修改源代碼

janus-gateway-android 支持兩個 Demo 測試:EchoTest 和 VideoRoom,默認情況下會啟用 EchoTest,這個 Demo 僅僅是連接伺服器後,將數據再發回本地進行本地測試,我們要改為與房間內的其它用戶(瀏覽器)進行視頻通話,則需要啟用另外一個測試用例 VideoRoom,按照如下方式修改代碼:

JanusActivity.java 類中新增 VideoRenderer.Callbacks 數組(視頻房間中可能會有多人),暫定義為 2 個,實際連接人數不要超過此數字:

OnCreate 方法中初始化以上定義的數組:

APP Demo 是通過 WebSocket 連接 Janus Server,所以修改 VideoRoomTest.java 中 JANUS_URL 地址為我們啟動的 Janus 伺服器 WebSocket 地址,IP 為 janus server 地址,埠默認為 8188:

3、聯調測試

Janus Server 默認會開啟兩個視頻房間:1234 和 5678,分別使用 VP8 和 VP9 視頻編碼器,所以我們通過 Brower 和 Android APP Demo 進行聯調測試時,暫不需要設置房間 ID。

效果圖:

修改/opt/janus/etc/janus/janus.jcfg

nat: {

stun_server = "stun.voip.eutelia.it"

stun_port = 3478

nice_debug = false

㈡ 如何用mosquitto搭建伺服器

Mosquitto是一款實現了消息推送協議MQTT v3.1的開源消息代理軟體,提供輕量級的,支持可發布/可訂閱的的消息推送模式,使設備對設備之間的短消息通信變得簡單,比如現在應用廣泛的低功耗感測器,手機、嵌入式計算機、微型控制器等移動設備。
Mosquitto官網:
MQTT協議:
客戶端連接日誌
1403334375: New connection from 121.201.8.163 on port 1883.

1403334375: New client connected from 121.201.8.163 as zhoujing (c0, k60, ujoyo).

1403334375: Sending CONNACK to zhoujing (0)

以上是一個客戶端正常連接的日誌。
第一行:伺服器收到一個新的連接請求
1403334375: 表示連接的時間點
121.201.8.163: 客戶端的IP地址
1883: 連接的伺服器埠號
第二行:伺服器為客戶端建立連接
zhoujing (c0, k60, ujoyo): 客戶端連接指定的ClientID為'zhoujing'
c0: 表示cleanSession=false,不清除session
k60: 表示keep-alive=60s
ujoyo: 表示使用的伺服器賬號為joyo
第三行:發送連接ACK包給客戶端
客戶端訂閱過程日誌
1403334375: Received SUBSCRIBE from zhoujing
1403334375: jiji/chat/9 (QoS 2)
1403334375: zhoujing 2 jiji/chat/9
1403334375: Sending SUBACK to zhoujing

第一行:伺服器收到一個來自ClientID為zhoujing的訂閱請求
第二行:伺服器識別zhoujing訂閱的主題為 jiji/chat/9,指定的QOS=2(有且只發送一次)
第三行:給ClientID=zhoujing客戶端發送訂閱ACK回包
伺服器發送內容給客戶端日誌
1403334378: Sending PUBLISH to zhoujing (d0, q2, r0, m1, 'jiji/chat/9', ... (396 bytes))
1403334378: Received PUBREC from zhoujing (Mid: 1)
1403334378: Sending PUBREL to zhoujing (Mid: 1)
1403334378: Received PUBCOMP from zhoujing (Mid: 1)

第一行:伺服器正在發送一個消息給ClientID=zhoujing的客戶端,消息體大小為396 bytes,消息主題為『jiji/chat/9』
(d0, q2, r0, m1)的解釋, 以下參數具體含義,參考MQTT協議
d: 表示mqtt報頭的DUP欄位
q: 表示的QOS欄位
r: 表示的是RETAIN
m: 表示的是消息ID,即mid
第二行:發布收稿階段,有保證的交付第一部分
第三行:出版發行階段,有保證的交付第二部分
第四行:發布完成,有保證的交付第三部分,至此一個內容發部過程完成
客戶端主動斷開連接的日誌
客戶端主動斷開連接的只有一行日誌,很簡單。如下所示:
1403334380: Received DISCONNECT from JY_API_PUSH_CLIENT

接收客戶端發布內容的過程日誌
1403334389: Received PUBLISH from JY_API_PUSH_CLIENT (d0, q2, r0, m1, 'jiji/chat/9', ... (396 bytes))
1403334389: Sending PUBREC to JY_API_PUSH_CLIENT (Mid: 1)
1403334389: Received PUBREL from JY_API_PUSH_CLIENT (Mid: 1)
1403334389: Sending PUBCOMP to JY_API_PUSH_CLIENT (Mid: 1)

第一行:接收來自ClientID=JY_API_PUSH_CLIENT的發布請求,發布的消息主題為'jiji/chat/9',消息大小為396 bytes
第二行:伺服器發送PUBREC給客戶端,此過程與發送消息給客戶端正好對稱,只不過是Received和Sending的對象反過來而已
第三行:伺服器接收到客戶端已經釋放的命令,內容交付第二步完成
第四行:通知客戶端,接收完成,至此一個消息發布完成,內容交付第三步完成
同一個ClientID重復連接時
1403334510: New connection from 121.201.7.150 on port 1883.
1403334510: Client JY_API_PUSH_CLIENT already connected, closing old connection.

接收客戶端心跳包
1403336716: Received PINGREQ from 36383A64663A6464003V0
1403336716: Sending PINGRESP to 36383A64663A6464003V0

客戶端連接超時,伺服器主動清除連接信息
1403336671: Client 33303A33393A3236003V0 has exceeded timeout, disconnecting.

客戶端socket異常時的日誌
1403337602: Socket error on client 351BBJKFX62C1, disconnecting.
1403337602: Socket error on client 351BBJKFX62C0, disconnecting.

㈢ Jabber如何實現在不同伺服器間用戶的通信

Jabber網路運作方式獨特,它基於伺服器架構,但又具備分布式特性。不同於AOL即時通或MSNMessenger,Jabber沒有單一的中央官方伺服器。盡管Jabber.org上有眾多用戶活躍,但這並非官方伺服器,實際上,任何人都可以在自己的網路域上設立Jabber伺服器。


在Jabber中,用戶的標識符被稱為Jabber識別符(JID),格式類似電子郵件地址,如[email protected]。JID由用戶名和Jabber伺服器域名組成,通過'@'符號區分。例如,朱麗葉([email protected])和羅密歐([email protected])的賬號。


當朱麗葉想要與羅密歐交談時,這個過程如下:



  1. 朱麗葉的Jabber客戶端將她的消息發送到Capulet.com的伺服器(朱麗葉的伺服器)。

  2. Capulet.com伺服器與Montague.net伺服器(羅密歐的伺服器)建立連接。

  3. Montague.net伺服器將消息轉發給羅密歐。如果羅密歐當時不在線,信息會被暫存,等待稍後發送。


朱麗葉和羅密歐的Jabber服務分別由不同的服務提供商支持,他們之間的通信無需擁有對方伺服器的賬號,也不需要成為對方服務提供商的會員,只要雙方伺服器能相互通信即可。


朱麗葉 Capulet.com Montague.net Romeo


(3)開源通信伺服器搭建擴展閱讀

Jabber 是著名的Linux即時通訊服務伺服器,它是一個自由開源軟體,能讓用戶自己架即時通訊伺服器,可以在Internet上應用,也可以在區域網中應用。Jabber最有優勢的就是其通信協議,可以和多種即時通訊對接。

熱點內容
cwindowslinux 發布:2024-10-21 03:05:53 瀏覽:726
劍網三編程 發布:2024-10-21 02:53:47 瀏覽:838
c語言題庫app 發布:2024-10-21 02:52:32 瀏覽:622
王牌戰爭伺服器沒人是什麼情況 發布:2024-10-21 02:52:27 瀏覽:11
反斜杠c語言 發布:2024-10-21 02:44:30 瀏覽:898
安卓轉網頁後端開發需要學什麼 發布:2024-10-21 02:42:55 瀏覽:256
冰箱壓縮機做空調 發布:2024-10-21 02:42:55 瀏覽:2
linux開機mount 發布:2024-10-21 02:31:05 瀏覽:448
拍視頻安卓和蘋果怎麼選 發布:2024-10-21 02:10:22 瀏覽:306
青島醫保卡如何修改密碼 發布:2024-10-21 02:06:43 瀏覽:122