はじめに
サービス開発統括本部のイチノです。リモート製品 (Optimal Remote, Optimal Second Sight, ポケットドクターなど遠隔地とコミュニケーションするための製品) で使われるコア技術をまとめた Communication SDK を担当しています。 今回は、 2020年2月28日に公開された WebRTC M81 リリースノート について、私なりの解釈を交えたメモです。 WebRTC M81 は、2020年3月17日リリース予定*1の Chrome M81 に搭載されます。
アナウンス
Google Chrome M81 で navigator.mediaDevices.enumerateDevices の挙動が変わる
Chrome M80 以下では、カメラ・マイクデバイスの許可の有無に関わらず、 enumerateDevices の Example コードで、デバイス一覧を全て取得できました。
Chrome M81 以上では、デバイスの許可をユーザーから得られなければ、デバイス一覧を取得することができません。同 API でデバイスが存在するかどうかの判断は、可能です。
Chrome M81 Beta での、カメラ・マイク・スピーカーを搭載したマシンで、デバイス許可を得ていない状態での、実行結果。
audioinput: id = videoinput: id = audiooutput: id =
Chrome M81 Beta において、スピーカーを搭載したマシンで、デバイス許可を得ていない状態での、実行結果。
audiooutput: id =
非推奨
RTCConfiguration の iceRegatherIntervalRange を削除
RTCConfiguration の iceRegatherIntervalRange を削除されます。 iceRegatherIntervalRange は、どのくらいの間隔でICE情報を再収集するかのオプション。 ICE を再収集し、既存の接続済みICEとパフォーマンスを比較して良い方のICEに自動で移行する。移行前のICEは破棄されます。
参考 https://bugs.chromium.org/p/webrtc/issues/detail?id=7969
デスクトップエコーキャンセラー AEC2 を削除
AEC3 に移行していたがバイナリには AEC2 が含まれていたので、 AEC2 をバイナリから削除。
機能とバグ修正
機能 11218 ビデオエンコーダが処理するピクセル単位を VideoSink から VideoSinkWants を経由して要求できるようになりました。
機能 1040584 RTCPeerConnection.close を呼び出した時に onsignalingstatechange でイベントが発火しないようになりました。
バグ 11257 既定値として pacing_controller.h で制御しなくなりました。
バグ 11180 AudioProcessing の config 構造体で、ユーザー定義のコピーコンストラクタを要求。
バグ 11193 ハイパスフィルター処理前にゲインを適用。音声入力データに対してい直接ゲインを調節できるっぽいです。
バグ 11241 APM(Audio Processing Module) での統計・メトリックスレポートを取得する時に、音声の入出力用ロックの使用をやめて、 GetStatistics 用ロックで、 GetStatistics のオーバーヘッドを削減。
バグ 11235 APMのモジュール内、ロックのとり方を改善。
バグ 11278 オーディオ関連の一部ログを、 INFO から VERBOSE に変更。 (VERBOSE は、通常のデバッグでは必要のないログ。診断用ログとして役立つ。 rtc_base/logging.h を参照。 )
バグ 11196 特定条件で、音声ストリームの帯域幅計測用のパディングビットをカウントされていなかったので、カウントされるように修正。
バグ 11015 小さな帯域幅だったため無効化されたストリームの getStats で、制限された解像度・フレームレートがカウントされていなかったので、カウントされるよう修正。
バグ CL rtc::Thread::PostDelayedTask メソッドが追加された。 10294 での対応が入っているようです。
バグ 11259 libevent で実装された TaskQueue が、高稼働状態でタスクを落としていた挙動を、落とさないように修正。
バグ 8876 11259 と同じ。
バグ 11081 Windows 10 デスクトップでシステムでマイクアクセスが無効になっている時に CoreAudio がアサーションするようになりました。アサーションでクラッシュするのかなと思い、Chrome M81 beta on Windows 10 で動作確認してみました。再現手順の通り、 Windowsの設定 -> プライバシ -> マイク -> アプリがマイクにアクセスできるようにする -> OFF にしても、Chrome がクラッシュするということはなかったです。
バグ 11317 RTCInboundRtpStreamStats に fecPacketsReceived と fecPacketsDiscarded が含まれるようになりました。
バグ 10173 StatsReport を ToJson した結果を、JSONとしてパースできるようになりました。
バグ 11297 GetNormalSimulcastLayers が TLs == 0 を返すことができるようになった。サイマルキャストのテンポラリレイヤーを示す値が定義されました。
バグ 11265 SDP の a=fmtp (Format-specific parameters) がコーデックに伝搬されるように修正。
バグ 699036 RTCPeerConnection.close を呼び出した後、 signalingstatechange が呼ばれないようになりました。
おわりに
今回のリリースで Chrome への挙動に関して影響が出るのは、 enumerateDevices の挙動でした。 他は、音声系の修正が比較的多く入っている印象です。
オプティムでは、 WebRTC 限らず様々なことに興味があるエンジニアを募集しています。
*1:Chrome M81は、Chromeのリリーススケジュール によると執筆時点で、2020年3月17日リリース予定。