見出し画像

WebRTC ループバック時のレイテンシー測定

開発メモ for プロジェクトメンバー用。

WebRTC技術の使用の検討材料として、ネットワークを介さない「素」のレイテンシーをエンド to エンドで測ってみる。今回は、クライアントプログラムを用いず、ブラウザのみを使用する。

条件

- Windows 10 Pro
- Edge (new version) と Chrome で測定
- ネットワークを通さず、WebRTCだけのレイテンシーを測定
- 拍手をマイク入力してヘッドフォン出力
- 別マイクで入力タイミングを計る
- デジタルオシロスコープで測定
- マイク入力&ヘッドフォン出力とも、Windows デスクトップPC標準のオーディオデバイスを使用→Surface ProやMacBook Proなどでも大差ない


結果と考察

画像1

・https://webrtc.github.io/samples/ 上のサンプル、
Audio-only getUserMedia() output to local audio element をそのまま使用

・上側が Edge、下側が Chrome
Chromeのほうが14ミリ秒程度早い(レイテンシーが小さい)

・上側の測定結果には、マイク入力をそのままヘッドフォン出力に返した場合の波形も含まれている (= Device loopback)。これに約85ミリ秒かかる

・つまり、WebRTCのレイテンシー中85ミリ秒はデバイスとのやり取り(デバイスからデジタル化した音声データ入力をアナログ化してヘッドフォンに出力する)に費やしている。

・Edge の場合、WebRTC(プロトコル相互変換と圧縮→伸張)そのものにかかっている時間は約60ミリ秒、Chrome の場合でも 48ミリ秒。

・デバイスとの入出力は、たとえばASIO(もしくはWASAPI)などの高速入出力と、レイテンシーの小さいオーディオインターフェース(往復4ミリ秒など)を使用すれば10ミリ秒以下にできると思われるが、WebRTC内ので改善はどうか?半分にできる余地があるだろうか?

・ただプログラミングインターフェースはとても分かりやすく、またブラウザ上では非常に高機能なので、実装ははるかにやりやすい...。

Next Action

悩ましいなあ。

もう少しWebRTCベースで研究・プロトを続けてみるか...


サポート Welcome! いただいたサポートは今後の研究開発や寄付に使わせていただきます。