首頁 > web前端 > js教程 > Janus WebRTC 伺服器和 SFU:即時視訊通話應用程式

Janus WebRTC 伺服器和 SFU:即時視訊通話應用程式

Susan Sarandon
發布: 2024-11-02 16:55:29
原創
419 人瀏覽過

在本文中,我們將使用 Janus WebRTC 伺服器和 SFU 建立一個視訊通話應用程式

我們還將了解 Metered.ca SFU 以及為什麼它是比 Janus Server 更好的選擇

Janus是什麼?

Janus 是一個開源、通用的 WebRTC SFU 伺服器。它是一個模組化網關,透過處理複雜的 WebRTC 協定來促進即時通訊應用程序,並為媒體交換提供穩定的伺服器

Janus SFU 的主要特點

  • 模組化架構: Janus 有一個基於插件的系統,其中每個插件都有一些特定的功能。這種模組化允許定制和擴展

  • 協定處理:Janus 管理建立 webrtc 連線所需的訊號和協商。

  • 互通性: Janus 支援媒體編解碼器,並相容於不同的客戶端和瀏覽器,因此 Janus 具有廣泛的兼容性

  • 可擴充性:Janus 旨在高效處理多個連接,可在特定地理區域內進行擴充。 (也就是說,如果所有使用 Janus 的使用者都在一個小地理區域內,它就會正常運作)

了解SFU(選擇性轉送單元)

SFU 或選擇性轉發單元是一種媒體伺服器架構,用於 WebRTC 應用程式中,以在不同媒體參與者之間有效路由媒體串流

SFU 接收來自每個參與者的傳入視訊串流,然後根據請求選擇性地將串流轉發給其他參與者。

即每位參與者接收參與者請求的流,同時所有參與者將其流推送到 SFU

使用 SFU 高效能路由媒體串流的優勢

  1. 可擴展性:SFU 可以處理大量連接,因為 SFU 不涉及編碼和解碼等計算密集型任務,而只是將流轉發給用戶

  2. 低延遲: SFU 轉送流而不進行處理,從而實現低延遲。但如果您的用戶遍布世界各地,您需要一個全球分散式 SFU 服務,例如 metered.ca cloud sou

  3. 頻寬最佳化

    1. 聯播支援:SFU 可以傳輸來自同一參與者的多個不同品質的串流。客戶可以選擇傳輸最適合其設備和網路功能的不同質量,以實現流暢的視訊/音訊串流
    2. 選擇性訂閱:客戶端可以只訂閱他們需要的串流,從而減少不必要的頻寬使用。
  4. 靈活性和控制:參與者對於他們想要接收的內容有更大的靈活性,例如,如果他們只想接收音訊或接收選定參與者的視訊串流,那他們可以選擇這樣做

  5. 成本效率:由於與 MCU 相比,SFU 需要更少的處理,雲端上較小的實例可以為您工作

  6. 保持媒體質量: SFU 保持媒體質量,因為它們不對媒體流進行任何處理,只是將流轉發給請求的參與者。

  7. 更輕鬆實現進階功能

    1. 動態佈局客戶端可以使用他們接收的視訊串流自訂自己的佈局。而不是透過視訊 sdk 和 api 獲得的預先確定的佈局
    2. 活動發言者偵測: SFU 可以只轉發活動發言者的串流,從而增強焦點並減少不必要的資料傳輸。
    3. 錄製與串流: SFU 可以將媒體串流轉發到錄製服務或廣播平台,而不影響裝置和使用者之間的任何通訊
  8. 提高可靠性:伺服器上無需處理媒體,因此故障點更少。 SFU 還可以叢集化以實現冗餘,從而確保即使一台伺服器遇到任何問題,服務仍然可用。


Janus WebRTC server and SFU: a real time video calling app

在您的應用程式中實作 Janus

將 Janus SFU 整合到您的應用程式中涉及以下步驟。以下是在您的應用程式中實施 Janus 的逐步過程。

第 1 步:設定 Janus 伺服器

  1. 系統準備

    1. 伺服器準備:確保您有正在執行的 Ubuntu 或 Debian 伺服器。
    2. 安裝依賴項:Janus 需要類似的函式庫
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登入後複製
登入後複製
登入後複製
登入後複製

您可以輕鬆地在 ubuntu 或 Debian 上安裝這些依賴項

apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登入後複製
登入後複製
登入後複製

下載並建構 Janus

  • 克隆儲存庫
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登入後複製
登入後複製
登入後複製
登入後複製
  • 導航到目錄
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登入後複製
登入後複製
登入後複製
  • 產生設定腳本
git clone https://github.com/meetecho/janus-gateway.git
登入後複製
  • 配置構建
cd janus-gateway
登入後複製
  • 編譯並安裝
sh autogen.sh
登入後複製
  1. 配置 Janus

    1. 編輯設定檔

      1. 該檔案位於/opt/janus/etc/janus/
      2. 重要文件包括 janus.cfg 、 janus.transport.websockets.cfg 和 janus.plugin.videoroom.cfg
    2. 啟用所需的外掛程式

      1. 確保啟用視訊室外掛才能使用 SFU
      2. 如果您想在應用程式中使用 WebSocket 傳輸來發送訊號,您也可以設定 WebSockets 傳輸
  2. 設定 SSL 憑證

    1. 產生 SSL 憑證

      1. 如果您想使用安全連接,可以使用 Lets Encrypt 產生自簽名憑證。如果您想使用安全連接,這是一個可選步驟
    2. 更新設定

      1. 將設定檔指向SSL憑證
  3. 啟動 Janus 伺服器

    1. 運行劍鋒
./configure --prefix=/opt/janus
登入後複製
  1. 驗證操作

    1. 檢查日誌以查看一切都在運行,沒有任何錯誤。

第 2 步開發客戶端應用程式

  1. 設定開發環境

    1. 選擇前端框架

      1. 您可以選擇 React、Angular 或任何其他前端框架
    2. 包含 WebRTC 函式庫

      1. 您也可以使用像adapter.js這樣的WebRTC輔助函式庫來相容不同的瀏覽器
  2. 建立訊號伺服器

    1. 透過 Websockets 連線到 Janus
    2. 實現握手以建立新會話,然後附加視訊室插件
  3. 建立或加入視訊室

    1. 向 Janus 伺服器發送請求以建立新房間或加入伺服器上的現有房間
  4. 處理本地媒體串流

    1. 如果您願意,可以向使用者顯示本地媒體串流,我們也會在下面的後面部分中顯示遠端串流
make
sudo make install
sudo make configs
登入後複製

將本機串流附加到 HTML 中的影片元素以向使用者播放串流

5.發佈到 Janus

  • 使用 RTCPeerConnection 建立 SDP 報價

  • 使用 API 將報價發送給 Janus

  • 接收來自Janus的SDP應答並將其設定為遠端描述

6.訂閱遠端串流

  • 處理加入訊息和活動訊息以收聽其他會議參與者的通知

  • 為訂閱者建立對等連接,即為每個遠端參與者建立一個新的 RTCPeerConnection

  • 處理遠端串流,取得遠端串流並將其附加到 HTML 視訊元素以在使用者 Web 瀏覽器上播放視訊

  1. 實作事件監聽器和處理程序

    1. 監控 oniceconnectionstatechange 和 onicecandidate 等事件,並在這些事件發生時進行處理,並在需要時實現重新連接邏輯

探索 Metered.ca SFU 作為 Janus 的替代品

什麼是計量全球雲 SFU

  1. Metered Global Cloud SFU 是 Metered.ca 推出的基於雲端的選擇性轉送單元

  2. 借助 Metered SFU,開發人員可以建立任何類型的應用程序,包括視訊、音訊和資料傳輸

  3. 計量 SFU 使用本機 WebRTC API 和 HTTP 運行,無需任何專有 SDK。

  4. 使用者也會依照地理位置自動路由到最近的 SFU

  5. 多個 SFU 使用高速互連在全球範圍內相互連接,確保盡可能低的延遲

計量全域 SFU 的主要功能

  • 全球分佈:

    • 使用者根據地理位置連接到封閉的SFU,因此具有最低的延遲和高效能
  • 平台獨立性

    • 無需任何專有 SDK,從而使您能夠使用 WebRTC 自己的 API 跨不同平台進行開發
  • 靈活的發布訂閱模式:

    • 可容納無限參與者和不同的會議結構。
  • 可擴充性

    • 您可以與數千名用戶舉行小型會議以及大型直播會議
  • 成本效率:

    • 根據資料傳輸速率收費,為高使用場景提供顯著節省
    • 此外,也提供按使用付費的計費方式。

計量 SFU 的工作原理

連接流程

  1. 建立連線

    1. 建立對等連接
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登入後複製
登入後複製
登入後複製
登入後複製

b.發送本地 SDP 報價

  • 產生 SDP 報價,然後使用 HTTP API 請求將其傳送至 Metered.ca SFU。

c.接收SFU遠端SDP

  • 將收到的SDP設定為peerConnection上的遠端描述

d.連線已建立

  • 新增媒體軌道
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登入後複製
登入後複製
登入後複製
登入後複製
  1. 發布曲目

    1. 新增媒體軌道
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登入後複製
登入後複製
登入後複製

b.產生並發送 SDP 報價

  • 將更新的 SDP 報價發送給 SFU

  • 接收並設定 SFU 對 SDP 的回應

  1. 訂閱曲目

      1. 向 SFU 要求曲目訂閱

        1. 使用所需流的trackid和remoteTrackSessionId將請求傳送到SFU。
      1. 在你的peerConnection上設定接收到的SDP
      2. 處理傳入媒體和 ontrack 事件以向使用者顯示傳入流

計量 SFU 相對於 Janus 的優勢

  1. 可擴充性

    1. 媒體分佈

      1. 客戶端將所有媒體串流傳送到SFU一次,無論有多少參與者
      2. 然後,SFU 管理流向所有請求特定流的訂閱者的分發
    2. 大規模串流媒體

      1. 計量 SFU 支援小型會議以及向數千名用戶進行的大規模直播
  2. 平台獨立性

    1. 無專有 SDK
    2. 降低複雜性
  3. 靈活的發布訂閱模式

    1. 無房間限制:計量 SFU 在會話上運行,而不是在預先定義的房間上運行。
    2. 會話可以發布和訂閱流,參與者數量沒有限制。
    3. 動態和可擴展設計:最適合可擴展設計,例如直播。
  4. 成本效率

    1. 計量 SFU 具有成本效益,因為我們根據每 GB 傳輸的資料而不是按分鐘計費
    2. 僅出站資料收費,SFU 的入站資料免費,這在監控等應用程式中特別具有成本效益,這些應用程式會不斷上傳到 SFU 但不經常查看
  5. 全球SFU網路:

    1. 計量 SFU 具有全球影響力,SFU 遍佈五大洲
    2. 媒體串流透過高速互連 SFU 連結進行路由
    3. 這使得來自世界不同地區的使用者能夠體驗低延遲通訊

計量 SFU 與 Janus 的比較

  1. 部署與維護

    1. 計量 SFU:

      1. 基於雲端的託管服務基礎架構
      2. 減輕營運和維護責任,使開發人員能夠專注於應用程式功能
    2. 兩面神

      1. 需要自架網站、伺服器設定和持續維護,而且它不是完全免費的,因為您必須支付雲端伺服器費用
      2. 需要管理更新、擴充和安全性修補程式
  2. 可擴充性和效能

    1. 計量 SFU

      1. 自動擴充並可以處理任意數量的參與者
      2. 透過遍佈各個地理位置的 SFU,世界各地的參與者都可以體驗到低延遲和高效能
    2. 兩面神

      1. 不可全域擴展,取決於您指派的伺服器資源
      2. 需要複雜的設置,例如針對高負載用例的叢集
  3. 成本結構

    1. 計量 SFU

      1. 按 GB 進行資料傳輸計費,這更便宜,而且按需付費
      2. 對於需要高數據使用量的應用程式來說更具可預測性且成本更低
    2. 兩面神

      1. 雖然開源,但使用 Janus 會產生營運成本,包括伺服器代管和維護
      2. 隨著擴展和高使用率,成本會顯著增加
  4. 靈活性與功能

    1. 計量 SFU

      1. 靈活且可擴展的發布和訂閱模型
      2. 使用標準 WebRTC API 簡化開發並支援無限參與
    2. 兩面神

      1. 提供基於插件的架構,具有視訊室串流等功能
      2. 需要針對特定用例進行配置和潛在的客製化
  5. 易於整合

    1. 計量 SFU

      1. 使用標準 WebRTC API 簡化開發流程
      2. 縮短上市時間,需考慮基礎架構設定、伺服器需求等

Janus WebRTC server and SFU: a real time video calling app

計量 TURN 伺服器

  1. API: 使用強大的 API 進行 TURN 伺服器管理。您可以執行以下操作:透過 API 新增/刪除憑證、透過 API 檢索每個使用者/憑證和使用者指標、透過 API 啟用/停用憑證、透過 API 按日期檢索使用資料。

  2. 全球地理位置定位:自動將流量定向到最近的伺服器,以實現盡可能低的延遲和最高的品質效能。全球任何地方的延遲均低於 50 毫秒

  3. 全球所有地區的伺服器:多倫多、邁阿密、舊金山、阿姆斯特丹、倫敦、法蘭克福、班加羅爾、新加坡、雪梨、首爾、達拉斯、紐約

  4. 低延遲: 低於 50 毫秒的延遲,在世界任何地方。

  5. 經濟高效:即用即付定價,並提供頻寬和批量折扣。

  6. 輕鬆管理: 取得使用日誌、帳戶達到門檻限制時的電子郵件、帳單記錄以及電子郵件和電話支援。

  7. 符合標準: 符合 UDP、TCP、TLS 和 DTLS 的 RFC 5389、5769、5780、5766、6062、6156、5245、5768、6336、92536、9252536、92536、92536。

  8. 多租用戶: 建立多個憑證並依客戶或不同應用程式分開使用。取得使用日誌、計費記錄和閾值警報。

  9. 企業可靠性: SLA 正​​常運作時間達 99.999%。

  10. 企業規模: 不限制併發流量或總流量。計量 TURN 伺服器提供企業可擴充性

  11. 每月 5 GB 免費: 透過免費方案每月獲得 5 GB 免費 TURN 伺服器使用量

  12. 在連接埠 80 和 443 上運作

  13. 支援 TURNS SSL 以允許透過深度封包偵測防火牆進行連線。

  14. 同時支援 TCP 和 UDP

  15. 免費無限制 STUN

以上是Janus WebRTC 伺服器和 SFU:即時視訊通話應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板