WebRTC リリースノートが帰ってきたので雑に解説していきます。
WebRTC M104 Release Notes
https://groups.google.com/g/discuss-webrtc/c/PZxgk-aUFhw/m/5CkxzxUMAgAJ
M102 や M103 も含まれているとのことですので、その辺りはご了承くださいませ。
Plan B が Chrome から削除された
最近 WebRTC やっていた人からすると、何それ?という話かもしれません。凄く簡単にいうと WebRTC で利用されている SDP というプロトコルの書き方です。
Plan B というのはマルチストリーム利用時にコーデックがストリーム事に変更できなく全員同じストリームを使う必要がありました。それを解決した Unified Plan というのに置き換わっていくというのがあったのですが、Plan B に依存した製品も多く、かなり時間をかけて切り替わっていき、ついに Chrome から Plan B というのが無くなりました。
WebRTC スタックや SFU 開発者以外は気にしなくて良いです。
Region Capture が入った
凄く簡単に言うとクロップした部分だけをキャプチャーしてストリームとして扱える仕組み。
シンプルユースケース
https://github.com/w3c/mediacapture-region/#sample-use-case
ビデオ会議アプリケーションと生産性向上アプリケーションの2つの主要部分からなるコンボアプリケーションを1つのタブに共存させることを考えます。ビデオ会議は、getDisplayMediaやgetViewportMediaなどの既存/今後のAPIを使用して、タブ全体をキャプチャすると仮定します。ここで、生産性向上ソリューションの特定のセクション以外のすべてを切り取る必要があります。ビデオ会議のコンテンツ、スピーカーのメモ、生産性スイート内の他のプライベートまたは無関係なコンテンツを切り取る必要があり、切り取ったビデオをリモートで送信する必要があります。さらに、2つのコラボレーション・アプリケーションは、互いにクロスオリジンである可能性が高いことを考慮に入れてください。メッセージの投稿は可能ですが、通信はすべて非同期であり、両者間の情報伝達は控えめにした方が簡単でパフォーマンスも高くなります。そのため、フレーム全体のポストを含むソリューションや、レイアウトの変更(スクロール、ズーム、ウィンドウサイズの変更など)に反応するのが遅すぎるソリューションは除外されます。
Chrome Status はこれ
https://chromestatus.com/feature/5712447794053120
W3C はこれ
https://w3c.github.io/mediacapture-region/
コードサンプルを見ればイメージしやすい。つまり produceCropTarget で取得した cropTarget で DOM の一部をメディアストリームトラックとして扱える仕組みです。
/////////////////////////////////
// Code in the capture-target: //
/////////////////////////////////
const mainContentArea = navigator.getElementById('mainContentArea');
const cropTarget = await CropTarget.fromElement(mainContentArea);
sendCropTarget(cropTarget);function sendCropTarget(cropTarget) {
// Can send the crop-target to another document in this tab
// using postMessage() or using any other means.
// Possibly there is no other document, and this is just consumed locally.
}
usrsctp が Chrome から削除された
WebRTC の DataChannel では SCTP というプロトコルがユーザーランドで利用されています。これは DTLS 上に SCTP を載せるためです。
ユーザーランドの SCTP 実装は usrsctp を利用するのが王道だったのですが、度重なるセキュリティ問題や性能改善などがしづらいということで、Google が 1 から C++ で開発したのが dcSCTP で、それが去年 usrsctp に切り替わりました。
そして最終的に usrsctp を削除し dcSCTP 一本になりました。dcSCTP はコミットログを見ているとかなり性能改善を積極的にやっているようで、DataChannel の性能改善に貢献しているようです。
RTCPeerConnection の mediaConstraints 引数が廃止
この引数はそもそも非標準だったので、削除されます。影響範囲も少ないとのこと。
10 bit H264 420 と 422 デコード対応
GStreamer から送られてきた映像がデコードされないという不満に対応する内容。
コミットログはこれ
https://webrtc.googlesource.com/src/+/8545ebae285089c8c442a13226f8aa11e0b8aeca
イシューはこれ
https://bugs.chromium.org/p/webrtc/issues/detail?id=13826
AV1 のデコードに dav1d を利用できるようになった
VideoLAN が開発している AV1 デコーダー dav1d を WebRTC での AV1 でも利用できるようになりました。将来的には libaom ではなく dav1d を利用するようになるとのこと。まずはフィールドトライアルで。
イシューはこれ
1330308 — Dav1d in WebRTC rollout — chromium https://bugs.chromium.org/p/chromium/issues/detail?id=1330308
リリースノートが復活したのはめでたいです。普段からコミットログは見ていますが、まとめてもらえるのはありがたいですね。