プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • WebRTC
  • 【WebRTC】「SFU」の仕組み、Simulcast、OSS
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【WebRTC】「SFU」の仕組み、Simulcast、OSS

12.26

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

SFUの仕組み

P2Pと違ってサーバーが配信を代行します。

問題点

映像を変換しないためユーザーごとに配信するビットレートを選択できないことです。

例えば、配信者が1Mbpsで映像を配信したとしても、視聴者の1人が500kbpsしか帯域がない場合は映像が見れなくなります。なので、普通にやるとSFUの制御でが一番状況の悪い人に合わせざるおえなくなってしまいます。

対策

これの解決手法としては、SImulcastになります。配信者が複数画質の映像をSFUに送りSFUは視聴者に最適な映像を送ることで視聴者は配信者よりも帯域が少ない場合でも視聴可能になります。SFUのSimulcastはHLSやMPEG-DASHというアダプティブビットレートをサーバー無変換で実現する技術と言えます。

MultiStream(MultiTrack)

複数の映像音声を一本のPeerConnectionに入れることが可能です。(P2Pの場合はstreamごとにPeerを作る必要があります。)、すでに貼られているコネクションにメディアを追加するので接続処理が不要になります。

Simulcastとは?

複数の画質の映像を送る仕組みです。(複数の画質を同時に圧縮しているとも言えます。)

P2Pで利用されるものではなくSFU向けの機能になります。

2〜4本の映像を同時に送ることが可能なのでハードウェアエンコーダーでも同時に処理する必要があります。

Simulcastのメリット

WebRTCのSFUでよく扱われている技術です。

SFUでは映像変換を行わないのでどうしても複数人が繋いでいる場合は一番帯域が低い人に合わせないといけなかったのですが、Simulcastを使えば配信者は複数の画質の映像を送ることができるので受信者に適した画質の映像を送ることが可能になります。

問題点

一般的なハードウェアエンコーダーは2本しか映像を圧縮できないです。なので実質的に3本以上の映像を送ることができません。

Chrome

M75ではSDPを書き換えることなくSimulcastが利用可能になった。

SFUのOSS

mediasoup

C++、JavaScript(Node.js)で書かれている。ロジックはJSでかけるし、実績も豊富。SFU特化なので便利機能はない。DataChannelにも対応しています。

PornHubのビデオチャットで利用されています。

Janus Gateway

ロジック部分はLuaで書ける。色々なことができるので複雑な作り込みが必要な場合はこれを選ぶ。TwitterのSpacesで利用されています。

Jitsi

Atlassianが買収したが、8x8に売却されました。ロジックはJavaとJNIなので大変。会議サービスを実現したい場合は、便利機能がたくさんあるのでおすすめ。

Pion

Goで書かれている。まだ開発中だが、スケールする箇所までしっかりと作り込まれている。

どれを選んだらいいの?

様々な機能があり多くの場所で利用されているので、Janusを推している人がいる。

スポンサーリンク
  • 2021 12.26
  • miyabisan2
  • コメントを書く
  • WebRTC
  • Tweets Twitter
  • LINEで送る

関連記事

  1. 2021 12.28

    【WebRTC】「coTurn」の構築手順1

  2. 2021 12.22

    【WebRTC】「STUNサーバー」について

  3. 2021 12.19

    【WebRTC】「ICEサーバー」について

  4. 2021 12.19

    【WebRTC】「シグナリングサーバ」、「SDP」について

  5. 2021 12.18

    【WebRTC】各ブラウザによる挙動の違い(マイクカメラ実装など)

  6. 2021 12.19

    【WebRTC】「MediaStream」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【WebRTC】「peer.js」について

【WebRTC】「TURNサーバー」構築のポイント、転…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • WebRTC
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー