見出し画像

WebRTC最新情報 #1 ~libwebrtc M89リリースなど~

こんにちは、SkyWay TechSol(テクニカルソリューション)チームの@monmeeです。

WebRTC最新情報マガジンでは、WebRTC業界の最新情報やブラウザのWebRTC実装状況について定期的に皆様にお届けします。

はじめにこのマガジンを作成するにあたっての経緯を簡単にお伝えします。
SkyWayチームには「WebRTC Researchチーム」と呼ばれる調査チームを設けています。
WebRTC Researchチームは、チーム全体のWebRTC力向上を目的の1つとして、WebRTCに関するIssueや業界動向を調査してSkyWayチームに情報共有しています。
主な調査元サイトは以下の通りです。

WebRTC Discuss: WebRTC全般についての議論が行われるGoogle Groupです。
Chromium bugs: Chromiumブラウザに関する不具合情報が集約するサイトです。
Bugzilla: Firefoxブラウザに関する不具合情報が集約するサイトです。
Safari Webkit Bugs: Safariブラウザに関する不具合情報が集約するサイトです。
BlogGeek.me: testRTCの創業者Tsahi氏が運営するWebRTC情報サイトです。
WebRTC Weekly: Tsahi氏が運営するWebRTC関連ニュースをまとめたサイトです。
webrtcHacks: WebRTC愛好家が運営するWebRTC開発者向けブログです。
rtcsec: リアルタイム通信(特にSIP、VoIP、WebRTC)のセキュリティに特化して言及するブログです。

これらの情報は、リアルタイムコミュニケーションを用いたサービスを運用する開発者の皆様にとっても、新たな課題の発見や既存サービスの改善に活用できるのではないかと考えました。
そこで、これらの情報を「WebRTC最新情報」と題して、noteに定期的に情報発信していくこととしました。

【免責事項】
 本調査は素早く幅広い調査を目的としており、本記事にて提供する情報の正確性・妥当性につきましてはその保証をするものではありません。
ご意見があれば以下までお問い合わせください。
https://support.skyway.io/hc/ja/requests/new

[libwebrtc] libwebrtc M89リリースノート

大きな変更点は以下です。

1. PSA: plan-b remove
マルチストリームを送る時のSDPの表現形式の1つであるPlan Bが、M89よりDeprecation Warningとなりました。
M93(2021/8)にはデフォルト削除(オプションを付ければ利用可能)となり、M96(2022/1)には完全削除となる予定です。
SkyWayをお使いの場合には、v2.0.0以降にて対応済みです。

2. PSA: RTP payload type枯渇に伴い35~65をdynamic rangeとして使えるようになった
RTP payload typeはコーデックやRTP制御方式の種類と数字をdynamic rangeとして動的に紐づけたものです。
今までは96~127までがdynamic rangeとされていましたが、デバイスの対応コーデック増加に伴い、RTP payload typeが枯渇してきました。
そこで、35~63が新たにdynamic rangeとして解禁されました。

ただし、Chrome M89未満のバグで、96未満のrangeを認識しないというバグが報告されています。
https://groups.google.com/g/discuss-webrtc/c/w1SY3bozdvs

このバグはM89で修正されています。
また、H264/VP8などの既存コーデックを利用している場合は従来のrangeが使用されるため、直近でサービスに影響を及ぼすものではありません。
しかし、今後新しいコーデックやRTP制御方式(FlexFECなど)の登場により36~63のpayload typeが使用された場合、M89未満のChromeでネゴシエーションできない可能性があります。
今後、SkyWayを用いた開発に影響を及ぼすことが確認出来た場合には、公式サイトにてお知らせします。

3. PSA: SDPで a=extmap-allow-mixed がデフォルトに
a=extmap-allow-mixedはRTPヘッダ拡張を1byteから2byteにまで広げる拡張属性です。
これはM71から追加されたものですが、M89からデフォルトで使われるようになります。
M71以前のChromeでは、SDPが解釈できずエラーになります。
この変更によるSkyWayへの影響はお知らせに掲載済です。
Chrome 71以前及び、Android SDK v1.0.6以前、iOS SDK v1.0.6以前、WebRTC Gateway v0.1.0以前をお使いの場合は、アップデートを行ってください。
https://support.skyway.io/hc/ja/articles/900005631283

※2021/3/2にChrome 89は正式リリースされました。

[Chromium] M90でAudioEncoderが利用可能に

WebRTCではなく、WebCodecsに関する内容です。
WebCodecsはWebRTCやWebSocketに代わる通信技術と言われているWebTransportを支える、コーデック周辺技術です。
M86時点からWebCodecが使えるようになりましたが、エンコードに関してはこれまでVideoEncoderのみ利用可能でした。
M89かM90では、OpusのみですがAudioEncoderが利用可能になることが示唆されています。

[Chromium] RTP Video StreamのStatsにjitterがM90で追加予定

Chrome M90は4/13リリース予定です。

[Chromium] M91からTURNのportが443か1024以上でないと弾かれるようになる

5/25リリース予定のM91で入る予定の変更です。
この変更はNAT Slip Streaming攻撃に対する対策でもあります。
https://bugs.chromium.org/p/webrtc/issues/detail?id=12497

なお、SkyWayのTURNはport 443, 1024~65535を利用しているので、この問題による影響はありません。

[Chromium] Android ChromeでMediaStream.stopでfreezeする

Chrome M86以降でActiveなVideoTrackを消すと固まる事象が確認されています。
https://issuetracker.google.com/u/1/issues/173142922

現在紹介されている、この事象に対するワークアラウンドは以下の2つです。
1. removeTrack()する
2. srcObject=nullしたあとtrack.stop()
https://github.com/twilio/twilio-video-app-react/issues/355#issuecomment-780368725

[Safari] Safari Technology Preview 120リリース

2021/2/11にリリースされました。
TP118の時はフラグを付けないと利用できなかったWebRTC VP9 profile0がデフォルトで有効になっています。
正式版にこの変更が入れば、VP9コーデックを利用した通話が今後増える可能性があります。

※2021/3/24時点ではSafari TP 122までリリースされています。

[Safari] iOSのGPUProcessでGPU WebRTCコーデックをデフォルトで有効に

GPU上でコーデック処理してくれるようになることで、通話時のパフォーマンス向上の可能性があります。

ビデオコーデックごとのパフォーマンス比較

画質、フレームレートごとにおける各ビデオコーデックのパフォーマンスをまとめた記事です。
AV1だとエンコード・デコードともにCPU使用率的には約2倍のコストがかかっているように見えます。ただし、libaomのパフォーマンスを15%程度向上させる改善も行われているようです。

CPU使用率を抑える手段であるHWアクセラレーションについても進展はあるようです。
いくつかのハイエンドモデルGPUについてはAV1のHWデコードに対応しています。
https://pc.watch.impress.co.jp/docs/news/1282219.html

また、MediaTek社製のSoCであるDimensity 1000を搭載した一部のハイエンドスマホ端末もAV1のHWデコードに対応しているようです。
ただし、AV1のHWエンコーダ対応に関してはまだ広がっておらず、Web会議のように双方向通信する場合ではエンコード処理の負荷がネックとなる可能性があります。

この記事が気に入ったらサポートをしてみませんか?