マルチパーティオーディオおよびビデオ通信用の3つのアーキテクチャスキーム
1.メッシュスキーム
つまり、複数の端末がペアで接続されてネットワーク構造を形成します。このスキームは1v1WebRTC通信モデルの拡張バージョンであり、任意の2つのノードを1v1WebRTC通信モデルと見なすことができます。
利点:サーバーがデータを転送する必要がなく、STUN / TUTNはNATトラバーサルのみを担当するため、メディアサーバーを開発することなく、既存のWebRTC通信モデルを使用して実現できます。
短所:メディアストリームを各参加者に転送する必要があります。これは、多くのアップストリーム帯域幅を占有します。参加者が多いほど、占有される帯域幅は大きくなります。クライアントのマシンリソースの占有率は、参加者の数に比例します。参加者が多すぎる場合、このソリューションは利用できません。実用的な観点から、この種のプログラムは、4人以上の場合に非常に大きな問題を抱えることになります。さらに、STUN / TUTNはNATトラバーサルのみを担当するため、NATトラバーサルを達成できない人がいると、接続できません。
2. MCU(マルチポイント会議ユニット)ソリューション
このスキームは、サーバーと複数の端末で構成され、スター構造を形成します。MCUの主な処理ロジックは、各共有エンドのオーディオおよびビデオストリームを受信し、デコード、ミキシング、および他のデコードされたオーディオおよびビデオストリームとの再エンコードを行ってから、混合されたオーディオおよびビデオストリームを部屋の全員に送信することです。
実際、サーバー側はオーディオとビデオのミキサーであり、このソリューションのサーバーへのプレッシャーは非常に高くなります。MCUテクノロジは、ビデオ会議の分野で非常に早い段階で登場しました。現在のテクノロジも非常に成熟しており、主にハードウェアビデオ会議の分野で使用されています。
(C / C ++ 、Linux 、FFmpeg 、webRTC 、rtmp 、hls 、rtsp 、ffplay 、srs )を含む2022年の最新かつ最も完全な学習および改善資料を受け取るように私にプライベートメッセージを送ります
3. SFU(選択的転送ユニット)スキーム
このソリューションもサーバーと複数の端末で構成されていますが、MCUとは異なり、SFUはオーディオストリームとビデオストリームを混合しません。端末で共有されるオーディオストリームとビデオストリームを受信した後、オーディオストリームとビデオストリームを部屋の部屋に直接転送します。部屋。他のターミナル。
これは実際にはオーディオおよびビデオルーティングリピータであり、端末のダウンリンクネットワークステータスに応じてフロー制御を実行でき、現在の帯域幅の状況とネットワーク遅延に応じて一部のメディアデータを選択的に破棄して、通信の継続性を確保できます。詳細は以下のとおりです。
要約する
メッシュソリューションと比較すると、SFUとMCUの両方にトランジットサーバーが必要です。MCUソリューションは複数のビデオチャンネルを1つのチャンネルにミックスする必要があるため、多くの操作が必要であり、多くのCPUリソースを消費します。通常、処理には特別なハードウェアが必要です。SFUソリューションはマルチチャンネルビデオミキシングを必要としないため、多くのCPUを必要としませんが、マルチチャンネルビデオの場合、異なる人物が同時に見た画像の一貫性が失われるという問題が発生する可能性があります。
したがって、リレーサーバーを使用したくない場合は、メッシュソリューションを選択します。マルチチャネルビデオの一貫性に対する要件が高く、特別なハードウェアがある場合は、MCUモードを選択することをお勧めします。それ以外の場合は、 SFUモードを使用します。
SFUプログラム
SFUスキームは、ネットワーク遅延中にメディアデータを破棄するさまざまな方法に応じて、サイマルキャストモードとSVCモードに分けられます。
サイマルキャストモード
いわゆるサイマルキャストモードは、ビデオ共有者が異なる解像度の複数のビデオストリームを同時にSFUに送信できることを意味します(通常、1080P、720P、360Pなどの3つのチャネル)。SFUは、各端末の状況に応じて、受信した3つのストリームから1つを選択して送信できます。
たとえば、PC側のネットワークは特に優れているため、1080P解像度のビデオがPC側に送信されます。モバイルネットワークが貧弱な場合は、360P解像度のビデオが電話に送信されます。
SVCモード
SVCは、スケーラブルなビデオコーディングモードです。ビデオを複数のレイヤーに分割します-ビデオエンコーディング中にコアレイヤー、ミドルレイヤー、エクステンションレイヤー。上層は下層に依存し、上層が高いほど下層は透明になり、下層はぼやけます。帯域幅が狭い場合は、最下層、つまりコア層のみを送信できます。帯域幅が十分な場合は、3つの層すべてを送信できます。
マルチパーティのビデオ会議サービスを展開する
上記の分析に基づいて、SFUスキームに基づくプロジェクトを実施します。オープンソースプロジェクトには、Licode、Janus-gateway、MediaSoup、Medoozeが含まれます。ここでは、MedoozeベースのデモプロジェクトSFUをデプロイします。
動作環境の準備
- OS:Ubuntu 18.04
- ロケール:NodeJS
apt-get update && apt-get install -y nodejs npm git-core
依存関係をインストールする
git clone https://github.com/medooze/sfu.git
cd sfu
npm install
証明書を生成する
証明書は、将来、統合して整理する時間があります。
サービスを開始します
node index.js IP
Dockerサービス
Dockerfile
FROM ubuntu:18.04
WORKDIR /
RUN apt-get update && apt-get upgrade && apt install -y nodejs npm git-core python3 wget curl && npm install -g n && n stable
RUN hash -r && npm install -g [email protected]
RUN git clone https://github.com/medooze/sfu
WORKDIR /sfu
RUN npm install
RUN openssl req -x509 -out ./server.cert -keyout ./server.key -newkey rsa:2048 -nodes -sha256 -subj '/CN=*'
ENTRYPOINT ["node" "index.js"]
Dockerイメージ
// 可以用上面的 Dockerfile 文件自己打镜像,也可用用我已经打包好的镜像
docker pull zhaowg/sfu:v1
Dockerバージョンの使用方法
docker run -it --net=host zhaowg/sfu:v1 <IP>