mediasoup介紹
概述
mediasoup是SFU模式的媒體伺服器。SFU(Selective Forwarding Unit)模式是從房間中的每個參與者接收音頻和視頻流,並將其轉發給其他人(終端發送一個並接收很多)。 與mixer或MCU(Multipoint Control Unit)相比,這種設計有更好的性能,更高的吞吐量和更少的延遲。 它具有高度的可擴展性,因為它不會轉碼或混合媒體,所以需要更少的資源。
由於終端分別獲取其他參與者的媒體,所以他們可以有一個個性化的布局,並能選擇要渲染的流顯示。
有關SFU體系結構的詳細信息可以在RFC 7667「RTP拓撲」部分3.7中找到。
mediasoup 目標
- 成為WebRTC SFU(Selective Forwarding Unit)。
- 在伺服器端是一個Node.js模塊。
- 在客戶端是一個小小的SDK。
- 極簡主義: 僅僅處理媒體層。
- 在客戶端和伺服器端使用流行的ECMAScript 6 API。
- 支持所有現有的WebRTC和ORTC瀏覽器。
- 不要求特定的信令協議。
Server side
與其他現有的SFU實現不同,mediasoup不是一個獨立的伺服器,而是一個可以集成到一個更大的應用程序中的Node.js模塊:
const mediasoup = require("mediasoup");
因此,在內部,媒體可以分解為兩個分離的組件:
- 一個為Node.js提供現代ECMAScript 6 API的JavaScript層,
- 處理媒體層(ICE,DTLS,RTP等)的一組C/C ++子進程。
兩個組件通過進程間通信相互通信。 但是,從開發人員的角度來看,應用程序應該只關心JavaScript API集成。
Features
- ECMAScript 6 API。
- 多個會議室與多個參與者。
- 多碼流:通過ICE + DTLS傳輸多個音頻/視頻流。
- IPv6準備就緒。
- 基於UDP和TCP之上的ICE / DTLS / RTP / RTCP協議。
- 用於選擇所需層的RTP同播支持API。
- 通過REMB進行擁塞控制。
- 功能非常強大(基於libuv之上的子進程)。
Client side
mediasoup-client 是構建JavaScript客戶端應用程序的SDK。 這是一個小型庫,公開了強大的跨瀏覽器API,可讓客戶端應用程序加入媒體室並管理音頻/視頻流。
mediasoup-client支持當前所有的WebRTC和ORTC瀏覽器,包括Chrome,Firefox,Safari,Microsoft Edge和 衍生瀏覽器(例如Opera或任何基於Chromium的瀏覽器)。 在內部,mediasoup-client兼容實現了WebRTC(Plan-B或Unified-Plan)或ORTC API(如Microsoft Edge)以不同的方式處理每個瀏覽器。
Features
- ECMAScript 6 API。
- 在Chrome,Firefox,Safari,Microsoft Edge和衍生瀏覽器上運行。
推薦閱讀:
TAG:WebRTC |
