1 of 34

WebRTC ステータスアップデート

ニクラス ブルーム (Niklas Blum)

WebRTC Conference Japan - 2016年2月16日��訳者:@iwashi86(岩瀬 義昌)

Confidential + Proprietary

Confidential + Proprietary

2 of 34

60分のアジェンダ

WebRTC 業界のステータス

公開アナウンス

最新の改善

まもなくやってくる機能

Confidential + Proprietary

3 of 34

WebRTC 業界

Confidential + Proprietary

Confidential + Proprietary

4 of 34

WebRTCの鼓動: 5年間でのWebRTCの採用例

  • 850以上の企業がWebRTCを何らかの形で導入
    • 9月時点で720だが伸びてきている
  • 毎月26のベンダがWebRTCを自分たちのサービスへ導入
  • 多くの主要アプリケーションがWebRTCを利用
    • Facebook Messenger
    • Hangouts
    • Wire

Confidential + Proprietary

5 of 34

WebRTCの鼓動: WebRTCサービスプラットフォーム

WebRTC関連の買収が今日までに28件

最近の買収事例:

Acision → Comverse

Speek → Jive Communications

mPortal → Broadsoft

requestec → Blackboard

Tropo → Cisco

ESNA → Avaya

Screenhero → Slack

Jitsi → Atlassian

Acano → Cisco

Confidential + Proprietary

6 of 34

公開アナウンス

Confidential + Proprietary

Confidential + Proprietary

7 of 34

IPアドレスリークに関するアップデート

復習

  • WebRTCはP2Pスタック�
  • P2Pとは最速の経路を探すことを意味する。最速のルートはLANかもしれないし、VPN経由かもしれない。�
  • WebページはCDNを目的として、特に告知せずにデータチャネルを利用しているかもしれない�
  • 問題は、インターネット上のIPアドレスを隠蔽するために、VPNを利用するユーザがいるところで発生する

Confidential + Proprietary

8 of 34

ネットワーク制限エクステンションの動作がデフォルトに

  • カメラ許可を要求するWebサイトは、今までと同様の動作

  • 許可のない全てのWebサイトは、HTTPで利用されるインターフェースの情報のみ取得できるようになる

Confidential + Proprietary

9 of 34

公開アナウンス: ECDSA

  • 楕円曲線署名暗号 (ECDSA)
    • 暗号セットアップのオーバヘッドを1000->50ミリ秒へ削減
    • RSA-1024よりセキュア

  • Step 1: APIによりオプトインで利用 (Chrome 47)
    • pc.generateCertificate({name: "ECDSA", namedCurve: "P-256"})

  • Step 2: デフォルト (Chrome 50)
    • 自身のシステムで動くかテストできる

Confidential + Proprietary

10 of 34

公開アナウンス: test.webrtc.org

オープンソースのツールで以下をテストできる:

  • ネットワーク条件 (帯域, ファイアウォールなど)
  • マイクが接続されていて、正常動作するかどうか
  • カメラが接続されていて、正常に動作するかどうか

貢献をお待ちしてます: github.com/webrtc/testrtc

Confidential + Proprietary

11 of 34

改善と新機能

Confidential + Proprietary

Confidential + Proprietary

12 of 34

VP9

  • VP9が現時点で利用可能で、VP8に加えてビデオ通話のコーデックとして選択できるようになった。appr.tcではすでにデフォルトのコーデックとして利用している。
  • VP9は高品質のビデオ通話を瞬時に作成できる。もし、パケットロス無し&遅延無しで480pの品質のビデオをアップロードできるようなインターネット環境にいるなら、同じ帯域で、15%のCPU利用増だけで720品質のビデオ通話を利用できる。
  • SVCサポートについてVidyoと協働中。
    • Temporal + Spatial を低オーバヘッド
    • コントロールのためにAPIの理解は必要
    • 次のリリースでフラグ付きで最初のSVCを出す予定
  • 詳しくは: https://developers.google.com/web/updates/2016/01/vp9-webrtc?hl=en

Confidential + Proprietary

13 of 34

VP8 vs. VP9 → 30%より小さい帯域削減

Confidential + Proprietary

14 of 34

iOS改善と機能

  • コードの再設計(メンテと開発がより簡単に)
  • 48kHz音声のサポート
  • iOSデバイスにおけるループバックレイテンシの削減 (~95ミリ秒から~60ミリ秒)
  • GSM電話着信時に起きるコンフリクトに関連した複数クラッシュの解決
  • Bluetoothサポートの追加
  • デバイス変更(ヘッドセット、Bluetooth、組込みスピーカ)に関連するissue、クラッシュの解決

Confidential + Proprietary

15 of 34

ビデオに関する一般的な強化

  • VP9サポート、Chromeで利用可能でAppRTCではデフォルト
  • 通話確立時のビットレート調査の改善、より信頼性の高いように
  • イメージ品質に基づく解像度ダウンスケール、HWコーデックを含む
  • 送信側での帯域推定 - 全てのロジックが送信側で実行されるように
  • スクリーン内容に関する画像品質の改善

Confidential + Proprietary

16 of 34

強化: モバイルビデオ

  • キャプチャからテクスチャ と エンコードからテクスチャ のサポート
    • AndroidでVP8 + H.264 HWアクセラレーション
      • Android 5.0以上
      • Qualcommのチップセットで最適に動作
    • iOSにおけるH.264 HWアクセラレーション
      • iOS 8以上

  • かなりよく動作するが、さらなる最適化はこれからやってくる
  • 詳しくはここを追跡して: bugs.webrtc.org, issue 4081

Confidential + Proprietary

17 of 34

強化: デスクトップ向けChromeに対して

  • オーディオ出力デバイスに向けの新しいJS API
    • HTMLMediaElement.setSinkId()
    • オーディオ流通中に音声デバイスを変更できる
  • APIデバイスenumerationへのAPI更新
    • MediaDevices.enumerateDevices()
    • カメラ、マイク、スピーカをリスト表示できる
  • RTCPeerConnectionに対するPromiseベースのAPI
    • M51までに完成予定
    • さらに便利な方法で、WebRTCピアコネクションの制御をJSのPromiseから利用可能
  • IPv6

Confidential + Proprietary

18 of 34

そこまで来てる!

Confidential + Proprietary

Confidential + Proprietary

19 of 34

そこまで来てる: Opus 1.1.2での更新

  • Opus更新では、ARM NEON特有のもの、プラットフォーム・アーキテクチャに独立した最適化を含む
  • 多くのバグ改善を含む。たとえば、DTXモードにおけるノイズ転送を除去することにより、帯域消費の削減
  • スピーチおよび音声のミックスに対する改善:
    • 最大10%のリアルタイムファクタへの改善
    • デコード時の最大15%のリアルタイムファクタの改善
  • クリーンな状態のでスピーチの改善:
    • エンコード時の最大10%のリアルタイムファクタ改善
    • デコード時の最大17%改善
    • 知覚できるレベルの違いは無し

Confidential + Proprietary

20 of 34

Opus 1.1.2 音声・音楽混合

Confidential + Proprietary

21 of 34

Opus 1.1.2 クリーンな音声の改善

Confidential + Proprietary

22 of 34

Chromeのリアルタイム音声向けの音声スタックの強化�

  • デスクトップにおけるデバイス信頼性の改善
    • Macnマイクから何もデータが届かない事象
    • デバイス利用負荷
  • 異常に対する柔軟性
  • CPU利用率の低下
  • ピアコネクション以外からの音声送信元のキャンセルのサポート(例:WebAudio)

Confidential + Proprietary

23 of 34

そこまで来てる: iOS

  • 共有されたAVAudioSessionに対する協調アクセス向けの新オーディオAPI
    • WebRTC音声およびWebRTC以外のアプリケーションで発生するコンフリクトリスクの低減
    • WebRTCがシステムイベントをハンドルし、それらのイベントをアプリケーションに転送できるように。例えば、GSM着信のような場合への追加のハンドリング。
  • VideoToolboxハードウェアエンコーダの修正
    • エンコード動作にマッチするさらに良い帯域制御、クラッシュに対する修正。

Confidential + Proprietary

24 of 34

そこまで来てる: iOS

  • テクスチャパイプライン
    • H.264向けのCPU利用の代わりにGPUを可能であれば利用するようなキャプチャ/レンダをするCVPixelBuffersを利用したIOSurfaceの通過�
  • PeerConnectionのObject−C APIの更新
    • ObjCパラダイムに沿うように古いObjC APIの除去
    • W3CのPeerConnectionAPIへ集中、全てのC++インタフェースの公開ではない
    • 完成したら、CocoaPodに動的リンクライブラリとしての導入を検討中

Confidential + Proprietary

25 of 34

そこまで来てる: ChromeでのH.264

  • モバイルとデスクトップでの制限されたシナリオで動作�
  • 初期のChromeリリースはソフトウェアコーデックで動作*
    • エンコード:OpenH.264
    • デコード: Chromeではlibffmpeg
  • Android/iOSでのWebRTCスタンドアロンと相互動作
  • M50ではフラグ付きでローンチ予定*

 追跡はここから: crbug.com/500605

Confidential + Proprietary

26 of 34

そこまで来てる: MediaStreamRecorder

chromium.orgで最も多かったリクエスト(2500を越えるスター)

  • ローカルとリモートのメディアストリームの録画のサポート
  • Chrome 49 でフラグ無しでローンチ
    • VP8/VP9ビデオ, Opus音声
    • ユースケースについて教えて!

デモ: https://simpl.info/mediarecorder/

Confidential + Proprietary

27 of 34

そこまで来てる: canvas及びvideo要素からMediaStream

  • カメラと同じ方法で、canvas/video要素をストリーム、キャプチャできる
  • カメラ、スクリーンコンテント、映像をcanvas上で送信前に合成
  • ビデオに対してWebGLエフェクトを送信前に適用できる
  • Devチャネルで実験機能フラグ付きでもうすぐ利用できるように
  • デモ: https://cdn.rawgit.com/uysalere/js-demos/master/intro.html

Confidential + Proprietary

28 of 34

そこまで来てる: スクリーンシェア機能の増加

  • Chrome tabを個別に共有可能に
    • プライバシの強化、タブコンテントのみ開示、ブックマークを出さない、通知など
    • Chrome50ではフラグ付きで利用可能
  • スクリーン共有に対する音声サポート
    • リモート側への流す音声を、システムの音声/タブの音声から
    • Chrome50ではフラグ付きで利用可能

Confidential + Proprietary

29 of 34

MediaStream中継

  • WebAudioでリモート音声トラックをサポート
    • 例: リモート音声品質の解析、追加の処理
    • サンプルへのリンク
  • 音声トラックの転送
    • 例: セッションへマイクやスピーカのようなデバイスの追加。例:メッシュネットワークを可能に�Adding devices as mics or speakers into sessions, e.g., enabling mesh-networks,
    • サンプルへのリンク
  • リモートの音声トラックの複製
    • 例: レンダリングから個別音声トラックの処理を分離。例: ローカルスピーカのスイッチ
    • サンプルへのリンク

Confidential + Proprietary

30 of 34

まもなくやって来る: Misc

  • より早いICE、TURNのセットアップ
    • addTransceiver + setTrack APIの追加、answerを待つ間にICE+DTLSのセットアップ
    • 最悪のケースで5秒以上から2秒以下へセットアップ時間を低減
  • インスタントWifi/携帯網へのハンドオフ
    • 最良のケースで1秒以内にWifiから携帯網へハンドオフ
  • 無線管理をさらに効率化�

Confidential + Proprietary

31 of 34

RTCイベントログ

  • chrome://webrtc-internals で更に詳細がトレースできるような、新デバッグオプション
    • BWE, ジッタバッファー、音声・映像セッションの状態
  • パケットのタイミングとヘッダを含むログを作成 & WebRTC internalイベントのタイミングも同様に
  • 何かissueを報告するときには、�このログを付けてくれると�超助かるよ!

Confidential + Proprietary

32 of 34

標準化からのアップデート: WebRTC/ORTC

  • WebRTC 1.0は2016 1QまでにCRを目標としている
    • ORTCオブジェクトを多く取り込む�(RtpSender/Receiver, Ice/Dtls/SctpTransport)
  • さらに直で制御できるような新オブジェクト:
    • 通信中にカメラ、トラック、コーデックをスイッチ
    • RtpSenderでエンコードの最大ビットレートを設定
    • simulcastの設定
  • 2016年のChromeにやってくる

Confidential + Proprietary

33 of 34

標準化からのアップデート: WebRTC/ORTC & RTCWeb

  • WebRTC 1.0の後? WebRTC NV
  • WebRTC NVはORTCとWebRTC1.0を完全に集約
  • アプリは1.0(高レベルのAPI)かオブジェクトAPIを使ってプログラミングできる
    • もし望むならSDPを完全にスルー可能
  • JSEP
    • SDP処理の詳細
    • Unifiedプランの詳細を埋める
  • RSID - RTP送信元ストリームID
    • サイマルキャストストリームをSDP制御

Chromeは2016年の仕様に準拠することを期待。

Confidential + Proprietary

34 of 34

That’s all folks, thank you very much!

Bugs/issues: discuss-webrtc

Contact: blum@google.com

Confidential + Proprietary

Confidential + Proprietary