Skip to content

Instantly share code, notes, and snippets.

@NathanJargon
Forked from voluntas/webrtc.rst
Created April 5, 2024 03:03
Show Gist options
  • Select an option

  • Save NathanJargon/ae9ec3050c593c0c90525725d4543e3c to your computer and use it in GitHub Desktop.

Select an option

Save NathanJargon/ae9ec3050c593c0c90525725d4543e3c to your computer and use it in GitHub Desktop.

Revisions

  1. @voluntas voluntas revised this gist Oct 4, 2023. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2023-04-16
    :更新: 2023-10-04
    :作者: @voluntas
    :バージョン: 2023.1
    :バージョン: 2023.2
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -539,7 +539,7 @@ TURN サーバは **暗号化された状態のまま** データをリレーす

    実はすごく複雑なため簡単な回答が出来ない。基本的なものは互換性があるが、それ以外は非互換なものは少なくない。

    興味がある人は `WebRTC 1.0 Interoperability Tests Results <https://w3c.github.io/webrtc-interop-reports/webrtc-pc-report.html`_ を見てみるとよい。
    興味がある人は `WebRTC 1.0 Interoperability Tests Results <https://w3c.github.io/webrtc-interop-reports/webrtc-pc-report.html>`_ を見てみるとよい。

    高画質で配信したい
    ------------------
    @@ -905,3 +905,4 @@ Sora Labo
    - 認証ログを確認できます
    - 統計情報を確認できます


  2. @voluntas voluntas revised this gist Apr 16, 2023. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -211,7 +211,7 @@ https://github.com/obsproject/obs-studio/pull/7926

    OSB と組み合わせるとこんなことが実現出来る。

    .. image:: https://i.gyazo.com/dc6775976a74a236856ed2e045c02781.gif
    https://gyazo.com/dc6775976a74a236856ed2e045c02781

    .. _WHIP: https://datatracker.ietf.org/doc/html/draft-ietf-wish-whip-08
    .. _WHEP: https://datatracker.ietf.org/doc/html/draft-murillo-whep-02
  3. @voluntas voluntas revised this gist Apr 16, 2023. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -35,7 +35,7 @@ WebRTC スタックは暗号ライブラリの利用している部分以外は
    間違いや質問について
    ------------------------

    この Gist へのコメントではなく @voluntas まで DM を飛ばして欲しい。
    この Gist へのコメントではなく Twitter で @voluntas まで DM を飛ばして欲しい。

    目的
    ====
    @@ -211,7 +211,7 @@ https://github.com/obsproject/obs-studio/pull/7926

    OSB と組み合わせるとこんなことが実現出来る。

    [![Image from Gyazo](https://i.gyazo.com/dc6775976a74a236856ed2e045c02781.gif)](https://gyazo.com/dc6775976a74a236856ed2e045c02781)
    .. image:: https://i.gyazo.com/dc6775976a74a236856ed2e045c02781.gif

    .. _WHIP: https://datatracker.ietf.org/doc/html/draft-ietf-wish-whip-08
    .. _WHEP: https://datatracker.ietf.org/doc/html/draft-murillo-whep-02
  4. @voluntas voluntas revised this gist Apr 16, 2023. 1 changed file with 56 additions and 16 deletions.
    72 changes: 56 additions & 16 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2022-12-01
    :更新: 2023-04-16
    :作者: @voluntas
    :バージョン: 2022.3
    :バージョン: 2023.1
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -15,7 +15,7 @@ WebRTC コトハジメ
    著者
    ====

    `株式会社時雨堂 <https://shiguredo.jp>`_ で 多くの商用環境で利用されている WebRTC SFU を 1 から設計/開発/販売している。
    `株式会社時雨堂 <https://shiguredo.jp>`_ で 多くの商用環境で利用されている `WebRTC SFU Sora <https://sora.shiguredo.jp>`_ を 1 から設計/開発/販売している。
    WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。

    著者が書いた資料
    @@ -136,24 +136,30 @@ RTP はとても古いプロトコルであるが、かなり拡張されてお
    データチャネル
    --------------

    データチャネルは SCTP をベースとしたプロトコルで、テキストデータまたはバイナリデータを扱うことが出来る。
    データチャネルは `SCTP <https://datatracker.ietf.org/doc/html/rfc9260>`_ をベースとしたプロトコルで、テキストデータまたはバイナリデータを扱うことが出来る。
    そのため映像や音声も取り扱える。むしろ何でもよい。

    データチャネルは再送回数や再送時間を指定したり、順番保証を指定したりと TCP のようにも、UDP のようにも利用できる。
    かつ通信はデータグラム向けの TLS である `DTLS 1.2 <https://datatracker.ietf.org/doc/html/rfc6347>`_ で暗号化されている。

    SCTP は TCP と UDP のいいところ取りをしたプロトコルだと思ってもらってよい。
    SCTP (2000-) もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP over DTLS over UDP という多重構造になっている。
    SCTP (2000-) もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP をうまく取り扱えないルーターなどを考慮し、
    SCTP over DTLS over UDP という多重構造になっている。

    分散ファイル共有系だと `WebTorrent - Streaming browser torrent client <https://webtorrent.io/>`_ が WebRTC データチャネルを利用している。

    CDN 系だと `Peer5 - The Serverless P2P CDN For Video Live Streaming <https://www.peer5.com/>`_ や、
    CDN 系だとマイクロソフトに買収された `Peer5 - The Serverless P2P CDN For Video Live Streaming <https://www.peer5.com/>`_ や、
    `Streamroot | Distributed Network Architecture for OTT Video Delivery <https://www.streamroot.io/>`_ がサーバレス CDN を提供している。

    CDN といっても今回紹介した P2P CDN は全て **動画配信** を前提としている。HLS や MPEG-DASH の配信を CDN と P2P で補完していくという仕組みだ。

    また P2P でデータをリアルタイムにやり取りできるという強みから、
    ロボットへの組み込みなどでも利用される事例もでてきている。

    ブラウザで暗号化されている状態で HoL Blocking を避けて通信する技術としては秀逸だが、残念ながら SCTP 自体が複雑すぎるため、
    このあたりは今後 WebTransport over HTTP/3 に置き換わっていくと思われる。ただ WebTransport 自体が HTTP/3 上に構築されており、
    複雑化していることもあり、単純に QUIC だけで使われるパターンもでてくるだろう。

    シグナリング
    ============

    @@ -169,7 +175,8 @@ WebRTC では定義されていないため、ここでは大まかに定義す

    - 通信しようとする相手の IP アドレスの解決

    - 相手の名前から IP アドレスを取得するなど。つまりこれから通話する相手の IP アドレスを取得することができるようになる仕組み
    - 相手の名前から IP アドレスを取得するなど。
    つまりこれから通話する相手の IP アドレスを取得することができるようになる仕組み
    - 相手がその通信を許可するかどうか

    - そもそも誰にでも繋がってはいけないので、拒否されているかどうかを判断する仕組み
    @@ -186,6 +193,29 @@ WebRTC では定義されていないため、ここでは大まかに定義す
    シグナリングは本来はセッションの終了まで管理すべきであろう。
    このあたりは WebRTC では **仕様が決められていない** ため、実装側に任されている。

    WHIP と WHEP
    -------------------------

    シグナリングの規格が存在しないのはサーバー設計側としては自由で大変良いのだが、
    配信ツールなどで扱う場合はどのシグナリング規格を採用すればいいのかわからない、
    そのため WHIP_ と WHEP_ という規格の策定が進んでいる。

    - WHIP は WebRTC-HTTP ingestion protocol の略で、 WebRTC 配信側のシグナリング規格
    - WHEP は WebRTC-HTTP Egress Protocol の略で、WebRTC 視聴側のシグナリング規格

    仕様はとてもシンプルで SDP のやりとりを HTTP POST で Offer を投げて 201 Crated で Answer を返すというものだ。

    仕様はまだまだ途中だが、 `OBS Studio <https://obsproject.com/ja>`_ にはすでに WHIP 対応実装が始まっている。

    https://github.com/obsproject/obs-studio/pull/7926

    OSB と組み合わせるとこんなことが実現出来る。

    [![Image from Gyazo](https://i.gyazo.com/dc6775976a74a236856ed2e045c02781.gif)](https://gyazo.com/dc6775976a74a236856ed2e045c02781)

    .. _WHIP: https://datatracker.ietf.org/doc/html/draft-ietf-wish-whip-08
    .. _WHEP: https://datatracker.ietf.org/doc/html/draft-murillo-whep-02

    MCU と SFU
    ==========

    @@ -208,6 +238,7 @@ MCU (Multipoint Control Unit)
    100 人が参加する会議があったとしても、サーバで 1 つに合成される。

    良いことだらけだが、合成するためサーバ側のリソースを恐ろしく使うため、最近は MCU から SFU が主軸になっていっている。
    現実問題 MCU を採用しているサービスはほとんど存在しない。

    また End to End Encryption (E2EE) が MCU では実現できないという問題もある。

    @@ -224,7 +255,7 @@ SFU は MCU だと CPU リソースを使われてしまうことから考え出

    P2P の場合のフルメッシュと MCU の間の技術でバランスが良い事もあり WebRTC でクライアント・サーバモデルの場合は SFU が選択されることが多い。

    SFU の場合は E2EE が採用できる。実際 Google Duo や FaceTime for Web は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。
    SFU の場合は E2EE が採用できる。実際 Google Meet や FaceTime for Web は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。

    SFU なのか MCU なのか
    ------------------------
    @@ -342,7 +373,8 @@ macOS Safari でも iOS Safari でも動作する。
    Edge では動作するのか?
    ---------------------------

    動作する。
    Chromium ベースになったこともあり、動作する。
    ただしコーデックの AV1 など、一部機能は利用できない。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -422,6 +454,9 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい
    - 再送を独自で行いたいから

    - NACK (Negative ACKnowledgement)
    - 再送を行いたくないから

    - 音声は再送するより `FEC <https://blog.mozilla.org/webrtc/audio-fec-experiments/>`_ や `RED <https://webrtchacks.com/red-improving-audio-quality-with-redundancy/>`_ などで解決した方が良い

    基本的にはこの 2 点。

    @@ -431,7 +466,7 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい
    ビットレートを下げることで実現は可能。
    WebRTC では帯域推定と呼ばれる機能を利用して、低回線の場合は解像度を自動で下げて、ビットレートを抑える仕組みが入っている。

    ちなみに 50 kbps でも映像は配信可能。
    ちなみに 50 kbps でも映像は配信可能。音声であれば `Google の Lyra <https://github.com/google/lyra>`_ を使うなどすれば帯域が弱い回線でも利用できる。

    WebRTC は難しいという話をよく聞くが実際どうなのか
    -------------------------------------------------
    @@ -491,7 +526,7 @@ XMPP も使われたりする。オリジナルの場合もあり、
    DTLS の証明書検証はどう行われているのか
    ---------------------------------------

    シグナリングを利用して交換する SDP の中身の a=fingerprint に書いてあるフィンガープリントの値を利用した仕組みを使っている。
    シグナリングを利用して交換する SDP の中身の ``a=fingerprint`` に書いてあるフィンガープリントの値を利用した仕組みを使っている。
    DTLS の証明書検証時にこの fingerprint の値と送られてきた証明書を検証している。

    TURN サーバで通信を見られてしまうのではないか
    @@ -515,7 +550,7 @@ TURN サーバは **暗号化された状態のまま** データをリレーす
    - VP9 を利用すれば 1500 kbps 程度でフル HD で、30 fps な映像が配信可能
    - AV1 を利用すれば 1000 kbps 程度でフル HD で、30 fps な映像が配信可能

    4K@30 を配信したいのであれば、15 Mbps 程度は必要。
    H.264 で 4K@30 を配信したいのであれば、15 Mbps 程度は必要。

    音声が聞こえにくい
    ------------------
    @@ -543,6 +578,10 @@ getDisplayMedia を利用することで利用可能。
    WebRTC の技術を勉強したい
    -------------------------

    まずは以下を読んでもらいたい。

    `はじめに | 好奇心旺盛な人のためのWebRTC <https://webrtcforthecurious.com/ja/>`_

    API の勉強であれば W3C を見てもらうのが早い、ただブラウザごとに実装が異なるので注意。

    `WebRTC 1.0: Real-time Communication Between Browsers <https://www.w3.org/TR/webrtc/>`_
    @@ -558,7 +597,7 @@ MDN もお勧めしておきたい。
    もう少し踏み込んだ情報が知りたい
    ------------------------------------

    今後の WebRTC について定期的に更新しているので見てもらえれば
    今後の WebRTC について不定期に更新しているので見てもらえれば

    `WebRTC の未来 <https://gist.github.com/voluntas/59a135343538c290e515>`_

    @@ -579,7 +618,7 @@ YouTube が専用のツール不要で Chrome からすぐに配信可能にな
    AV1 は WebRTC で利用可能なのか
    -----------------------------------------------

    利用可能。すでに Chrome Canary M90 から利用できるようになっている。
    利用可能。すでに Chrome Canary M90 から利用できるようになっている。遅延も特に H.264 や VP9 と変わらない。

    `AV1 Encoder - Chrome Platform Status <https://www.chromestatus.com/feature/6206321818861568>`_

    @@ -744,17 +783,18 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - 1:1 の双方向に対応しています
    - 1:1000 の片方向に対応しています
    - 3:1000 といった配信者が複数の片方向にも対応しています
    - 4K 30fps の配信も可能です
    - 4K 30fps や 1080p 60fps の配信も可能です
    - スポットライトという機能を利用することで 200 人以上の会議に対応しています
    - 録画機能があります
    - Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
    - Apache 2.0 ライセンスで JavaScript と iOS と Android 、Unity 、C++ のクライアント SDK を公開しています
    - Apache 2.0 ライセンスで JavaScript と iOS と Android 、Unity 、C++ 、 Flutter のクライアント SDK を公開しています

    - https://github.com/shiguredo/sora-js-sdk
    - https://github.com/shiguredo/sora-ios-sdk
    - https://github.com/shiguredo/sora-android-sdk
    - https://github.com/shiguredo/sora-unity-sdk
    - https://github.com/shiguredo/sora-cpp-sdk
    - https://github.com/shiguredo/sora-flutter-sdk
    - 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です

    - 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます
  5. @voluntas voluntas revised this gist Dec 1, 2022. 1 changed file with 8 additions and 8 deletions.
    16 changes: 8 additions & 8 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2022-08-13
    :更新: 2022-12-01
    :作者: @voluntas
    :バージョン: 2022.2
    :バージョン: 2022.3
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -775,18 +775,18 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - `WebRTC SFU Sora の紹介 <https://gist.github.com/voluntas/5f3cf1049ee2710401e8bc3ecde4613e>`_
    - `WebRTC SFU Sora 検討資料 <https://gist.github.com/voluntas/171ac9ee2ea6377586876602a41decff>`_

    Sora as a Service Tobi
    Sora Cloud
    ---------------------------

    `Sora as a Service Tobi <https://tobi.shiguredo.jp>`_
    `Sora Cloud <https://sora-cloud.shiguredo.jp>`_

    商用の WebRTC SFU である Sora の SaaS (Software as a Service) 版です
    商用の WebRTC SFU である Sora のクラウド版です

    最大同時接続数 100 と最大利用帯域 1 Gbps まで利用可能です
    最大同時接続数 5000 と最大利用帯域 20 Gbps 程度まで利用可能です

    転送量や利用時間といった課金と Sora の運用から解放されるサービスです。
    転送量や利用時間といった課金体系や Sora の運用から解放されるサービスです。

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

    WebRTC Native Client Momo
    -------------------------
  6. @voluntas voluntas revised this gist Aug 13, 2022. 1 changed file with 6 additions and 7 deletions.
    13 changes: 6 additions & 7 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -748,18 +748,13 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - スポットライトという機能を利用することで 200 人以上の会議に対応しています
    - 録画機能があります
    - Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
    - Apache 2.0 ライセンスで JavaScript と iOS と Android 、Unity のクライアント SDK を公開しています
    - Apache 2.0 ライセンスで JavaScript と iOS と Android 、Unity 、C++ のクライアント SDK を公開しています

    - https://github.com/shiguredo/sora-js-sdk
    - https://github.com/shiguredo/sora-ios-sdk
    - https://github.com/shiguredo/sora-android-sdk
    - https://github.com/shiguredo/sora-unity-sdk
    - Apache 2.0 ライセンスで React Native 向け WebRTC ライブラリを公開しています

    - https://github.com/shiguredo/react-native-webrtc-kit
    - Sora と簡単に利用可能なサンプルも公開しています

    - https://github.com/shiguredo/react-native-webrtc-kit-samples
    - https://github.com/shiguredo/sora-cpp-sdk
    - 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です

    - 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます
    @@ -769,6 +764,9 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - Apache 2.0 ライセンスで Sora 専用録画合成ツールをオープンソースとして公開しています

    - `shiguredo/hisui: Recording Composition Tool Hisui <https://github.com/shiguredo/hisui>`_
    - Apache 2.0 ライセンスで Sora 専用統計収集ツールをオープンソースとして公開しています

    - `shiguredo/kohaku: WebRTC Stats Collector Kohaku <https://github.com/shiguredo/kohaku>`_

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

    @@ -866,3 +864,4 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  7. @voluntas voluntas revised this gist Aug 13, 2022. 1 changed file with 8 additions and 7 deletions.
    15 changes: 8 additions & 7 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2022-06-03
    :更新: 2022-08-13
    :作者: @voluntas
    :バージョン: 2022.1
    :バージョン: 2022.2
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -115,7 +115,7 @@ WebRTC を説明する際、チャネルの種類が曖昧に説明されてる
    WebRTC にはメディアチャネルとデータチャネルの二つがある。

    - 映像と音声のデータ通信方式がメディアチャネル
    - 好きなデータを放り込めるのがデータチャネル
    - 好きなデータをやりとりできるのがデータチャネル

    WebRTC とメディアチャネルが同一と表現されることが多いので要注意。

    @@ -136,7 +136,10 @@ RTP はとても古いプロトコルであるが、かなり拡張されてお
    データチャネル
    --------------

    データチャネルは SCTP をベースとしているため、映像や音声だって取り扱える。むしろ何でもよい。
    データチャネルは SCTP をベースとしたプロトコルで、テキストデータまたはバイナリデータを扱うことが出来る。
    そのため映像や音声も取り扱える。むしろ何でもよい。

    データチャネルは再送回数や再送時間を指定したり、順番保証を指定したりと TCP のようにも、UDP のようにも利用できる。

    SCTP は TCP と UDP のいいところ取りをしたプロトコルだと思ってもらってよい。
    SCTP (2000-) もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP over DTLS over UDP という多重構造になっている。
    @@ -576,7 +579,7 @@ YouTube が専用のツール不要で Chrome からすぐに配信可能にな
    AV1 は WebRTC で利用可能なのか
    -----------------------------------------------

    利用可能。すでに Chrome Canary M90 で利用できるようになっている
    利用可能。すでに Chrome Canary M90 から利用できるようになっている

    `AV1 Encoder - Chrome Platform Status <https://www.chromestatus.com/feature/6206321818861568>`_

    @@ -774,7 +777,6 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - `WebRTC SFU Sora の紹介 <https://gist.github.com/voluntas/5f3cf1049ee2710401e8bc3ecde4613e>`_
    - `WebRTC SFU Sora 検討資料 <https://gist.github.com/voluntas/171ac9ee2ea6377586876602a41decff>`_


    Sora as a Service Tobi
    ---------------------------

    @@ -864,4 +866,3 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  8. @voluntas voluntas revised this gist Jun 3, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -778,7 +778,7 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    Sora as a Service Tobi
    ---------------------------

    `Sora as a Service <https://tobi.shiguredo.jp>`_
    `Sora as a Service Tobi <https://tobi.shiguredo.jp>`_

    商用の WebRTC SFU である Sora の SaaS (Software as a Service) 版です。

  9. @voluntas voluntas revised this gist Jun 3, 2022. 1 changed file with 16 additions and 1 deletion.
    17 changes: 16 additions & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@
    WebRTC コトハジメ
    #############################

    :更新: 2022-03-18
    :更新: 2022-06-03
    :作者: @voluntas
    :バージョン: 2022.1
    :URL: https://voluntas.github.io/
    @@ -774,6 +774,20 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - `WebRTC SFU Sora の紹介 <https://gist.github.com/voluntas/5f3cf1049ee2710401e8bc3ecde4613e>`_
    - `WebRTC SFU Sora 検討資料 <https://gist.github.com/voluntas/171ac9ee2ea6377586876602a41decff>`_


    Sora as a Service Tobi
    ---------------------------

    `Sora as a Service <https://tobi.shiguredo.jp>`_

    商用の WebRTC SFU である Sora の SaaS (Software as a Service) 版です。

    最大同時接続数 100 と最大利用帯域 1 Gbps まで利用可能です。

    転送量や利用時間といった課金と Sora の運用から解放されるサービスです。

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

    WebRTC Native Client Momo
    -------------------------

    @@ -850,3 +864,4 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  10. @voluntas voluntas revised this gist Mar 18, 2022. 1 changed file with 6 additions and 8 deletions.
    14 changes: 6 additions & 8 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2021-07-24
    :更新: 2022-03-18
    :作者: @voluntas
    :バージョン: 2021.3
    :バージョン: 2022.1
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -35,7 +35,7 @@ WebRTC スタックは暗号ライブラリの利用している部分以外は
    間違いや質問について
    ------------------------

    この Gist へのコメントではなく @voluntas まで Twitter にてリプライを飛ばして欲しい
    この Gist へのコメントではなく @voluntas まで DM を飛ばして欲しい

    目的
    ====
    @@ -334,12 +334,12 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2021 年 7 月時点の最新版である Safari 14.1 はとても安定して動作する
    macOS Safari でも iOS Safari でも動作する

    Edge では動作するのか?
    ---------------------------

    2021 年 7 月時点の最新版である Edge 92 はとても安定して動作する
    動作する

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -835,14 +835,13 @@ Ayame を時雨堂がサービスとして提供しています。
    Sora Labo
    -------------------------------------

    `Sora Labo <https://sora-labo.shiguredo.jp/>`_
    `Sora Labo <https://sora-labo.shiguredo.app/>`_

    商用製品の WebRTC SFU Sora を時雨堂が検証目的で無料で使えるサービスを提供しています。

    - 無料で利用可能です
    - 商用目的では使えません
    - すぐに試せるサンプルも用意してあります
    - 法人、アカデミックでの利用は申請必須です
    - GitHub アカウントを持っていればすぐに利用できます
    - TURN の UDP / TCP / TLS を提供します
    - チャネルに認証をかけられます
    @@ -851,4 +850,3 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  11. @voluntas voluntas revised this gist Jul 24, 2021. 1 changed file with 68 additions and 38 deletions.
    106 changes: 68 additions & 38 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2021-05-02
    :更新: 2021-07-24
    :作者: @voluntas
    :バージョン: 2021.2
    :バージョン: 2021.3
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -15,7 +15,8 @@ WebRTC コトハジメ
    著者
    ====

    `株式会社時雨堂 <https://shiguredo.jp>`_ で 多くの商用環境で利用されている WebRTC SFU を 1 から設計/開発している。WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。
    `株式会社時雨堂 <https://shiguredo.jp>`_ で 多くの商用環境で利用されている WebRTC SFU を 1 から設計/開発/販売している。
    WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。

    著者が書いた資料
    ----------------
    @@ -49,9 +50,11 @@ WebRTC は闇が深く、変化が早い技術だ。そのため公開されて

    **ブラウザ同士でリアルタイムコミュニケーションを実現するための仕組み**

    WebRTC は P2P を利用したブラウザ同士を前提とした技術として作られている。もちろん、WebRTC 自体はプロトコルの組み合わせでしかないため、 P2P を使わなかったり、ブラウザ以外を使ったりすることもできる。
    WebRTC は P2P を利用したブラウザ同士を前提とした技術として作られている。
    もちろん、WebRTC 自体はプロトコルの組み合わせでしかないため、 P2P を使わなかったり、ブラウザ以外を使ったりすることもできる。

    WebRTC の通信プロトコルには TCP ではなく、 UDP が採用されている。これは音声や映像のデータを扱う以外にも、大量のデータを高速に送ることができるようにするためである。
    WebRTC の通信プロトコルには TCP ではなく、 UDP が採用されている。
    これは音声や映像のデータを扱う以外に、大量のデータを高速に送ることができるよう、再送を自前でコントロールできるようにするためである。

    通信はデフォルトで暗号化されており、データグラム向けの TLS である DTLS が採用されている。

    @@ -80,15 +83,16 @@ WebRTC は実はデバイス管理やスクリーンキャプチャという概
    これはリアルタイムなコミニュケーションにはマイクやカメラが必要なためである。
    カメラやマイクを使うにはデバイス認識、デバイス選択という機能が必要になる。これも WebRTC の一部だ。

    そしてそれらのデバイスから取得した音声や映像をそのまま送ると転送量が大変なことになってしまうため圧縮して送る技術が必要になる。これも WebRTC の一部だ。主にコーデックと呼ばれる技術だ。
    そしてそれらのデバイスから取得した音声や映像をそのまま送ると転送量が大変なことになってしまうため、
    圧縮して送る技術が必要になる。これも WebRTC の一部だ。主にコーデックと呼ばれる技術だ。

    さらに、コミニュケーションということは相手が存在するため、
    その相手と直接やり取りをするための P2P の技術が必要になる。これも WebRTC の一部だ。

    そして最後に、その相手との通信を実現する技術が必要になる。これも WebRTC の一部になる。

    WebRTC は沢山の技術の集合体と考えてもらって問題ない。
    それらをブラウザから簡単に使えるようにした仕組みが WebRTC API となる
    それらをブラウザから簡単に使えるようにした仕組みが WebRTC API である

    上記の複雑な仕組みを意識することなく、
    JavaScript を 100 行も書かずに実現できるようになっている。
    @@ -134,16 +138,18 @@ RTP はとても古いプロトコルであるが、かなり拡張されてお

    データチャネルは SCTP をベースとしているため、映像や音声だって取り扱える。むしろ何でもよい。

    SCTP は TCP と UDP のいいところ取りをしたプロトコルだと思ってもらってよい。SCTP もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP over DTLS over UDP という多重構造になっている。
    SCTP は TCP と UDP のいいところ取りをしたプロトコルだと思ってもらってよい。
    SCTP (2000-) もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP over DTLS over UDP という多重構造になっている。

    分散ファイル共有系だと `WebTorrent - Streaming browser torrent client <https://webtorrent.io/>`_ が WebRTC データチャネルを利用している。

    CDN 系だと `Peer5 - The Serverless P2P CDN For Video Live Streaming <https://www.peer5.com/>`_ や `Streamroot | Distributed Network Architecture for OTT Video Delivery <https://www.streamroot.io/>`_ がサーバレス CDN を提供している。
    CDN 系だと `Peer5 - The Serverless P2P CDN For Video Live Streaming <https://www.peer5.com/>`_ や、
    `Streamroot | Distributed Network Architecture for OTT Video Delivery <https://www.streamroot.io/>`_ がサーバレス CDN を提供している。

    CDN といっても今回紹介した P2P CDN は全て **動画配信** を前提としている。HLS や MPEG-DASH の配信を CDN と P2P で補完していくという仕組みだ。

    また P2P でデータをリアルタイムにやり取りできるという強みから、
    ロボットへの組み込みなどでも利用される事もでてきている
    ロボットへの組み込みなどでも利用される事例もでてきている

    シグナリング
    ============
    @@ -175,7 +181,7 @@ WebRTC では定義されていないため、ここでは大まかに定義す
    つまりセッションを確立する前に判断しなければいけないため、ブラウザ同士が直接やりとりすることができないからだ。

    シグナリングは本来はセッションの終了まで管理すべきであろう。
    このあたりは **仕様が決められていない** ため、実装側に任されている。
    このあたりは WebRTC では **仕様が決められていない** ため、実装側に任されている。

    MCU と SFU
    ==========
    @@ -206,7 +212,7 @@ SFU (Selective Forwarding Unit)
    -------------------------------

    SFU という単語が出てきたのはここ数年。ただ概念自体は前からある。
    以前だとメディアルーターと呼ばれていた。最近でも SFU と呼ばずメディアルーターと呼ぶ場合もある
    以前だとメディアルーターと呼ばれていた。最近でも SFU と呼ばずメディアルーターや SFM (Selective Forwarding Middlebox) と呼ぶ場合もある

    SFU は MCU だと CPU リソースを使われてしまうことから考え出された仕組みだ。

    @@ -215,12 +221,13 @@ SFU は MCU だと CPU リソースを使われてしまうことから考え出

    P2P の場合のフルメッシュと MCU の間の技術でバランスが良い事もあり WebRTC でクライアント・サーバモデルの場合は SFU が選択されることが多い。

    SFU の場合は E2EE が採用できる。実際 Google Duo は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。
    SFU の場合は E2EE が採用できる。実際 Google Duo や FaceTime for Web は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。

    SFU なのか MCU なのか
    ------------------------

    現時点ではほぼ SFU 一択となる。MCU の場合、高圧縮な映像技術を利用した場合の合成コストが高くなりすぎている。現時点の主要なサービスは SFU のような転送が主体なサーバを利用していると考えてよい。
    現時点ではほぼ SFU 一択となる。MCU の場合、高圧縮な映像技術を利用した場合の合成コストが高くなりすぎている。
    現時点の主要なサービスは SFU のような転送が主体なサーバを利用していると考えてよい。

    SFU の課題
    ------------------------
    @@ -245,7 +252,7 @@ SFU の課題
    使えるのか
    ----------

    すでに Chrome に搭載されてから 7 年以上が過ぎており、普通に安定して使える
    すでに WebRTC の登場から 10 年以上が経過しており普通に安定して使える
    むしろ既存の技術よりも新しい仕組みが多く取り入らられている。

    `Chromium Blog: Celebrating 10 years of WebM and WebRTC <https://blog.chromium.org/2020/05/celebrating-10-years-of-webm-and-webrtc.html>`_
    @@ -270,8 +277,10 @@ WebRTC という技術自体はとても良くできており、大変安定し
    - 最新ブラウザへの追従
    - 繋がらない人へのサポート対応

    主にこの2点。両方ともこちらで事前に予測は難しい。ブラウザへの追従はメーリングリストやコミットログを見ておいて実際に検証していく必要がある。
    つながらない人へのサポート対応は、ネットワーク環境などなど、いろいろなものに依存してしまうのでなんともいえない。実際に運用してノウハウをためるしかない。
    主にこの2点。両方ともこちらで事前に予測は難しい。
    ブラウザへの追従はメーリングリストやコミットログを見ておいて実際に検証していく必要がある。
    つながらない人へのサポート対応は、ネットワーク環境などなど、
    いろいろなものに依存してしまうのでなんともいえない。実際に運用してノウハウをためるしかない。

    基本的にクライアント側で頑張る必要があるので JavaScript が複雑になっていく。

    @@ -281,7 +290,7 @@ WebRTC という技術自体はとても良くできており、大変安定し
    どんな技術なのか
    ----------------

    WebRTC は映像や音声、そしてデータを **不安定な回線** でも超低遅延で送受信する仕組み
    WebRTC は映像や音声、そしてデータを **不安定な回線** でも超低遅延で安全に送受信する仕組み
    超低遅延というのはどのくらいかというと 200 ミリから 300 ミリ程度。

    人と人が映像や音声でやり取りする際に、違和感を感じなく話をすることができるようになると考えてもらって問題ない。
    @@ -312,7 +321,7 @@ WebRTC は映像や音声、そしてデータを **不安定な回線** でも
    - 暗号化が前提とされている
    - 最新の音声や映像の圧縮技術が採用されている
    - 最新の再送、輻輳制御技術が採用されている
    - ノイズキャンセラーやエコーキャンセラーが標準で搭載されている
    - 最新のノイズキャンセラーやエコーキャンセラーが標準で搭載されている
    - 日々改善されていっている

    また、いまや WebRTC はブラウザだけの技術ではない。
    @@ -325,12 +334,12 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2021 年 5 月時点の最新版である Safari 14.1 はとても安定して動作する。
    2021 年 7 月時点の最新版である Safari 14.1 はとても安定して動作する。

    Edge では動作するのか?
    ---------------------------

    2021 年 5 月時点の最新版である Edge 90 はとても安定して動作する。
    2021 年 7 月時点の最新版である Edge 92 はとても安定して動作する。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -384,14 +393,15 @@ WebRTC 残念ながら完全な P2P ではない。

    この辺りの 1 秒未満の遅延については超低遅延 (Sub-second latency) と呼ばれている。

    超低遅延、つまり 200-300 ミリ秒で双方のやり取りが可能になる。ただこれ勘違いをしてはいけないのは WebRTC 以外でも実現可能。 WebSocket を利用したとしても 200-300 ミリでのやり取りは可能。
    超低遅延、つまり 200-300 ミリ秒で双方のやり取りが可能になる。
    ただこれ勘違いをしてはいけないのは WebRTC 以外でも実現可能。 WebSocket を利用したとしても 200-300 ミリでのやり取りは可能。

    WebRTC と WebSocket の大きな違いは UDP か TCP か。
    つまり WebRTC では再送や輻輳の制御を独自に行なっている。
    WebSocket では TCP に乗っかっているので TCP お任せ。

    そのため不安定な回線で大きな差がでる。
    WebSocket を利用した場合、回線が不安定になったら HoL ブロッキング (Head-of-line blocking) が発生する。
    WebSocket を利用した場合、回線が不安定になったらヘッドオブラインブロッキング (Head-of-line blocking) が発生する。

    WebRTC の場合は発生しない。そのため音声や映像、データの遅延が発生しにくくなる。
    WebRTC では音声や映像に特化した再送や輻輳制御を行っているため。
    @@ -418,7 +428,7 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい
    ビットレートを下げることで実現は可能。
    WebRTC では帯域推定と呼ばれる機能を利用して、低回線の場合は解像度を自動で下げて、ビットレートを抑える仕組みが入っている。

    ちなみに 50kbps でも映像は配信可能。
    ちなみに 50 kbps でも映像は配信可能。

    WebRTC は難しいという話をよく聞くが実際どうなのか
    -------------------------------------------------
    @@ -442,35 +452,38 @@ WebRTC を使うためには TURN サーバは必要なのか
    特になくてもよい。ただし特定のネットワーク環境では P2P で通信ができないため、接続確率を上げるためには TURN サーバは必要だ。
    実際繫がらないを減らすためには TURN サーバは必須。

    80 % は TURN が無くても繋がり、 10 % は TURN-UDP があれば繋がり、のこり 10 % は TURN-TCP と TURN-TLS があれば繋がるという話がある。
    80 % は TURN が無くても繋がり、10 % は TURN-UDP があれば繋がり、のこり 10 % は TURN-TCP と TURN-TLS があれば繋がるという話がある。

    TURN-TCP や TURN-TLS とはなんなのか
    -----------------------------------

    通常の UDP で繋がらず、TURN の UDP が繋がらないときに TURN の TCP 、
    そして TURN の TCP が繋がらないときに TURN の TLS にフォールバックしていく仕組み。

    TURN-TLS までフォールバックしてつながらない時は諦めるしか無い
    TURN-TLS までフォールバックしてつながらない時はそもそも諦めるしか無い

    シグナリングの仕組みは何でもいいのか
    ------------------------------------

    仕様として決められていないので何でもよい。
    よくあるのは WebSocket と JSON の組み合わせだが、 XMPP も使われたりする。オリジナルの場合もあり、様々なライブラリやサービスでのシグナリングの互換性はないと割り切って良い。

    よくあるのは WebSocket と JSON の組み合わせだが、
    XMPP も使われたりする。オリジナルの場合もあり、
    様々なライブラリやサービスでのシグナリングの互換性はないと割り切って良い。

    セッション確立後の通信は暗号化されているのか
    --------------------------------------------

    メディアチャネルであれば DTLS-SRTP で、データチャネルであれば DTLS によって暗号化される。

    - `Datagram Transport Layer Security - Wikipedia <https://ja.wikipedia.org/wiki/Datagram_Transport_Layer_Security>`_
    - `RFC 6347: Datagram Transport Layer Security Version 1.2 <https://www.rfc-editor.org/rfc/rfc6347.html>`_

    - データグラム向けの TLS とおぼえてもらえればいい。
    - `Secure Real-time Transport Protocol - Wikipedia <https://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol>`_
    - `RFC 3711: The Secure Real-time Transport Protocol (SRTP) <https://www.rfc-editor.org/rfc/rfc3711.html>`_

    - RTP というプロトコルのセキュア版と覚えてもらえばいい
    - RTP はリアルタイムプロトコルの略で音声や映像をリアルタイムにやり取りするプロトコルの1つ
    - `Real-time Transport Protocol - Wikipedia <https://ja.wikipedia.org/wiki/Real-time_Transport_Protocol>`_
    - `RFC 3550: RTP: A Transport Protocol for Real-Time Applications <https://www.rfc-editor.org/rfc/rfc3550.html>`_

    DTLS の証明書検証はどう行われているのか
    ---------------------------------------
    @@ -494,11 +507,12 @@ TURN サーバは **暗号化された状態のまま** データをリレーす
    ------------------

    多くの帯域があるネットワークと高性能なマシンが必要になる。
    ちなみに VP8 や H.264 でフル HD での配信は 2500kbps 程度あればいける。
    ちなみに VP8 や H.264 でフル HD での配信は 2500 kbps 程度あればいける。

    VP9 を利用すれば 1500kbps 程度でフル HD で、30fps な映像が配信可能。
    - VP9 を利用すれば 1500 kbps 程度でフル HD で、30 fps な映像が配信可能
    - AV1 を利用すれば 1000 kbps 程度でフル HD で、30 fps な映像が配信可能

    4K@30 を配信したいのであれば、 15Mbps 程度は必要。
    4K@30 を配信したいのであれば、15 Mbps 程度は必要。

    音声が聞こえにくい
    ------------------
    @@ -520,6 +534,9 @@ getDisplayMedia を利用することで利用可能。

    この機能は Chrome と Firefox と Edge と Safari 主要ブラウザの全てに搭載されており、利用することができる。

    ただしスクリーシェア機能はモバイル版のブラウザには搭載されていない。
    モバイルでスクリーンシェアを実現したい場合はネイティブアプリを開発する必要がある。

    WebRTC の技術を勉強したい
    -------------------------

    @@ -547,7 +564,8 @@ YouTube の WebRTC を使った仕組みについて知りたい

    YouTube が専用のツール不要で Chrome からすぐに配信可能になったが、あれは WebRTC と HLS/MPEG-DASH 技術の組み合わせだ。

    日本では `pixiv Sketch Live <https://sketch.pixiv.net/lives>`_ が実現している技術で、簡単に言うとブラウザからサーバに WebRTC で音声や映像を送り、サーバ側でリアルタイムに HLS/MPEG-DASH 形式に変換して配信する方式だ。
    日本では `pixiv Sketch Live <https://sketch.pixiv.net/lives>`_ が実現している技術で、
    簡単に言うとブラウザからサーバに WebRTC で音声や映像を送り、サーバ側でリアルタイムに HLS/MPEG-DASH 形式に変換して配信する方式だ。

    この技術を使うことで気軽な配信と大規模な配信の2つを実現できるようになる。今後とても注目される技術の1つだ。

    @@ -577,7 +595,8 @@ WebCodecs や WebTransport はどうなのか

    クライアント・サーバ経由の DataChannel の代わりとして WebTransport を利用するのは可能。
    ただし、MediaChannel の代わりは現時点では RTP/RTCP 部分を完全に自前で実現する必要があるため、体力のある企業限定。
    さらに、 2021 年 5 月の時点で WebTransport は TURN のように TCP / TLS へのフォールバックがまだ確定していない。

    WebTransport over HTTP/3 のフォールバックは WebTransport over HTTP/2 になった。

    WebRTC の仕組み自体はなくならず、そのまま継続すると考えてよい。あせって WebTransport を試す必要はない。

    @@ -592,6 +611,16 @@ WebRTC はどうも難しいというイメージを持たれていることが

    ここでは目的別の WebRTC の歩き方を書いていこうと思う。

    WebRTC を学びたい
    ----------------------------

    まずは以下の二つの資料を読むことをオススメしたい。

    - `WebRTC を今から学ぶ人に向けて <https://zenn.dev/voluntas/scraps/82b9e111f43ab3>`_
    - `はじめに | 好奇心旺盛な人のためのWebRTC <https://webrtcforthecurious.com/ja/>`_

    基本的な知識はこの二つで得られる。あとは手を動かしてみるだけだ。

    WebRTC に詳しくなりたい
    ---------------------------

    @@ -636,7 +665,7 @@ libwebrtc に詳しくなりたい

    `external/webrtc - Git at Google <https://chromium.googlesource.com/external/webrtc/>`_

    6 週間に一回ブランチが切られる、さらにブランチ自体も前に進む。
    4 週間に一回ブランチが切られる、さらにブランチ自体も前に進む。
    最新版に追従しなければいいのでは?と思うかもしれないが、そもそもブラウザが前に進んでいるのに追従しないという選択肢はない。

    WebRTC API を使えるようになりたい
    @@ -648,8 +677,8 @@ WebRTC API を使えるようになりたい
    サンプルを触ってみてさえすれば WebRTC API が何しているかどうかが学べる。
    基本的には以下の2つの API を理解すれば良くなる。

    - getUserMedia
    - RTCPeerConnection
    - `Media Capture and Streams <https://www.w3.org/TR/mediacapture-streams/>`_
    - `WebRTC 1.0: Real-Time Communication Between Browsers <https://www.w3.org/TR/webrtc/>`_

    このあたりはお作法で使えば良いので、とにかくサンプルを読むと良い。

    @@ -822,3 +851,4 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  12. @voluntas voluntas revised this gist May 2, 2021. 1 changed file with 16 additions and 9 deletions.
    25 changes: 16 additions & 9 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2021-02-13
    :更新: 2021-05-02
    :作者: @voluntas
    :バージョン: 2021.1
    :バージョン: 2021.2
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -153,10 +153,10 @@ WebRTC はよく P2P の技術と呼ばれるがこれは正しい。
    ただし、シグナリングと呼ばれる仕組みが必須になる。

    シグナリングというのはあまり聞き慣れない言葉だとおもうが、
    P2P でやり取りする前に必要な情報をサーバを経由してやり取りする仕組みだ。
    P2P でやり取りする前に必要な情報をサーバを経由してやり取りする仕組みだ。

    実はシグナリングにはいろいろな仕組みがあるのだが、
    WebRTC では定義されていないため、ここでは大まかに定義する。
    WebRTC では定義されていないため、ここでは大まかに定義する。

    - 通信しようとする相手の IP アドレスの解決

    @@ -325,12 +325,12 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2021 年 2 月時点の最新版である Safari 14 はとても安定して動作する。
    2021 年 5 月時点の最新版である Safari 14.1 はとても安定して動作する。

    Edge では動作するのか?
    ---------------------------

    2021 年 2 月時点の最新版である Edge 88 はとても安定して動作する。
    2021 年 5 月時点の最新版である Edge 90 はとても安定して動作する。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -572,6 +572,15 @@ WebRTC における E2EE について知りたい

    - `Sora E2EE ドキュメント <https://sora-e2ee.shiguredo.jp/>`_

    WebCodecs や WebTransport はどうなのか
    -----------------------------------------------

    クライアント・サーバ経由の DataChannel の代わりとして WebTransport を利用するのは可能。
    ただし、MediaChannel の代わりは現時点では RTP/RTCP 部分を完全に自前で実現する必要があるため、体力のある企業限定。
    さらに、 2021 年 5 月の時点で WebTransport は TURN のように TCP / TLS へのフォールバックがまだ確定していない。

    WebRTC の仕組み自体はなくならず、そのまま継続すると考えてよい。あせって WebTransport を試す必要はない。

    WebRTC の歩き方
    ===============

    @@ -679,7 +688,7 @@ WebRTC SFU Sora
    `WebRTC SFU Sora <https://sora.shiguredo.jp/>`_

    商用の WebRTC SFU です。価格は同時 100 接続でライセンス費用は 1 年で 84 万円です。
    3 ヶ月ライセンスも用意してあります。製品のサポート料金込みです。
    3 ヶ月や 6 ヶ月のライセンスも用意してあります。製品のサポート料金込みです。

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

    @@ -813,5 +822,3 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます


  13. @voluntas voluntas revised this gist Mar 18, 2021. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -28,7 +28,6 @@ WebRTC コトハジメ
    - `WebRTC SFU コトハジメ <https://gist.github.com/voluntas/4d2bd3e878965bdd747a>`_
    - `WebRTC SFU をフルスクラッチで作ってみた <https://gist.github.com/voluntas/7547c305ac7a8a9c62c1>`_
    - `リアルタイム動画配信コトハジメ <https://gist.github.com/voluntas/076fee77f30a0ca7a9b9>`_
    - `WebRTC スタックを一から実装する場合読んでおくべき資料まとめ <https://gist.github.com/voluntas/193ab447d387532a659d3ede9ab7678f>`_
    - `詳解 WebRTC <https://gist.github.com/voluntas/a9dc017ea85aea5ffb7db73af5c6b4f9>`_
    - `仕事で WebRTC <https://gist.github.com/voluntas/379e48807635ed18ebdbcedd5f3beefa>`_

  14. @voluntas voluntas revised this gist Feb 13, 2021. 1 changed file with 17 additions and 31 deletions.
    48 changes: 17 additions & 31 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-12-15
    :更新: 2021-02-13
    :作者: @voluntas
    :バージョン: 2020.10
    :バージョン: 2021.1
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -15,12 +15,12 @@ WebRTC コトハジメ
    著者
    ====

    `株式会社時雨堂 <https://shiguredo.jp>`_ で 1 から多くの商用環境で利用されている WebRTC SFU を開発している。
    WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。
    `株式会社時雨堂 <https://shiguredo.jp>`_ で 多くの商用環境で利用されている WebRTC SFU を 1 から設計/開発している。WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。

    著者が書いた資料
    ----------------

    - `WebRTC を今から学ぶ人に向けて <https://zenn.dev/voluntas/scraps/82b9e111f43ab3>`_
    - `WebRTCの裏側 <https://gist.github.com/voluntas/975bfa230e513d146965>`_
    - `WebRTC Conference Japan で話してきた <https://gist.github.com/voluntas/4bfce5ba4479bd25d4cd>`_
    - `WebRTC スタックコトハジメ <https://gist.github.com/voluntas/6fcece7f424607c957d5>`_
    @@ -62,8 +62,8 @@ NAT 越えをするためのプロトコルには STUN/TURN そしてそれら
    実際に NAT 越えを実現するためには STUN サーバや TURN サーバが必要となる。
    通常は TURN/STUN サーバとして 1 台で提供される。

    - `WebRTC 1.0: Real-Time Communication Between Browsers <https://www.w3.org/TR/webrtc/>`_
    - `WebRTC API - Web API | MDN <https://developer.mozilla.org/ja/docs/Web/API/WebRTC_API>`_
    - `WebRTC 1.0: Real-time Communication Between Browsers <http://w3c.github.io/webrtc-pc/>`_

    WebRTC という単語について
    =========================
    @@ -150,7 +150,8 @@ CDN といっても今回紹介した P2P CDN は全て **動画配信** を前
    ============

    WebRTC はよく P2P の技術と呼ばれるがこれは正しい。
    ブラウザ同士でデータのやりとりを実現することができる。ただし、シグナリングと呼ばれる仕組みが必須になる。
    ブラウザ同士でデータのやりとりを実現することができる。
    ただし、シグナリングと呼ばれる仕組みが必須になる。

    シグナリングというのはあまり聞き慣れない言葉だとおもうが、
    P2P でやり取りする前に必要な情報をサーバを経由してやり取りする仕組みだ。
    @@ -248,12 +249,14 @@ SFU の課題
    すでに Chrome に搭載されてから 7 年以上が過ぎており、普通に安定して使える。
    むしろ既存の技術よりも新しい仕組みが多く取り入らられている。

    `Chromium Blog: Celebrating 10 years of WebM and WebRTC <https://blog.chromium.org/2020/05/celebrating-10-years-of-webm-and-webrtc.html>`_

    不安定とか繋がらないとかはネットワークの問題がほとんどで、
    WebRTC という技術自体はとても良くできており、大変安定している。

    そして今でも進化し続けている
    2021 年 1 月に WebRTC が W3C と IETF 標準となった

    `Chromium Blog: Celebrating 10 years of WebM and WebRTC <https://blog.chromium.org/2020/05/celebrating-10-years-of-webm-and-webrtc.html>`_
    `WebRTC is now a W3C and IETF standard <https://web.dev/webrtc-standard-announcement/>`_

    仕事で使いたい
    --------------
    @@ -323,14 +326,12 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2020 年 12 月時点の最新版である Safari 14 はとても安定して動作する。

    ただし音声部分が iOS 14.2 でバグがあるので要注意。 iOS 14.3 で修正される予定。
    2021 年 2 月時点の最新版である Safari 14 はとても安定して動作する。

    Edge では動作するのか?
    ---------------------------

    202012 月時点の最新版である Edge 87 はとても安定して動作する。
    20212 月時点の最新版である Edge 88 はとても安定して動作する。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -490,23 +491,6 @@ TURN サーバは **暗号化された状態のまま** データをリレーす

    興味がある人は `WebRTC 1.0 Interoperability Tests Results <https://w3c.github.io/webrtc-interop-reports/webrtc-pc-report.html`_ を見てみるとよい。

    Chrome や Firefox や Edge や Safari 以外に対応するのか
    ------------------------------------------------------

    最後の大物である Safari が 11 にて対応した。
    iOS のモバイル Safari も対応している。ただし現在も WKWebView は getUserMedia に非対応なので注意してほしい。

    `Safari <https://webrtc.shiguredo.jp/safari.html>`_

    IE の対応予定はない。

    Edge の WebRTC 対応はどうなのか
    -------------------------------

    2020 年 11 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。

    `Edge <https://webrtc.shiguredo.jp/edge.html>`_

    高画質で配信したい
    ------------------

    @@ -575,9 +559,9 @@ YouTube が専用のツール不要で Chrome からすぐに配信可能にな
    AV1 は WebRTC で利用可能なのか
    -----------------------------------------------

    利用可能。すでに libwebrtc には実装されはじめている。ただしまだブラウザでは利用できない
    利用可能。すでに Chrome Canary M90 で利用できるようになっている

    `WebRTC Native Client Momo <https://github.com/shiguredo/momo>`_ では Momo 同士の AV1 送受信に対応しているので、興味あれば試してみてほしい。
    `AV1 Encoder - Chrome Platform Status <https://www.chromestatus.com/feature/6206321818861568>`_

    WebRTC における E2EE について知りたい
    ------------------------------------------------
    @@ -620,6 +604,7 @@ WebRTC API を理解したい場合は W3C を読むのが一番早い、
    ただブラウザごとに実装が異なるため、 MDN を参考にするのも良い。

    - `WebRTC 1.0: Real-time Communication Between Browsers <http://w3c.github.io/webrtc-pc/>`_
    - `Media Capture and Streams <https://www.w3.org/TR/mediacapture-streams/>`_
    - `WebRTC API - Web APIs | MDN <https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API>`_

    書籍であればまずは `O'Reilly Japan - ハイパフォーマンス ブラウザネットワーキング <https://www.oreilly.co.jp/books/9784873116761/>`_ の WebRTC を読むことをオススメしたい。
    @@ -830,3 +815,4 @@ Sora Labo
    - 認証ログを確認できます
    - 統計情報を確認できます


  15. @voluntas voluntas revised this gist Dec 15, 2020. 1 changed file with 4 additions and 10 deletions.
    14 changes: 4 additions & 10 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-12-06
    :更新: 2020-12-15
    :作者: @voluntas
    :バージョン: 2020.9
    :バージョン: 2020.10
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -28,8 +28,6 @@ WebRTC スタックは暗号ライブラリの利用している部分以外は
    - `WebRTC SFU コトハジメ <https://gist.github.com/voluntas/4d2bd3e878965bdd747a>`_
    - `WebRTC SFU をフルスクラッチで作ってみた <https://gist.github.com/voluntas/7547c305ac7a8a9c62c1>`_
    - `リアルタイム動画配信コトハジメ <https://gist.github.com/voluntas/076fee77f30a0ca7a9b9>`_
    - `Edge と WebRTC について <https://gist.github.com/voluntas/f174b402f91e63eb84368f929c2289bf>`_
    - `Safari と WebRTC について <https://gist.github.com/voluntas/af937c1fd353e6f677e155b53d661807>`_
    - `WebRTC スタックを一から実装する場合読んでおくべき資料まとめ <https://gist.github.com/voluntas/193ab447d387532a659d3ede9ab7678f>`_
    - `詳解 WebRTC <https://gist.github.com/voluntas/a9dc017ea85aea5ffb7db73af5c6b4f9>`_
    - `仕事で WebRTC <https://gist.github.com/voluntas/379e48807635ed18ebdbcedd5f3beefa>`_
    @@ -344,12 +342,7 @@ HLS や MPEG-DASH とどう違うのか
    iOS には Chrome や Firefox があるがそれでもダメなのか
    ---------------------------------------------------------

    iOS の Chrome や Firefox は WKWebView ベースなので、 getUserMedia 非対応。

    ちなみに SFSafariViewController は iOS 13 で getUserMedia に対応した。

    iOS 14.3 Beta で WKWebView での getUserMedia に対応したため、
    iOS 14.3 がリリースされれば WKWebView でも getUserMedia が利用可能になる。
    iOS 14.3 で WKWebView が getUserMedia に対応したため、 Chrome や Firefox でも動作するようになった。

    iOS や Android のアプリはどうやって開発すればいいのか
    ------------------------------------------------------
    @@ -836,3 +829,4 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます

  16. @voluntas voluntas revised this gist Dec 6, 2020. 1 changed file with 6 additions and 0 deletions.
    6 changes: 6 additions & 0 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -745,6 +745,12 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です

    - 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます
    - Apache 2.0 ライセンスで Sora 専用負荷試験ツールをオープンソースとして公開しています

    - `shiguredo/zakuro: WebRTC Load Testing Tool Zakuro <https://github.com/shiguredo/zakuro>`_
    - Apache 2.0 ライセンスで Sora 専用録画合成ツールをオープンソースとして公開しています

    - `shiguredo/hisui: Recording Composition Tool Hisui <https://github.com/shiguredo/hisui>`_

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

  17. @voluntas voluntas revised this gist Dec 6, 2020. 1 changed file with 28 additions and 8 deletions.
    36 changes: 28 additions & 8 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -219,6 +219,28 @@ P2P の場合のフルメッシュと MCU の間の技術でバランスが良

    SFU の場合は E2EE が採用できる。実際 Google Duo は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。

    SFU なのか MCU なのか
    ------------------------

    現時点ではほぼ SFU 一択となる。MCU の場合、高圧縮な映像技術を利用した場合の合成コストが高くなりすぎている。現時点の主要なサービスは SFU のような転送が主体なサーバを利用していると考えてよい。

    SFU の課題
    ------------------------

    よく言われる WebRTC SFU の課題をどう解決しているかをまとめておいたので参考にしてほしい。

    全員に同一ビットレートを配信する必要がある
    Simulcast や SVC を利用することで解決している

    大規模配信ができない
    多段 (Origin - Edge) にすることで解決している

    同時に多くのユーザを視聴できない
    話をしている人だけを高画質にするなどの負荷を下げる機能を独自に実装することで解決している

    録画ファイルが一つにならない
    録画合成の仕組みを別途用意することで解決している

    よくありそうな質問
    ==================

    @@ -560,7 +582,7 @@ YouTube が専用のツール不要で Chrome からすぐに配信可能にな
    AV1 は WebRTC で利用可能なのか
    -----------------------------------------------

    利用可能。すでに libwebrtc には実装されはじめている。
    利用可能。すでに libwebrtc には実装されはじめている。ただしまだブラウザでは利用できない。

    `WebRTC Native Client Momo <https://github.com/shiguredo/momo>`_ では Momo 同士の AV1 送受信に対応しているので、興味あれば試してみてほしい。

    @@ -569,7 +591,10 @@ WebRTC における E2EE について知りたい

    - P2P であればデフォルトで E2EE を利用している。
    - MCU は仕組み上利用できない
    - `Sora E2EE ドキュメント — Sora E2EE ドキュメント documentation <https://sora-e2ee.shiguredo.jp/>`_

    - 別途まとめているので参考にしてもらえれば

    - `Sora E2EE ドキュメント <https://sora-e2ee.shiguredo.jp/>`_

    WebRTC の歩き方
    ===============
    @@ -697,7 +722,7 @@ HTTPS が必須なのでその準備が必要ですがそれさえ対応でき
    - シグナリングサーバ内蔵ですので別途立てる必要はありません
    - TURN サーバ内蔵ですので別途立てる必要ありません
    - 日本語によるサポート対応しています
    - フルスクラッチ自前実装なのですべて把握しています
    - フルスクラッチによる自前実装なのですべて把握しています
    - 1:1 の双方向に対応しています
    - 1:1000 の片方向に対応しています
    - 3:1000 といった配信者が複数の片方向にも対応しています
    @@ -805,8 +830,3 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます





  18. @voluntas voluntas revised this gist Dec 6, 2020. 1 changed file with 25 additions and 18 deletions.
    43 changes: 25 additions & 18 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-11-08
    :更新: 2020-12-06
    :作者: @voluntas
    :バージョン: 2020.7
    :バージョン: 2020.9
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -303,12 +303,14 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2020 年 11 月時点の最新版である Safari 14 ではとても安定して動作する。
    2020 年 12 月時点の最新版である Safari 14 はとても安定して動作する。

    ただし音声部分が iOS 14.2 でバグがあるので要注意。 iOS 14.3 で修正される予定。

    Edge では動作するのか?
    ---------------------------

    2020 年 11 月時点の最新版である Edge 86 ではとても安定して動作する
    2020 年 12 月時点の最新版である Edge 87 はとても安定して動作する

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -324,20 +326,20 @@ iOS の Chrome や Firefox は WKWebView ベースなので、 getUserMedia 非

    ちなみに SFSafariViewController は iOS 13 で getUserMedia に対応した。

    iOS 14.3 Beta で WKWebView での getUserMedia に対応したため、
    iOS 14.3 がリリースされれば WKWebView でも getUserMedia が利用可能になる。

    iOS や Android のアプリはどうやって開発すればいいのか
    ------------------------------------------------------

    webrtc.org が提供してくれていた。今はアーカイブがあるのみ。

    - `Android | WebRTC <https://webrtc.github.io/webrtc-org/native-code/android/>`_
    - `iOS | WebRTC <https://webrtc.github.io/webrtc-org/native-code/ios/>`_
    一応ドキュメントは公開されている。ただ情報は少ない。

    Bintray や Cocoapod で最新版の libwebrtc ビルドを Google が提供している
    - `WebRTC iOS development <https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/ios/index.md>`_
    - `WebRTC Android development <https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/android/index.md>`_

    - `GoogleWebRTC on CocoaPods.org <https://cocoapods.org/pods/GoogleWebRTC>`_
    - `google-webrtc <https://bintray.com/google/webrtc/google-webrtc>`_
    以下は `時雨堂` の CTO が書いている解説書。定期的に更新されるため以下を買うのが一番よい。

    これらを上手く活用する事がおすすめだ。
    `WebRTC ネイティブライブラリガイド for iOS and Android <https://zenn.dev/szktty/books/libwebrtc-guide>`_

    WebRTC の P2P はどんな技術なのか
    -----------------------------------
    @@ -367,13 +369,15 @@ WebRTC 残念ながら完全な P2P ではない。

    この辺りの 1 秒未満の遅延については超低遅延 (Sub-second latency) と呼ばれている。

    超低遅延、つまり 200-300 ミリ秒で双方のやり取りが可能になる。ただこれ勘違いをしてはいけないのは WebRTC 以外でも実現可能。
    WebSocket を利用したとしても 200-300 ミリでのやり取りは可能。
    超低遅延、つまり 200-300 ミリ秒で双方のやり取りが可能になる。ただこれ勘違いをしてはいけないのは WebRTC 以外でも実現可能。 WebSocket を利用したとしても 200-300 ミリでのやり取りは可能。

    WebRTC と WebSocket の大きな違いは UDP か TCP か。
    つまり WebRTC では再送や輻輳の制御を独自に行なっている。 WebSocket では TCP に乗っかっているので TCP お任せ。
    つまり WebRTC では再送や輻輳の制御を独自に行なっている。
    WebSocket では TCP に乗っかっているので TCP お任せ。

    そのため不安定な回線で大きな差がでる。
    WebSocket を利用した場合、回線が不安定になったら HoL ブロッキング (Head-of-line blocking) が発生する。

    そのため不安定な回線で大きな差がでる。 WebSocket を利用した場合、回線が不安定になったら HoL ブロッキング (Head-of-line blocking) が発生する。
    WebRTC の場合は発生しない。そのため音声や映像、データの遅延が発生しにくくなる。
    WebRTC では音声や映像に特化した再送や輻輳制御を行っているため。

    @@ -391,7 +395,7 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい

    - NACK (Negative ACKnowledgement)

    基本的にはこの 2 点です
    基本的にはこの 2

    低回線で配信したい
    ------------------
    @@ -469,6 +473,8 @@ TURN サーバは **暗号化された状態のまま** データをリレーす

    実はすごく複雑なため簡単な回答が出来ない。基本的なものは互換性があるが、それ以外は非互換なものは少なくない。

    興味がある人は `WebRTC 1.0 Interoperability Tests Results <https://w3c.github.io/webrtc-interop-reports/webrtc-pc-report.html`_ を見てみるとよい。

    Chrome や Firefox や Edge や Safari 以外に対応するのか
    ------------------------------------------------------

    @@ -673,7 +679,7 @@ WebRTC SFU Sora
    商用の WebRTC SFU です。価格は同時 100 接続でライセンス費用は 1 年で 84 万円です。
    3 ヶ月ライセンスも用意してあります。製品のサポート料金込みです。

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

    パッケージで提供しますので、自社で運用が可能です。
    AWS だろうが GCP だろうが、オンプレだろうがなんでも好きな環境で動かすことができます。
    @@ -803,3 +809,4 @@ Sora Labo




  19. @voluntas voluntas revised this gist Nov 8, 2020. 1 changed file with 23 additions and 13 deletions.
    36 changes: 23 additions & 13 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-10-31
    :更新: 2020-11-08
    :作者: @voluntas
    :バージョン: 2020.6
    :バージョン: 2020.7
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -15,7 +15,7 @@ WebRTC コトハジメ
    著者
    ====

    `株式会社時雨堂 <https://shiguredo.jp>`_ で 1 から WebRTC SFU を開発している。
    `株式会社時雨堂 <https://shiguredo.jp>`_ で 1 から多くの商用環境で利用されている WebRTC SFU を開発している。
    WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装。

    著者が書いた資料
    @@ -303,12 +303,12 @@ iOS や Android だけでなく、組み込み製品にも利用が可能にな
    Safari では動作するのか?
    ---------------------------

    2020 年 7 月時点の最新版である Safari 13 ではとても安定して動作する。
    2020 年 11 月時点の最新版である Safari 14 ではとても安定して動作する。

    Edge では動作するのか?
    ---------------------------

    2020 年 7 月時点の最新版である Edge 83 ではとても安定して動作する。
    2020 年 11 月時点の最新版である Edge 86 ではとても安定して動作する。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -385,9 +385,11 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい
    ------------------

    - P2P で NAT 超えをしたいから
    - UDP ホールパンチング

    - UDP ホールパンチング
    - 再送を独自で行いたいから
    - NACK (Negative ACKnowledgement)

    - NACK (Negative ACKnowledgement)

    基本的にはこの 2 点です。

    @@ -480,7 +482,7 @@ IE の対応予定はない。
    Edge の WebRTC 対応はどうなのか
    -------------------------------

    2020 年 07 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。
    2020 年 11 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。

    `Edge <https://webrtc.shiguredo.jp/edge.html>`_

    @@ -527,7 +529,7 @@ MDN もお勧めしておきたい。

    プロトコルスタックの勉強は一筋縄ではいかない。以下にまとめてあるので見てほしい。

    `WebRTC スタックを一から実装する場合読んでおくべき資料まとめ <https://gist.github.com/voluntas/193ab447d387532a659d3ede9ab7678f>`_
    `WebRTC 資料まとめ <https://webrtc.shiguredo.jp/rfc.html>`_

    もう少し踏み込んだ情報が知りたい
    ------------------------------------
    @@ -561,7 +563,7 @@ WebRTC における E2EE について知りたい

    - P2P であればデフォルトで E2EE を利用している。
    - MCU は仕組み上利用できない
    - SFU については `WebRTC SFU + E2EE コトハジメ <https://gist.github.com/voluntas/5fddd5fd92d87852807949143b557151>`_ を読んでほしい
    - `Sora E2EE ドキュメント — Sora E2EE ドキュメント documentation <https://sora-e2ee.shiguredo.jp/>`_

    WebRTC の歩き方
    ===============
    @@ -657,6 +659,9 @@ STUN/TURN に詳しくなりたい
    いるとは思わないが ... RFC 読むのが手っ取り早い。
    難しいプロトコルではないので実際に実装してみるのも良い。

    - `RFC 8489 - Session Traversal Utilities for NAT (STUN) <https://tools.ietf.org/html/rfc8489>`_
    - `RFC 8656 - Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN) <https://tools.ietf.org/html/rfc8656>`_

    広告
    ====

    @@ -670,9 +675,11 @@ WebRTC SFU Sora

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

    パッケージで提供しますので、自社で運用が可能です。 AWS だろうが GCP だろうが、オンプレだろうがなんでも好きな環境で動かすことができます。
    パッケージで提供しますので、自社で運用が可能です。
    AWS だろうが GCP だろうが、オンプレだろうがなんでも好きな環境で動かすことができます。

    サーバさえあれば起動までは 10 分です。 HTTPS が必須なのでその準備が必要ですがそれさえ対応できればすぐ確認可能です。
    サーバさえあれば Nginx の設定と Let's Encrypt での証明書取得まで含めて 1 時間で可能です。
    HTTPS が必須なのでその準備が必要ですがそれさえ対応できればすぐ確認可能です。

    - 大変多くのお客様に採用いただいております

    @@ -688,6 +695,7 @@ WebRTC SFU Sora
    - 1:1 の双方向に対応しています
    - 1:1000 の片方向に対応しています
    - 3:1000 といった配信者が複数の片方向にも対応しています
    - 4K 30fps の配信も可能です
    - スポットライトという機能を利用することで 200 人以上の会議に対応しています
    - 録画機能があります
    - Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
    @@ -735,7 +743,8 @@ WebRTC Signaling Server Ayame

    `WebRTC Signaling Server Ayame <https://github.com/OpenAyame/ayame>`_

    GitHub にオープンソースで公開している WebRTC のシグナリングサーバです。 Linux と macOS と Windows で動作します。
    GitHub にオープンソースで公開している WebRTC のシグナリングサーバです。
    Linux と macOS と Windows で動作します。

    - `OpenAyame プロジェクト <https://gist.github.com/voluntas/90cc9686a11de2f1acca845c6278a824>`_
    - ライセンスは Apache License 2.0 です
    @@ -793,3 +802,4 @@ Sora Labo




  20. @voluntas voluntas revised this gist Nov 2, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@ WebRTC コトハジメ

    :更新: 2020-10-31
    :作者: @voluntas
    :バージョン: 2020.5
    :バージョン: 2020.6
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
  21. @voluntas voluntas revised this gist Nov 2, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -248,7 +248,7 @@ WebRTC という技術自体はとても良くできており、大変安定し
    - 最新ブラウザへの追従
    - 繋がらない人へのサポート対応

    主にこの3点。両方ともこちらで事前に予測は難しい。ブラウザへの追従はメーリングリストやコミットログを見ておいて実際に検証していく必要がある。
    主にこの2点。両方ともこちらで事前に予測は難しい。ブラウザへの追従はメーリングリストやコミットログを見ておいて実際に検証していく必要がある。
    つながらない人へのサポート対応は、ネットワーク環境などなど、いろいろなものに依存してしまうのでなんともいえない。実際に運用してノウハウをためるしかない。

    基本的にクライアント側で頑張る必要があるので JavaScript が複雑になっていく。
  22. @voluntas voluntas revised this gist Oct 31, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -665,8 +665,8 @@ WebRTC SFU Sora

    `WebRTC SFU Sora <https://sora.shiguredo.jp/>`_

    商用の WebRTC SFU です。価格は同時 100 接続で年間利用料ライセンス 60 万円です。
    毎年かかります。製品のサポート料金込みです。200 接続だと年間 120 万円です
    商用の WebRTC SFU です。価格は同時 100 接続でライセンス費用は 1 年で 84 万円です。
    3 ヶ月ライセンスも用意してあります。製品のサポート料金込みです。

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

  23. @voluntas voluntas revised this gist Oct 31, 2020. 1 changed file with 4 additions and 6 deletions.
    10 changes: 4 additions & 6 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-10-03
    :更新: 2020-10-31
    :作者: @voluntas
    :バージョン: 2020.4
    :バージョン: 2020.5
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -753,12 +753,10 @@ GitHub にオープンソースで公開している WebRTC のシグナリン
    - `OpenAyame/ayame-react-native-sample: Ayame React Native サンプル <https://github.com/OpenAyame/ayame-react-native-sample>`_
    - Chrome / Firefox / Safari / Edge 最新版に対応

    Ayame Lite
    Ayame Labo
    --------------------------------------

    **このサービスはオープンベータテスト中です**

    `Ayame Lite <https://ayame-lite.shiguredo.jp/beta>`_
    `Ayame Labo <https://ayame-labo.shiguredo.jp/>`_

    Ayame を時雨堂がサービスとして提供しています。

  24. @voluntas voluntas revised this gist Oct 3, 2020. 1 changed file with 3 additions and 11 deletions.
    14 changes: 3 additions & 11 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-08-16
    :更新: 2020-10-03
    :作者: @voluntas
    :バージョン: 2020.3
    :バージョン: 2020.4
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -657,13 +657,6 @@ STUN/TURN に詳しくなりたい
    いるとは思わないが ... RFC 読むのが手っ取り早い。
    難しいプロトコルではないので実際に実装してみるのも良い。

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

    Discord に webrtc-jp というサーバを立てた。 WebRTC や WebTransport の情報共有がメイン。

    `WebRTC オンライン専用コミュニティ <https://gist.github.com/voluntas/3849d9881d97ea0bb403a2122f0e4a31>`_

    広告
    ====

    @@ -736,8 +729,6 @@ GitHub にオープンソースで公開している WebRTC のネイティブ
    - `Jetson Nano <https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-nano/>`_ ではハードウェアエンコーダを利用することで 4K@30 で配信可能です
    - macOS でもハードウェアエンコーダを利用して動作します
    - SDL (Simple DyanmicMedia Layer) を利用することで受信した音声と映像を表示する機能を持っています
    - ROS に対応しているため、ROS から気軽に利用可能です
    - 有償ビルドツールを利用すれば Windows でも利用可能です

    WebRTC Signaling Server Ayame
    -----------------------------
    @@ -803,3 +794,4 @@ Sora Labo
    - 統計情報を確認できます



  25. @voluntas voluntas revised this gist Aug 16, 2020. 1 changed file with 14 additions and 2 deletions.
    16 changes: 14 additions & 2 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-07-04
    :更新: 2020-08-16
    :作者: @voluntas
    :バージョン: 2020.2
    :バージョン: 2020.3
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -381,6 +381,16 @@ WebRTC では音声や映像に特化した再送や輻輳制御を行ってい
    ただこれは WebRTC だからとかではなく TCP でもデータを送りつける方式であれば遅延は少なくなる。
    ここは方式の違いであり TCP や UDP の差ではない。

    なぜ UDP なのか
    ------------------

    - P2P で NAT 超えをしたいから
    - UDP ホールパンチング
    - 再送を独自で行いたいから
    - NACK (Negative ACKnowledgement)

    基本的にはこの 2 点です。

    低回線で配信したい
    ------------------

    @@ -791,3 +801,5 @@ Sora Labo
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます


  26. @voluntas voluntas revised this gist Jul 12, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -620,7 +620,7 @@ WebRTC API を使えるようになりたい
    基本的には以下の2つの API を理解すれば良くなる。

    - getUserMedia
    - RTCPeerConection
    - RTCPeerConnection

    このあたりはお作法で使えば良いので、とにかくサンプルを読むと良い。

  27. @voluntas voluntas revised this gist Jul 4, 2020. 1 changed file with 7 additions and 0 deletions.
    7 changes: 7 additions & 0 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -546,6 +546,13 @@ AV1 は WebRTC で利用可能なのか

    `WebRTC Native Client Momo <https://github.com/shiguredo/momo>`_ では Momo 同士の AV1 送受信に対応しているので、興味あれば試してみてほしい。

    WebRTC における E2EE について知りたい
    ------------------------------------------------

    - P2P であればデフォルトで E2EE を利用している。
    - MCU は仕組み上利用できない
    - SFU については `WebRTC SFU + E2EE コトハジメ <https://gist.github.com/voluntas/5fddd5fd92d87852807949143b557151>`_ を読んでほしい

    WebRTC の歩き方
    ===============

  28. @voluntas voluntas revised this gist Jul 4, 2020. 1 changed file with 66 additions and 42 deletions.
    108 changes: 66 additions & 42 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,23 +2,21 @@
    WebRTC コトハジメ
    #############################

    :更新: 2020-04-21
    :更新: 2020-07-04
    :作者: @voluntas
    :バージョン: 2020.1
    :バージョン: 2020.2
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    :target: https://creativecommons.org/licenses/by-nc-nd/4.0/


    **この記事が良いと思ったらこの記事に Star をお願いします。**


    著者
    ====

    `株式会社時雨堂 <https://shiguredo.jp>`_ で 1 から WebRTC SFU を開発している。
    DTLS や SRTP も暗号ライブラリの利用している部分以外はすべて自前実装
    WebRTC スタックは暗号ライブラリの利用している部分以外はすべて自前実装

    著者が書いた資料
    ----------------
    @@ -92,16 +90,18 @@ WebRTC は実はデバイス管理やスクリーンキャプチャという概

    そして最後に、その相手との通信を実現する技術が必要になる。これも WebRTC の一部になる。

    WebRTC は沢山の技術の集合体と考えてもらって問題ない。それらをブラウザから簡単に使えるようにした仕組みが WebRTC API となる。
    WebRTC は沢山の技術の集合体と考えてもらって問題ない。
    それらをブラウザから簡単に使えるようにした仕組みが WebRTC API となる。

    上記の複雑な仕組みを意識することなく、
    JavaScript を 100 行も書かずに実現できるようになっている。

    ここで大事なのは WebRTC は用意された API を利用するだけなら難しい技術ではない。
    むしろとてもシンプルになっており、使いやすい方だ
    むしろとてもシンプルになっており、使いやすい API だ

    ただその用意されている部分から少しでも逸脱するとハードルが突然あがる。
    例えばブラウザ以外で行いたいとか、用意されているコーデック以外を使いたいとか、内部で利用するプロトコルを変えたいとかだ。
    例えばブラウザ以外で行いたいとか、
    用意されているコーデック以外を使いたいとか、内部で利用するプロトコルを変えたいとかだ。

    WebRTC はリアルタイムなコミニュケーションを実現するために、
    とてつもないめんどくさい技術を利用した技術で、それをブラウザから簡単に使えるようにした技術である。
    @@ -118,7 +118,6 @@ WebRTC にはメディアチャネルとデータチャネルの二つがある

    WebRTC とメディアチャネルが同一と表現されることが多いので要注意。


    SDP (Session Description Protocol)
    -------------------------------------

    @@ -140,10 +139,6 @@ RTP はとても古いプロトコルであるが、かなり拡張されてお

    SCTP は TCP と UDP のいいところ取りをしたプロトコルだと思ってもらってよい。SCTP もなり古いプロトコルだが、残念ながら流行っているとはいえない。SCTP over DTLS over UDP という多重構造になっている。

    最近ではデータチャネルの通信を QUIC を利用するという実装も WebRTC が公開しているライブラリには入ってきている。

    実際 Google が提供している Duo は WebRTC over QUIC という噂がある。

    分散ファイル共有系だと `WebTorrent - Streaming browser torrent client <https://webtorrent.io/>`_ が WebRTC データチャネルを利用している。

    CDN 系だと `Peer5 - The Serverless P2P CDN For Video Live Streaming <https://www.peer5.com/>`_ や `Streamroot | Distributed Network Architecture for OTT Video Delivery <https://www.streamroot.io/>`_ がサーバレス CDN を提供している。
    @@ -207,29 +202,39 @@ MCU (Multipoint Control Unit)

    良いことだらけだが、合成するためサーバ側のリソースを恐ろしく使うため、最近は MCU から SFU が主軸になっていっている。

    また End to End Encryption (E2EE) が MCU では実現できないという問題もある。

    SFU (Selective Forwarding Unit)
    -------------------------------

    SFU という単語が出てきたのはここ数年。ただ概念自体は前からある。SFU は MCU だと CPU リソースを使われてしまうことから考え出された仕組み。
    SFU という単語が出てきたのはここ数年。ただ概念自体は前からある。
    以前だとメディアルーターと呼ばれていた。最近でも SFU と呼ばずメディアルーターと呼ぶ場合もある。

    SFU は MCU だと CPU リソースを使われてしまうことから考え出された仕組みだ。

    クライアントが配信する音声や映像をサーバが代理で他のクライアントやサーバに送るという仕組み。
    そのため、クライアントは 10 人参加者がいた場合でもサーバに映像を送るだけで済む。

    P2P の場合のフルメッシュと MCU の間の技術でバランスが良い事もあり WebRTC でクライアント・サーバモデルの場合は SFU が選択されることが多い。

    SFU の場合は E2EE が採用できる。実際 Google Duo は 3 人以上の場合は WebRTC SFU を利用しながら、E2EE を実現している。

    よくありそうな質問
    ==================

    使えるのか
    ----------

    すでに Chrome に搭載されてから 5 年以上が過ぎており、普通に安定して使える。
    すでに Chrome に搭載されてから 7 年以上が過ぎており、普通に安定して使える。
    むしろ既存の技術よりも新しい仕組みが多く取り入らられている。

    不安定とか繋がらないとかはネットワークの問題がほとんどで、
    WebRTC という技術自体はとても良くできており、大変安定している。

    そして今でも進化し続けている。

    `Chromium Blog: Celebrating 10 years of WebM and WebRTC <https://blog.chromium.org/2020/05/celebrating-10-years-of-webm-and-webrtc.html>`_

    仕事で使いたい
    --------------

    @@ -243,8 +248,8 @@ WebRTC という技術自体はとても良くできており、大変安定し
    - 最新ブラウザへの追従
    - 繋がらない人へのサポート対応

    主にこの二点。両方ともこちらで事前に予測は難しい。前者はメーリングリスト見ておいて実際に検証しておけば問題ない
    後者だけはもうネットワーク環境などなど、いろいろなものに依存してしまうのでなんともいえない。実際に運用してノウハウをためるしかない。
    主にこの3点。両方ともこちらで事前に予測は難しい。ブラウザへの追従はメーリングリストやコミットログを見ておいて実際に検証していく必要がある
    つながらない人へのサポート対応は、ネットワーク環境などなど、いろいろなものに依存してしまうのでなんともいえない。実際に運用してノウハウをためるしかない。

    基本的にクライアント側で頑張る必要があるので JavaScript が複雑になっていく。

    @@ -264,8 +269,10 @@ WebRTC は映像や音声、そしてデータを **不安定な回線** でも

    注意してほしいのは今使われている WebRTC は新しくできた技術ではなく、既存技術をいろいろ組み合わせてできた技術。

    音声や映像のやりとりには RTP (Real-time Transport Protocol) という歴史のある(January 1996)プロトコルが利用されている。
    またデータのやり取りには SCTP (Stream Control Transmission Protocol) というこちらも歴史のある(October 2000)プロトコルが利用されている。
    音声や映像のやりとりには RTP (Real-time Transport Protocol) という歴史のある(1996 年)プロトコルが利用されている。
    またデータのやり取りには SCTP (Stream Control Transmission Protocol) というこちらも歴史のある(2000 年)プロトコルが利用されている。

    暗号部分には SRTP (2004 年) や DTLS (2006 年) 、ハンドシェイクには SDP (1998 年) 、NAT 超えには STUN/TURN (2003 年) が利用されている。

    つまり、今まで使われてきた技術をうまくまとめ、ブラウザ上で使えるようにした技術と考えてもらって問題ない。

    @@ -287,14 +294,21 @@ WebRTC は映像や音声、そしてデータを **不安定な回線** でも
    - 日々改善されていっている

    また、いまや WebRTC はブラウザだけの技術ではない。
    iOS や Android だけでなく、組み込み製品にも利用が可能になりリアルタイムな意思伝達の技術としては WebRTC が圧倒的シェアを誇っている。
    iOS や Android だけでなく、組み込み製品にも利用が可能になり、
    リアルタイムな意思伝達の技術としては WebRTC が圧倒的シェアを誇っている。

    そしてさらに、それらの技術を全て無料で、さらにオープンソースとして公開されており、利用することができる。
    そしてさらに、それらのコアとなる技術はオープンソースとして公開されており、
    ライセンスの下であれば自由に利用することができる。

    Safari では動作するのか?
    ---------------------------

    2019 年 11 月時点の最新版である Safari 13 ではとても安定して動作する。
    2020 年 7 月時点の最新版である Safari 13 ではとても安定して動作する。

    Edge では動作するのか?
    ---------------------------

    2020 年 7 月時点の最新版である Edge 83 ではとても安定して動作する。

    HLS や MPEG-DASH とどう違うのか
    -------------------------------
    @@ -303,10 +317,10 @@ HLS や MPEG-DASH とどう違うのか

    `リアルタイム動画配信コトハジメ <https://gist.github.com/voluntas/076fee77f30a0ca7a9b9>`_

    iOS には Chrome があるがそれでもダメなのか
    ------------------------------------------
    iOS には Chrome や Firefox があるがそれでもダメなのか
    ---------------------------------------------------------

    iOS の Chrome は WKWebView ベースなので、 getUserMedia 非対応。
    iOS の Chrome や Firefox は WKWebView ベースなので、 getUserMedia 非対応。

    ちなみに SFSafariViewController は iOS 13 で getUserMedia に対応した。

    @@ -318,12 +332,12 @@ webrtc.org が提供してくれていた。今はアーカイブがあるのみ
    - `Android | WebRTC <https://webrtc.github.io/webrtc-org/native-code/android/>`_
    - `iOS | WebRTC <https://webrtc.github.io/webrtc-org/native-code/ios/>`_

    さらに最近は Bintray や Cocoapod で最新版のビルドを Google が提供し始めている
    Bintray や Cocoapod で最新版の libwebrtc ビルドを Google が提供している

    - `GoogleWebRTC on CocoaPods.org <https://cocoapods.org/pods/GoogleWebRTC>`_
    - `google-webrtc <https://bintray.com/google/webrtc/google-webrtc>`_

    これらを上手く活用する事
    これらを上手く活用する事がおすすめだ

    WebRTC の P2P はどんな技術なのか
    -----------------------------------
    @@ -336,7 +350,8 @@ WebRTC 残念ながら完全な P2P ではない。
    お互いに直接やり取りするにしてもお互いの情報がまったくわからなければやりとりしようがないため、
    最初だけお互いを仲介してくれるシグナリングサーバと呼ばれるものが必要になる。

    シグナリングサーバ、聞き慣れないと思いますが難しい話ではなく自分の IP アドレスを始め自分がどんな状況にいるのかを「どこにいるのかもわからないやり取りしたい相手」に情報を伝達してくれるサーバである。
    シグナリングサーバという響きは聞き慣れないと思うが、
    難しい話ではなく自分の IP アドレスを始め自分がどんな状況にいるのかを「どこにいるのかもわからないやり取りしたい相手」に情報を伝達してくれるサーバである。
    つまりシグナリングサーバさえ知っていればなんとかなる。

    シグナリングサーバでやりとりする情報は、 WebRTC では SDP (Session Description Protocol) というプロトコルを利用する。
    @@ -350,7 +365,7 @@ WebRTC 残念ながら完全な P2P ではない。

    環境や回線やマシンパワーに依存する。好条件であれば 200 ミリ秒程度の遅延で配信が可能。

    この辺りの遅延については超低遅延 (Ultra-Low Latency) と呼ばれている。
    この辺りの 1 秒未満の遅延については超低遅延 (Sub-second latency) と呼ばれている。

    超低遅延、つまり 200-300 ミリ秒で双方のやり取りが可能になる。ただこれ勘違いをしてはいけないのは WebRTC 以外でも実現可能。
    WebSocket を利用したとしても 200-300 ミリでのやり取りは可能。
    @@ -429,7 +444,8 @@ TURN-TLS までフォールバックしてつながらない時は諦めるし
    DTLS の証明書検証はどう行われているのか
    ---------------------------------------

    シグナリングを利用して交換する SDP の中身の a=fingerprint に書いてあるフィンガープリントの値を利用した仕組みを使っている。DTLS の証明書検証時にこの fingerprint の値と送られてきた証明書を検証している。
    シグナリングを利用して交換する SDP の中身の a=fingerprint に書いてあるフィンガープリントの値を利用した仕組みを使っている。
    DTLS の証明書検証時にこの fingerprint の値と送られてきた証明書を検証している。

    TURN サーバで通信を見られてしまうのではないか
    ---------------------------------------------
    @@ -445,7 +461,7 @@ Chrome や Firefox や Edge や Safari 以外に対応するのか
    ------------------------------------------------------

    最後の大物である Safari が 11 にて対応した。
    iOS のモバイル Safari も対応している。ただし WKWebView は getUserMedia に非対応なので注意してほしい。
    iOS のモバイル Safari も対応している。ただし現在も WKWebView は getUserMedia に非対応なので注意してほしい。

    `Safari <https://webrtc.shiguredo.jp/safari.html>`_

    @@ -454,14 +470,15 @@ IE の対応予定はない。
    Edge の WebRTC 対応はどうなのか
    -------------------------------

    2020 年 04 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。
    2020 年 07 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。

    `Edge <https://webrtc.shiguredo.jp/edge.html>`_

    高画質で配信したい
    ------------------

    多くの帯域があるネットワークと高性能なマシンが必要になる。ちなみに VP8 や H.264 でフル HD での配信は 2500kbps 程度あればいける。
    多くの帯域があるネットワークと高性能なマシンが必要になる。
    ちなみに VP8 や H.264 でフル HD での配信は 2500kbps 程度あればいける。

    VP9 を利用すれば 1500kbps 程度でフル HD で、30fps な映像が配信可能。

    @@ -485,7 +502,7 @@ VP9 を利用すれば 1500kbps 程度でフル HD で、30fps な映像が配

    getDisplayMedia を利用することで利用可能。

    この機能は Chrome と Firefox と Edge (Chromium ベース) と Safari に搭載されており、利用することができる。
    この機能は Chrome と Firefox と Edge と Safari 主要ブラウザの全てに搭載されており、利用することができる。

    WebRTC の技術を勉強したい
    -------------------------
    @@ -522,13 +539,21 @@ YouTube が専用のツール不要で Chrome からすぐに配信可能にな

    `YouTube が WebRTC 配信に対応した – V – Medium <https://medium.com/@voluntas/youtube-%E3%81%8C-webrtc-%E9%85%8D%E4%BF%A1%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%9F-c696833f5314>`_

    AV1 は WebRTC で利用可能なのか
    -----------------------------------------------

    利用可能。すでに libwebrtc には実装されはじめている。

    `WebRTC Native Client Momo <https://github.com/shiguredo/momo>`_ では Momo 同士の AV1 送受信に対応しているので、興味あれば試してみてほしい。

    WebRTC の歩き方
    ===============

    WebRTC はどうも難しいというイメージを持たれていることが多い
    WebRTC はどうも難しいというイメージを持たれていることが多いが、それは正しい
    実際リアルタイムなデータを P2P でやり取りをするのはとても難しい。

    ただ WebRTC の Web API 自体はとてもそれらを簡単にしてくれているし、多くのフレームワークも提供されており、それを使うことでかなり難易度は下がる。
    ただ WebRTC の Web API 自体はとてもそれらを簡単にしてくれているし、
    多くのフレームワークも提供されており、それを使うことでかなり難易度は下がる。

    ここでは目的別の WebRTC の歩き方を書いていこうと思う。

    @@ -604,7 +629,8 @@ WebRTC API を使えるようになりたい
    WebRTC のフレームワークを使えるようになりたい
    ---------------------------------------------

    基本的にフレームワークはオープンソースであると思うので、そのドキュメントとソースコードを読むのが一番だ。ほとんどの人はこのフレームワークを使うというところになるだろう。
    基本的にフレームワークはオープンソースであると思うので、
    そのドキュメントとソースコードを読むのが一番だ。ほとんどの人はこのフレームワークを使うというところになるだろう。

    それこそ WebRTC は後回しにし、フレームワークを学ぶべきだ。

    @@ -744,10 +770,11 @@ Sora Labo

    `Sora Labo <https://sora-labo.shiguredo.jp/>`_

    Sora を時雨堂がサービスとして提供しています
    商用製品の WebRTC SFU Sora を時雨堂が検証目的で無料で使えるサービスを提供しています

    - 無料で使えます
    - 無料で利用可能です
    - 商用目的では使えません
    - すぐに試せるサンプルも用意してあります
    - 法人、アカデミックでの利用は申請必須です
    - GitHub アカウントを持っていればすぐに利用できます
    - TURN の UDP / TCP / TLS を提供します
    @@ -757,6 +784,3 @@ Sora を時雨堂がサービスとして提供しています。
    - 同時接続数制限があります
    - 認証ログを確認できます
    - 統計情報を確認できます



  29. @voluntas voluntas revised this gist Apr 21, 2020. 1 changed file with 18 additions and 12 deletions.
    30 changes: 18 additions & 12 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,9 @@
    WebRTC コトハジメ
    #############################

    :更新: 2019-11-24
    :更新: 2020-04-21
    :作者: @voluntas
    :バージョン: 19.11.3
    :バージョン: 2020.1
    :URL: https://voluntas.github.io/

    .. image:: https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey.svg
    @@ -192,6 +192,10 @@ WebRTC の世界は P2P を前提として入るが、それとは別に MCU と

    MCU や SFU は WebRTC の標準的な考え方からすると異端ではあるが、一定以上の品質や数を担保する場合は必須となる。

    理解を深めたい場合は以下の記事が参考になる。

    `WebRTCにおいてP2P/SFU/MCUでビデオ通話品質の差があるか|tnoho|note <https://note.com/tnoho/n/n31f7bcf87123>`_

    MCU (Multipoint Control Unit)
    -----------------------------

    @@ -309,10 +313,10 @@ iOS の Chrome は WKWebView ベースなので、 getUserMedia 非対応。
    iOS や Android のアプリはどうやって開発すればいいのか
    ------------------------------------------------------

    webrtc.org がちゃんと提供してくれている
    webrtc.org が提供してくれていた。今はアーカイブがあるのみ

    - `Android | WebRTC <https://webrtc.org/native-code/android/>`_
    - `iOS | WebRTC <https://webrtc.org/native-code/ios/>`_
    - `Android | WebRTC <https://webrtc.github.io/webrtc-org/native-code/android/>`_
    - `iOS | WebRTC <https://webrtc.github.io/webrtc-org/native-code/ios/>`_

    さらに最近は Bintray や Cocoapod で最新版のビルドを Google が提供し始めている

    @@ -443,19 +447,16 @@ Chrome や Firefox や Edge や Safari 以外に対応するのか
    最後の大物である Safari が 11 にて対応した。
    iOS のモバイル Safari も対応している。ただし WKWebView は getUserMedia に非対応なので注意してほしい。

    `Safari と WebRTC について <https://gist.github.com/voluntas/af937c1fd353e6f677e155b53d661807>`_
    `Safari <https://webrtc.shiguredo.jp/safari.html>`_

    IE の対応予定はない。

    Edge の WebRTC 対応はどうなのか
    -------------------------------

    2019 年 11 月時点でかなり残念な対応。
    ただその後継の Chromium ベースの Edge Beta はほぼ Chrome なので、問題ない。

    その辺は以下の資料にまとめてあるので見てほしい。
    2020 年 04 月時点で Chrome ほぼ同等と認識してもらって良いい。特に問題なく利用できる。

    `Edge と WebRTC について <https://gist.github.com/voluntas/f174b402f91e63eb84368f929c2289bf>`_
    `Edge <https://webrtc.shiguredo.jp/edge.html>`_

    高画質で配信したい
    ------------------
    @@ -475,6 +476,10 @@ VP9 を利用すれば 1500kbps 程度でフル HD で、30fps な映像が配

    これを買えば解決する。12 万円と高額だが、一つ買えば幸せになれるので本当におすすめ。

    1-4 名、程度向けでもこれを買えば問題ない。

    `YVC-200 特長 <https://sound-solution.yamaha.com/products/uc/yvc-200/index>`_

    スクリーンシェア機能を使いたい
    -------------------------------------

    @@ -538,7 +543,7 @@ WebRTC という技術は様々な集合体ということもあり、全てに

    プロトコル部分だけであれば、自分でまとめた資料があるんで参考にしてもらえれば。

    `WebRTC 資料まとめ <https://gist.github.com/voluntas/193ab447d387532a659d3ede9ab7678f>`_
    `WebRTC 資料まとめ <https://webrtc.shiguredo.jp/rfc.html>`_

    WebRTC API に詳しくなりたい
    ---------------------------
    @@ -754,3 +759,4 @@ Sora を時雨堂がサービスとして提供しています。
    - 統計情報を確認できます



  30. @voluntas voluntas revised this gist Dec 23, 2019. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions webrtc.rst
    Original file line number Diff line number Diff line change
    @@ -714,12 +714,12 @@ GitHub にオープンソースで公開している WebRTC のシグナリン
    - `OpenAyame/ayame-react-native-sample: Ayame React Native サンプル <https://github.com/OpenAyame/ayame-react-native-sample>`_
    - Chrome / Firefox / Safari / Edge 最新版に対応

    WebRTC シグナリングサービス Ayame Lite
    Ayame Lite
    --------------------------------------

    **このサービスはオープンベータテスト中です**

    `WebRTC シグナリングサービス Ayame Lite <https://ayame-lite.shiguredo.jp/beta>`_
    `Ayame Lite <https://ayame-lite.shiguredo.jp/beta>`_

    Ayame を時雨堂がサービスとして提供しています。

    @@ -734,10 +734,10 @@ Ayame を時雨堂がサービスとして提供しています。
    - シグナリングキーを提供します
    - 認証ログを確認できます

    WebRTC SFU Testing Service Sora Labo
    Sora Labo
    -------------------------------------

    `WebRTC SFU Testing Service Sora Labo <https://sora-labo.shiguredo.jp/>`_
    `Sora Labo <https://sora-labo.shiguredo.jp/>`_

    Sora を時雨堂がサービスとして提供しています。