📊

WebRTCのstatsについて入門した

2022/05/22に公開

WebRTCとは

HTML5から策定されたAPI規格で、リアルタイムにビデオ/オーディオ/データ(デバイスの画面キャプチャなど)をやり取りを行います。
プラグイン無しでボイスチャットやビデオチャットをブラウザ上で実現可能になります。

通信方法は、P2P、MCUやSFUがあります。
P2P通信はコンピューター間で直接通信を行う際のアーキテクチャであるのですが、
P2P通信では複数人つなぐと端末の通信量と負荷がかかってしまうためサーバーを経由する方法として、SFU(クライアントからのメディアデータを加工せずにそのままサーバー代理で他のクライアントに送る)などがあります。

公式のGetting Started
https://webrtc.org/getting-started/overview
WebRTCを使った通信方法について理解するのにおすすめ
https://qiita.com/daitasu/items/ae21b16361eb9f65ed43

statsについて

WebRTCのstatsにはICE Candidateの情報が含まれます。
ICEとは相手ブラウザに到達する可能性のある通信経路に関する情報になります。
その経路候補をICE Candidateとしてブラウザ間で共有しないと通信はできない仕組みになっています。

仕様はこちら。
https://www.w3.org/TR/webrtc-stats/

statsを確認してみる

Chromeの場合、 chrome://webrtc-internals/ にアクセスするとstats情報が取得できる
GoogleMeetなどビデオ通話してみるとstats情報が出てくるのが確認できると思います。stats情報はタブごとに確認することが可能になっています

RTCIceCandidatePair_XXX
RTCIceCandidatePairで、これは2つのWebRTCエンドポイント間の実行可能な接続を構成するICE候補のペアということです。
太字になっているRTCIceCandidatePairは現在使われている有効なTransport/輸送路となります。
詳細は WebRTCデバッグ入門 - Qiitaにある図 が参考になります!

stats情報はRTCIceCandidatePairStatsとなります。
太字以外は通信で使われていないためbytesSentが0になっていたりavailableOutgoingBitrateがなかったりしています。

詳細な見方はSkyWayトラブルシューティング入門 - Qiitaが参考になります!

statsを取得する

stats情報が取得できるAPIが用意されています。
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_Statistics_API

WebRTCのサンプルアプリがたくさんあるので、実装の参考になります。
https://github.com/webrtc/samples
statsに関するサンプルアプリもあります。
https://webrtc.github.io/samples/src/content/peerconnection/constraints/
また、WebRTCで実装した内容が動かない時の原因の切り分けにサンプルアプリを動かしたりしています。

Discussion