Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active August 6, 2023 21:42
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voluntas/5ef396fe64c06f9563243e034c9eafd7 to your computer and use it in GitHub Desktop.
Save voluntas/5ef396fe64c06f9563243e034c9eafd7 to your computer and use it in GitHub Desktop.
WebRTC 超低遅延配信ノススメ

WebRTC 超低遅延配信ノススメ

日時

2018-08-08

作者

@voluntas

バージョン

18.08.0

url

https://sora.shiguredo.jp/

この記事が良いと思ったらこの記事に Star を是非

これは時雨堂が開発/販売する WebRTC SFU Sora の広告記事です

depth

3

概要

超低遅延配信技術の一つとして WebRTC に興味を持つ人が増えてきました。ただ今まで RTMP や HLS といった配信技術を利用している人にとっては WebRTC は会議システムとして利用する技術だったり、P2P で小さな世界で配信する技術という認識が多いようです。

そこでこの資料では WebRTC を利用した超低遅延配信について説明していきます。

WebRTCとは?

WebRTC というのは Chrome や Firefox といったブラウザに搭載されている技術の一つです。サーバを介さずブラウザ同士で直接データをやり取りを実現する技術です。

やり取りできるデータは音声や映像、または JavaScript の ArrayBuffer や Blob といったバイナリ や String といった文字列です。

WebRTC はリアルタイムコミュニケーションのやりとりで双方向でのコミュニケーションを実現できるようにするため、超低遅延でやり取りを行うことが可能です。

たとえば、映像や音声はテレビ電話をイメージしてください。これらのデータが 1 秒遅延するととても違和感を感じるます、少し待たされながら会話を実現することになるからです。WebRTC はそのため、超低遅延を実現しています。200-500 ミリ秒の遅延で音声や映像を双方向でやり取りすることが可能になっています。

さらに、音声や映像だけでなく先ほど説明したバイナリや文字列も超低遅延でやり取りが可能です。

つまり WebRTC はブラウザ同士で音声や映像、バイナリや文字列を超低遅延でやり取りすることができる技術です。

ブラウザ同士での WebRTC の限界

WebRTC は直接ブラウザ同士でやり取りするため超低遅延でやりとりできる、というのは理解いただけかと思います。

ただ、 1 つブラウザから 100 のブラウザに映像や音声などを配信するのは現実的ではありません。ブラウザ対ブラウザであれば、良いのですが、 1 つのブラウザが多くのブラウザに配信する場合にはとても多くの帯域や CPU を利用することになります。これは現実的でありません。

つまり、ブラウザ同士でのやり取りでは超低遅延配信を実現するのは不可能です。

サーバ経由での WebRTC の登場

ブラウザ同士の問題を解決するために登場するのがサーバ経由での WebRTC です。つまりブラウザとブラウザの間にサーバが入り、そのサーバが配信ブラウザから音声や映像を受け取り 100 の視聴ブラウザに配信を行うという仕組みです。

この仕組を利用すれば配信するブラウザはサーバにだけ配信すれば良くなります。そうすることで、サーバが配信するブラウザの代わりに 100 ブラウザに配信することが可能になります。

つまりサーバ経由配信の WebRTC を利用すれば超低遅延配信が現実的になります。

WebRTC SFU の登場

WebRTC サーバの 1 つである SFU (Selective Forwarding Unit) という仕組みが超低遅延配信を実現します。

配信ブラウザの代わりに代理で視聴ブラウザに映像や音声などを配信する仕組みです。これを利用することで、数百という視聴ブラウザへ配信することが可能になります。

Mixer

Mixer | Interactive Livestreaming

超低遅延配信を実際に運用しているので有名なのがマイクロソフトの配信サービスである Mixer です。もともとは Beam というサービスでした。このサービスほとんどの配信で WebRTC SFU を利用しています。SFU はオープンソースの Janus を利用しています。

さらに mixer は FTL (Faster Than Light streaming protocol) – Mixer と呼ばれるプロトコルを配信側に用意しています。

Co-Stream

Mixer は WebRTC を利用して超低遅延での配信を実現するとともに、 Co-Stream と呼ばれる 4 人同時配信も実現しています。これは WebRTC で 4 人双方向で音声や映像を共有し、さらにそれら 4 人の音声や映像を配信するという仕組みです。

Co-Stream FAQ – Mixer

この仕組を実現している配信サービスはとても少ないです。

日本国内では pixiv Sketch - お絵かきコミュニケーションアプリ が実現しています。ただしこれは WebRTC だけではなく HLS も利用しているため、超低遅延ではありません。遅延は 10 秒程度あります。

ブラウザ以外へ

WebRTC はブラウザ特有の技術ではありません。ブラウザ以外には iOS や Android だけでなく Windows や macOS で利用可能です。

超低遅延配信の実現

WebRTC を利用することで実現可能です。 WebRTC は音声や映像などをクライアント同士が直接やり取りする技術ですが、それをうまくサーバを経由して利用することで一定規模の超低遅延配信が可能になります。

超低遅延大規模配信の実現

1 台のサーバが実現できる配信数には限界があります。そのため Origin/Edge 方式で Origin サーバが複数の Edge に配信するという多段配信を実現することで超低遅延での大規模配信を実現可能になります。

実際 Mixer で利用されている Janus もその方式を模索しているようです。

WebRTC オンライン専用コミュニティ

Discord に webrtc-jp というサーバを立てたました。 WebRTC の情報共有がメインですが、最近はコーデック周りの話なども出てきています。

WebRTC オンライン専用コミュニティ

広告

WebRTC SFU Sora

WebRTC SFU Sora

時雨堂が開発している商用の WebRTC SFU です。価格は 100 接続で年間利用料ライセンス 60 万円です。毎年かかります。製品のサポート料金込みです。多くの実績があります。

複数人数での会議や、 数百人への配信、一対一の面談など様々な用途に利用可能です。

パッケージで提供しますので、自社で運用が可能です。 AWS だろうが GCP だろうが、オンプレだろうがなんでもどうぞ。 サーバさえあれば起動までは 10 分です。デモ機能が内蔵しているので動かすまで 15 分でいけます。

  • とにかく 落ちないこと を目的に作っています
  • とにかく 繋がること を目的に作っています
  • とにかく 手間がかからないこと を目的に作っています
  • 最新ブラウザのアップデートに追従しています
  • シグナリングサーバ内蔵ですので別途立てる必要はありません
  • TURN サーバ内蔵ですので別途立てる必要ありません
  • 日本語によるサポート対応しています
  • フルスクラッチ自前実装なのですべて把握しています
  • 1:1、1:N、複数人会議、録画あります
  • 直近で音声を発した N 人のクライアントだけの音声や映像のみを配信するスポットライト機能を搭載しています
  • Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
  • Apache 2.0 ライセンスで JavaScript と iOS と Android のクライアント SDK を公開しています
  • 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です
    • 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます

時間をお金で買いませんか?

興味のある方は sora at shiguredo.jp までお問い合わせください。

気軽に参加頂けるセミナーも定期的に開催していく予定ですので、興味ある方は是非。

第1回 WebRTC SFU Sora セミナー

紹介や検討資料も公開しております。

WebRTC SFU 今後

現在は音声と映像のみの配信に限定していますが、2018 年内にはバイナリや文字列も配信可能になる予定です。また、Origin/Edge の多段配信を実現することで最大 3000 ユーザまでの配信を実現を可能にする予定です。

今後は超低遅延で大規模な配信を実現できるように開発を進めていきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment