マルチコーデックサイマルキャストが動いた日

V
Mar 12, 2024

WebRTC にマルチコーデックという概念が組み込まれました。凄く簡単に言うと「受信するコーデックが異なっても特に関係なく再生できるようになる」というものです。

つまり H.264 で受信している映像のコーデックが AV1 に切り替わってもシームレスに再生できる仕組みです。

この仕組みを利用し、マルチコーデックサイマルキャストという仕組みを実現してみることにしました。

サイマルキャストとは複数画質を同時に配信する仕組みですが、これは同一コーデックを利用します。これをマルチコーデックにするという仕様は RFC で定義されています。

ただ libwebrtc にはこの仕様は実装されていないので、libdatachannel を利用してマルチコーデックサイマルキャストを実装しました。

結果、動きました。H.264 から AV1 へ、AV1 から H.264 へシームレスにコーデックを切り替えられています。

https://gyazo.com/796dc673ae3dca84d07de9945f70bc3b

なぜこんなややこしい仕組みを実現しようとしているのかという話ですが、AV1 や H.265 (HEVC) が再生できないクライアント向けに H.264 を配信しつつ、AV1 や H.265 が視聴できるクライアントではビットレートを抑えて H.264 より低いビットレートできるようになります。H.265 の場合は特にハードウェアアクセラレーターが載っている端末が多いというのもあり、CPU 使用率も下げられます。

まだ動いただけで課題は色々ありますが、なんとか動いて、嬉しかったです。思った以上にシームレスに動いて感動しました。

--

--