2 min read

WebRTC で 720p @ 120fps を実現する約 2 万円の Web カメラで実現する

時雨堂では WebRTC を CLI で利用できる WebRTC ネイティブクライアント Momo というのを OSS (Apache-2.0) で公開しています。

今回 Momo で Intel VPL (ハードウェアアクセラレーター) と YUY2 (無圧縮形式) で 720p @ 120fps を実現できる Elgato Facecam MK.2 という約 2 万の Web カメラを利用して、WebRTC で AV1 で 720p @ 120 fps を実現しました。

これは時雨堂の WebRTC SFU Sora 経由でブラウザに配信した画像です。

仕組み自体は至ってシンプルで Momo に YUY2 で受け取った映像を NV12 に変換して Intel VPL で AV1 形式に変換する仕組みを追加するだけです。

実は元々は Intel VPL は H.265 であれば、 YUY2 形式をそのまま変換できる仕組みがあり、その機能を利用して 120 fps を実現しようと考えていたのですが、Windows かつ Intel Arc (ビデオカード) が必要があるため、断念しました。

そのため今回は libyuv で YUY2 を NV12 へ変換して処理をしています。

120 fps の現実

そもそも WebRTC のような超低遅延で、120 fps を見たことある人自体がほとんどいません。そのため 120 fps のすごさ自体が伝えられないのが現実です。

今回、Momo に YUY2 対応追加したことで、 YUY2 120fps が出る約 2 万円の Web カメラと Intel VPL が利用できるハードウェアを用意するだけで超低遅延での 120fps を実現できるようになりました。

AV1 ではなく H.265 (HEVC)

今回は AV1 で実現していますが、N150 といった安価なハードウェアでは H.265 でも実現できると思います。こちらは追って検証予定です。

ビデオメモリ上での一括処理

今後は Intel VPL 自体の YUY2 から NV12 へ変換する仕組みを VPP (Video Processing Procedures ) ビデオメモリ上で実現し、さらにエンコード処理もビデオメモリ上で行うといった事を検討しています。ただ、これはもしかするとあまりメリットがない可能性があり、チャレンジ枠です。

一応 V4L2 ではカメラからの映像を直接ビデオメモリにコピーする仕組みがあるようなので、これを実現できたらとても楽しそうだなと思っています。


720p @ 120fps を実現する Momo は開発版として既にソースコードとバ イナリを公開しています。YUY2 で 120fps 出せるカメラが手に入った人は是非、試してみてください。

Release 2025.1.0-canary.6 · shiguredo/momo
WebRTC Native Client Momo. Contribute to shiguredo/momo development by creating an account on GitHub.