Janus WebRTC サーバーと SFU: リアルタイム ビデオ通話アプリ

Susan Sarandon
リリース: 2024-11-02 16:55:29
オリジナル
331 人が閲覧しました

この記事では、Janus WebRTC サーバーと SFU を使用してビデオ通話アプリを作成します

また、Metered.ca SFU について、そしてそれが Janus Server よりも優れた選択肢である理由についても学びます

ヤヌスとは何ですか?

Janus は、オープンソースの汎用 WebRTC SFU サーバーです。これは、複雑な WebRTC プロトコルを処理することでリアルタイム通信アプリを容易にし、メディア交換を目的とした安定したサーバーを提供するモジュール式ゲートウェイです

Janus SFU の主な機能

  • モジュラー アーキテクチャ: Janus には、各プラグインが特定の機能を備えたプラグイン ベースのシステムがあります。このモジュール性により、カスタマイズと拡張が可能です

  • プロトコル処理: Janus は、webrtc 接続の確立に必要なシグナリングとネゴシエーションを管理します。

  • 相互運用性: Janus はメディア コーデックをサポートし、さまざまなクライアントやブラウザと互換性があるため、Janus には幅広い互換性があります

  • スケーラビリティ: 複数の接続を効率的に処理するように設計された Janus は、特定の地理的ゾーン内でスケーラブルです。 (つまり、Janus を使用しているすべてのユーザーが狭い地理的ゾーン内にいる場合は正常に動作します)

SFU (選択的転送ユニット) について

SFU または選択的転送ユニットは、異なるメディア参加者間でメディア ストリームを効率的にルーティングするために WebRTC アプリで使用されるメディア サーバー アーキテクチャです

SFU は各参加者から受信ビデオ ストリームを受信し、要求に応じてストリームを他の参加者に選択的に転送します。

すべての参加者が自分のストリームを SFU にプッシュしている間、各参加者は参加者が要求したストリームを受信します

メディア ストリームを効率的にルーティングするために SFU を使用する利点

  1. スケーラビリティ: SFU は、エンコードやデコードなどの計算量の多いタスクに関与せず、ストリームをユーザーに転送するだけであるため、多数の接続を処理できます

  2. 低遅延: SFU は処理を行わずにストリームを転送するため、低遅延が実現します。しかし、ユーザーが世界中にいる場合は、metered.ca cloud sou

  3. などのグローバル分散型 SFU サービスが必要になります。
  4. 帯域幅の最適化

    1. サイマルキャストのサポート: SFU は、同じ参加者から異なる品質の複数のストリームをストリーミングできます。クライアントは、スムーズなビデオ/オーディオ ストリーミングを実現するために、デバイスとネットワーク機能に最適なさまざまな品質のストリーミングを選択できます
    2. 選択的サブスクリプション: クライアントは必要なストリームのみをサブスクライブできるため、不必要な帯域幅の使用が削減されます。
  5. 柔軟性と制御: 参加者は受信したいものについてより柔軟に対応できます。たとえば、音声のみを受信したい場合、または選択した参加者のビデオ ストリームを受信したい場合は、次のオプションがあります。それをしてください

  6. コスト効率: SFU は MCU と比較して必要な処理が少ないため、クラウド上の小規模なインスタンスで機能します

  7. メディアの品質の保持: SFU はメディア ストリームに対して処理を行わず、要求された参加者にストリームを転送するだけであるため、メディアの品質を保持します。

  8. 高度な機能の実装が容易になりました

    1. 動的レイアウト クライアント は、受信しているビデオ ストリームを使用して独自のレイアウトをカスタマイズできます。ビデオ SDK や API で得られるあらかじめ決められたレイアウトではなく
    2. アクティブ スピーカーの検出: SFU はアクティブ スピーカーのみのストリームを転送できるため、集中力が強化され、不必要なデータ送信が削減されます。
    3. 録画とストリーミング: SFU は、デバイスとユーザー間の通信に影響を与えることなく、メディア ストリームを録画サービスまたはブロードキャスト プラットフォームに転送できます
  9. 信頼性の向上: サーバー上でメディアが処理されないため、障害点が少なくなります。 SFU は冗長性を確保するためにクラスタ化することもできるため、1 つのサーバーで問題が発生した場合でもサービスが確実に稼働したままになります。


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 トランスポートを使用したい場合は、WebSocket トランスポートを構成することもできます
  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. Websocket 経由で Janus に接続します
    2. 新しいセッションを作成するためにハンドシェイクを実装し、ビデオ ルーム プラグインをアタッチします
  3. ビデオ ルームを作成または参加します

    1. Janus サーバーにリクエストを送信して、新しいルームを作成するか、サーバー上の既存のルームに参加します
  4. ローカルメディアストリームを処理する

    1. 必要に応じてローカル メディア ストリームをユーザーに表示します。リモート ストリームも以下の後のセクションで表示します。
make
sudo make install
sudo make configs
ログイン後にコピー

ローカル ストリームを HTML の video 要素に添付して、ユーザーにストリームを再生します

5. Janus に公開

  • RTCPeerConnection を使用して SDP オファーを作成します

  • API を使用してオファーを Janus に送信します

  • Janus から SDP 回答を受信し、リモート記述として設定します

6.リモートストリームを購読する

  • 参加メッセージとイベント メッセージを処理して、他の会議参加者からの通知を聞く

  • 加入者のピア接続を作成します。つまり、リモート参加者ごとに新しい RTCPeerConnection を作成する必要があります

  • リモート ストリームを処理し、リモート ストリームを取得して HTML ビデオ要素に添付して、ユーザーの Web ブラウザーでビデオを再生します

  1. イベントリスナーとハンドラーを実装する

    1. oniceconnectionstatechange や onicecandidate などのイベントを監視し、発生時にこれらのイベントを処理し、必要に応じて再接続ロジックを実装します

探索 Metered.ca Janus の代替としての SFU

従量制グローバル クラウド SFU とは

  1. Metered Global Cloud SFU は、Metered.ca によるクラウドベースの選択的転送ユニットです

  2. Metered SFU を使用すると、開発者はビデオ、オーディオ、データ送信を含むあらゆる種類のアプリケーションを構築できます

  3. Metered SFU は、独自の SDK を必要とせず、ネイティブ WebRTC API と HTTP を使用して実行されます。

  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 をピア接続のリモート記述として設定します

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 に送信します

  • SDP への SFU 応答を受信して​​設定します

  1. トラックを購読する

      1. SFU からトラックのサブスクリプションをリクエストします

        1. 目的のストリームの trackid と RemoteTrackSessionId を使用して、SFU にリクエストを送信します。
      1. 受信したSDPをpeerConnectionに設定します
      2. 受信メディアとオントラック イベントを処理して、受信ストリームをユーザーに表示します

Janus に対する従量制 SFU の利点

  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 は、5 大陸すべての 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 でサーバー管理を実現します。 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、6544、5928 に準拠します。

  8. マルチテナンシー: 複数の認証情報を作成し、顧客ごとまたは異なるアプリごとに使用を分離します。使用状況ログ、請求記録、およびしきい値アラートを取得します。

  9. エンタープライズの信頼性: SLA による 99.999% の稼働時間。

  10. エンタープライズ規模: 同時トラフィックまたは合計トラフィックに制限はありません。従量制の TURN サーバーはエンタープライズ スケーラビリティを提供します

  11. 5 GB/月 無料: 無料プランでは毎月 5 GB の TURN サーバーを無料で利用できます

  12. ポート 80 および 443 で実行

  13. ディープ パケット インスペクション ファイアウォールを介した接続を許可する TURNS SSL をサポートします。

  14. TCP と UDP の両方をサポート

  15. 無料無制限スタン

以上がJanus WebRTC サーバーと SFU: リアルタイム ビデオ通話アプリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート