Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
WebRTC の未来

WebRTC の未来

更新:2019-04-19
作者:@voluntas
バージョン:19.04.0
URL:http://voluntas.github.io/

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

概要

仕事で WebRTC SFU を開発しているついでに、調べた最新の WebRTC 状況や未来についてまとめている。うまく分けることができない話が多いため何度か同じ話をしているのでうまく読み飛ばしてもらえれば。

WebRTC の知識がある前提で書いている。基本的なことを知りたい場合は WebRTC コトハジメ にまとめてあるのでそちらを参照してほしい。

WebRTC の詳細を知りたければ発表資料で恐縮だが 詳解 WebRTC をおすすめしておく。

質問や間違いの指摘について

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

用語

Edge
Edge (Chromium ベース)
Safari TP
Safari Techonlogy Preview
SFU
Selective Forwarding Unit

今後

P2P

Google が発表した Project StreamChrome リモートデスクトップ は WebRTC P2P を使いこなしている。1:1 でスピードをとにかく優先する仕組みだ。

また、WebRTC P2P CDN も結果を出してきている。Peer5 - The Serverless P2P CDN For Video Live Streaming はサッカーのワールドカップで凄まじい結果を出した。

1:1 での速度、直接のやり取りちう部分で WebRTC P2P がなくなることはない。むしろそこに強みがある。ただしそれ以外では WebRTC SFU が利用されることが多くなってきている。

SFU

P2P と SFU はキレイな別世界を作り上げているように思える。

商用の WebRTC サービスを提供している Twilio や Tokbox は自社開発の SFU を利用している。また Microsoft が提供している Mixer というゲーム実況サービスでも OSS の Janus という SFU を利用している。Discord はユーザ数 1.5 億人という大規模な世界で独自開発した SFU を運用している。 Slack も現在は Janus で、別途 Elixir/C++ で自前で SFU を開発している。

いままでウェブ会議の主力だった MCU もコールセンターや IP 電話との併用であれば今後も利用されているが、あくまで MCU は WebRTC はおまけ、という立ち位置だろう。理由としては MCU は CPU リソース利用しすぎるため、サービスの価格を抑えることが難しいからだ。

仕様

WebRTC 1.0 の仕様は 2019 年の後半に落ち着かせたいという思いがあるようだ。またブラウザ同士の差も吸収していきたいという話が出ている。これは朗報だろう。

Completing WebRTC 1.0 https://groups.google.com/d/msg/discuss-webrtc/f4Jg53Phgco/YfetnmoqBQAJ

とはいっても 2019 年 4 月現在では Chrome と Edge はほぼ同じ、 Safari と Firefox が少し遅れているという状況。

VP8

Safari が 12.1 にて VP8 に対応ことで、主要ブラウザで VP8 が利用できるようになった。

Chrome、 Firefox 、 Safari 、 Edge で Simulcast が動作する。

VP9

現時点で Safari 以外のブラウザが対応済み。

Firefox の M58 ではビデオコーデックのデフォルトが VP9 になった。

ちなみに iOS 向けの WebRTC ライブラリでは VP9 がデフォルト無効になっており、利用する場合はフラグを有効にする必要がある。

H.264

多くのスマホ端末が HW アクセラレータを実装していることが多い。 スマホ端末からの映像は H.264 がスタンダードになる可能性は高い。

libwebrtc はデフォルトで H.264 の HW オプションが有効になった。 Windows や OS X では HW アクセラレータが利用される。

Chrome、 Safari 、 Edge で H.264 Simulcast が動作する。

注意する点としては Android では端末依存により HWA がうまく機能せず問題が出る場合がある。

Chrome

順調に libwebrtc に追従していっている。最新の機能をいれつつも、安定化もさせていっている印象。 WebRTC 1.0 API への追従も順調に進んでいっている。

  • Chrome M72 からは Unified Plan がデフォルトになった
  • Chrome M72 に getDisplayMedia が入り、スクリーンシェアが Chrome 拡張不要になった
  • Chrome M73 で H.264 Simulcast が有効になった
  • Chrome M73 で mDNS が有効になった

Firefox

基本的な機能を実装しているが、現時点では libwebrtc のバージョンが数世代遅れていることもあり、 リソースが足りてなく頑張って追いかけているという印象。 Chrome のほうが機能自体は豊富だし、攻めている。

最近の詳細は以下を読むのが良い。

Edge

ほぼ Chrome と同等と考えて良い。

Safari

Safari 12.1 で VP8 に対応。Unified Plan はまだ非対応。 WebRTC が安定して使えるブラウザと考えて問題ない。

ちなみに、コーデックの統一を目指す http://aomedia.org/ に Apple が参加したので、 2019 年なにか動きがあるかもしれない。

アップル、動画圧縮技術の開発を目指すAlliance for Open Mediaに加盟 - CNET Japan

SVC

Simulcast が複数の解像度を複数の RTP で送るという考えに対して、レイヤー構造をうまく使うことで一つの RTP で実現したのが SVC という技術。

WebRTC では VP9 + SVC がでてきそうだが、まだ利用はできない。ちなみに H.264/SVC は会議システムでは広く普及している。

Simulcast

WebRTC のクライアントが複数の解像度をを同時に送る方式。

SVC と似ているが実際に複数種類の形式を複数の RTP で送る技術。

基本的には SFU を挟む前提で利用される技術。SFU が視聴者が希望する画質を選択して配信することができるようになる。

最新の RFC 的な意味では a=simulcast と a=rid を利用してとして実装されている。ただ 2018 年 12 月の時点で Firefox のみが対応でしており、Chrome や Safari は別実装。

Chrome は a=ssrc-group:SIM と a=rid/a=simulcast の両方のパターンに対応している。

a=ssrc-group:SIP はクライアント側で SDP を書き換えて対応する必要がある。

Simulcast を試したい場合は fippo/simulcast-playground: single-page simulcast tests を見てみるといい。

DataChannel

DataChannel を利用しているサービスは P2P CDN が多かったが、最近だと Google がクラウドゲーミングやリモートデスクトップに利用している。

P2P CDN 系は Peer5 - The Serverless P2P CDN For Video Live StreamingStreamroot | Distributed Network Architecture for OTT Video Delivery がメジャーどころ。

WebTorrent - Streaming browser torrent client は WebRTC を利用した BitTorrent。

既存の SCTP over DTLS である DataChannel はここ最近変更が入っていない。完成されたプロトコルということなのだろう。

2019 年 04 月現在、 SCTP over DTLS とは別に QUIC を利用する仕組みが入った。

shampson/RTCQuicTransport-Origin-Trial-Documentation: Documentation and demos for developers using the RTCQuicTransport in Chrome's origin trial.

QUIC API for WebRTC

mDNS

Chrome M73 から mDNS という機能が入った。これはローカルなアドレスを匿名化するという仕組み。

a=candidate:2912272267 1 udp 2122262783 70df6acb-ac40-472a-a747-6c1c5404b4c2.local 60790 typ host generation 0 network-id 2 network-cost 10
a=candidate:505434299 1 udp 2122194687 88df39c4-092e-42a5-be00-f028e92cfc23.local 60651 typ host generation 0 network-id 1 network-cost 10
a=candidate:3809887099 1 tcp 1518283007 70df6acb-ac40-472a-a747-6c1c5404b4c2.local 9 typ host tcptype active generation 0 network-id 2 network-cost 10
a=candidate:1352903755 1 tcp 1518214911 88df39c4-092e-42a5-be00-f028e92cfc23.local 9 typ host tcptype active generation 0 network-id 1 network-cost 10

本来 IP アドレスが入っている場所が <UUID>.local という形式に変わっている。これはローカル IP アドレスを隠蔽するためのしくみ。これを利用することでローカル IP アドレスが不特定多数に漏れる必要がない。このアドレスを逆引きできるのは同じネットワークに属しているものだけとなる。

Using Multicast DNS to protect privacy when exposing ICE candidates

ORTC

2018 年 12 月の時点でほとんど気にしなくて良い。 Edge しか今のところ対応していないし、 Chrome/Firefox/Safari が追従する気配はまったくない。

ORTC の仕組みをうまく WebRTC NV に持っていくという形になると思う。

ちなみに淡々と ORTC の仕様は更新されている。

w3c/ortc: ORTC Community Group specification repository (see W3C WebRTC for official standards track)

Screen Capture

Screen Capture

通称画面共有機能。需要がある割に結構ブラウザ側から扱いが悪い機能。

Chrome

2019 年 4 月時点の最新版で getDisplayMedia が利用可能

Firefox

2019 年 4 月時点の最新版で getDisplayMedia が利用可能

Safari

2019 年 4 月時点の最新版 Safari TP で開発者メニューから Screen Capture を有効にすることで対応可能。

Edge

2019 年 4 月時点の最新版で getDisplayMedia が利用可能

WebRTC NV

WebRTC NV は低レイヤーの API 、QUIC 、 AV1 という3つがコアとなることが Google から発表された。

Rtp や Dtls といった低レイヤーの API 、DTLS-RTP や SCTP over DTLS を QUIC に置き換え、映像周りは AV1 にするというのが当面のゴールになるようだ。

JavaScript

JavaScritp 側の API についてはここでは省略する。 WebRTC アプリケーションを書く場合はとにかく JavaScript 力を付ける事が最優先だろう。

HTTPS

  • Chrome は getUserMedia が HTTPS のみでしか使用できない。ただローカルホストからのアクセスは許容してる
  • Firefox は HTTPS は必須ではないが、警告がでる
  • Edge は当面は HTTP でも問題ないという方針で行くようだ
  • Safari は HTTPS のみで、ローカルホストからのアクセスもできない

テストで HTTPS がめんどうな場合は以下を参考にすると良いだろう。

http でのアクセスでカメラの映像を取得する - Qiita

マルチストリーム

今までは複数の接続を貼る場合は毎回 DTLS セッションを貼っていたが、 1 DTLS セッションの内部に複数のストリームを含める仕組み。

SFU の場合は複数セッションを貼る必要があるが、これを一つにまとめることができるようになる技術。今後はこの技術を使って行く事になる。

たとえばスクリーンシェアリングとカメラ映像を一つのセッションで配信できるようになる。

RFC 8108 - Sending Multiple RTP Streams in a Single RTP Session

RFC にもなっているので、今後主流になる。

Unified Plan

Safari 以外はデフォルトで対応済み。Safari は実験的機能として提供中。

SDP の形式が a=msid を採用したタイプ

これが正しい方向。Chrome などは古い規格。

Edge は Unified Plan で行くのが決まったが、今のところマルチストリームはまだ実装されていない。 Chromium ベース待ちで良い。

Plan B

もう過去の規格になりつつあるので、2019 年 04 月のタイミングでは気にする必要はない。

DTLS

Firefox でも Chrome でも DTLS のバージョンは 1.2 になっている。

Chrome M52 でデフォルトの証明書が ECDSA の P-256 になった。Firefox はまだ未確認。

今後メインストリームが TLS 1.3 が普及していく事を考えると DTLS 1.3 に切り替わるタイミングがある可能性はある。

もしくは、 Google が間違って DTLS 1.3 を QUIC にしてしまう未来があるのかもしれない。

SRTP/SRTCP

SRTP/SRTCP 自体の暗号方式は RFC 通り。ただし RTCP 部分はかなり幅広い対応が必要。

様々な仕様がある。拡張も多い。様々な拡張が追加されていっている。

新しい SRTP/SRTCP の暗号方式が RFC 7714 - AES-GCM Authenticated Encryption in the Secure Real-time Transport Protocol (SRTP) にて RFC 化された。

Chrome であれば chrome://flags で AES-GCM を有効にできる。

コーデック

映像

現在は VP8 がデファクト。Safari が VP8 に対応したことでまずは VP8 一択と考えて良い。

映像はハードウェアアクセラレータへの対応がモバイルではかなり有効になる。ハードウェアアクセラレータ は Android の端末依存で VP9/VP8/H.264 に対応しているのがある。 iOS は H.264 のみへの対応。

AV1

WebRTC での対応はかなり先なのであくまで参考程度に読んでほしい

Chrome M70 で AV1 decoder が入った。これはあくまで再生できるだけ。WebRTC とは一切関係ない。

2019 年後半で WebRTC に AV1 が入ることが Google のイベントで発表された。

Firefox 65 で AV1 が再生できるようになったが、これは WebRTC とは関係ない

H.265

Safari のみになるとはおもうが H.265 が出て来る可能性は否定できない。

H.265/HEVC特許暗黒時代 - Qiita

Safari 以外に載ることはないと思っている。

音声

Opus でほぼ確定。こっから動く事はなさそう。あとはどこまで Opus の機能が渡せるか。 ステレオだったり、音質だったり色々。

ブラウザ

それぞれのブラウザの特徴をまとめてみる。

音声コーデックは全て OPUS を採用している。

Chrome

VIDEO コーデック:VP8, VP9, H.264
マルチストリーム:Unified Plan / PlanB
サイマルキャスト:VP8 / H.264

Firefox

VIDEO コーデック:VP8, H.264, VP9
マルチストリーム:Unified Plan
サイマルキャスト:VP8

デフォルトビデオコーデックに VP9 を採用している。

Edge

VIDEO コーデック:VP8, VP9, H.264
マルチストリーム:Unified Plan / PlanB
サイマルキャスト:VP8 / H.264

Safari

VIDEO コーデック:H.264 / VP8
マルチストリーム:Unified Plan / PlanB
サイマルキャスト:VP8 / H.264

最新の状況

W3C WebRTC WG Meeting の資料を見るのが一番速い。

広告

WebRTC SFU Sora

WebRTC SFU Sora

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

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

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

サーバさえあれば起動までは 10 分です。デモ機能が内蔵しているので動かすまで 15 分です。

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.