WebRTC の必須コーデックは VP8 と H.264 と方針が決まっているが、Safari が H.264 だけしか対応しなかったりと、なんだか色々荒れている。
そこで VP9 ですよ、というのがこの記事の言いたいことだ。
VP9 は VP8 の半分のビットレートで同等の画質を実現するということと、H.265 よりも効率の良さを実現するというのを目的として作られているコーデックだ。
GitHub のミラーはこちら、開発は活発。
https://github.com/webmproject/libvpx
ただ、VP9 はいいことばかりではない。VP8 にくらべると 20% 程度 CPU 使用率が上がる。これはより高圧縮にするためだ。
さらに H.264 と違い、ハードウェアアクセラレータがほとんどない。ただ、最近では Intel の Kaby Lake には VP9 のハードウェアアクセラレータが載っている。これは素晴らしい。
まだブラウザ側が対応しているかどうかは分からないが、今後を考えると楽しみだ。
CPU 使用率の上昇やハードウェアアクセラレータが少ないこと考えてもビットレートが半分になるのは大きい。
また、実際使ってみると、VP9 は動きにとても強い。VP8 や H.264 と比べると差は歴然だ。特にスマホだと VP8 や H.264 を利用すると手持ちでの動きが激しいとブロックノイズがでまくる。VP9 はスムーズだ。
ちなみに … WebRTC の場合はずーっと配信していることもあって、そもそも CPU を食べる。さらにSFU を利用する場合はエンコードする映像は一つで済む。P2P だとツライかもしれないが SFU と相性はとても良い。
むしろビットレートが抑え込まれる恩恵が大きすぎる。
- VP8 で HD だと 2Mbps 程度最低でも必要になる
- VP9 であれば HD 画質の配信は 1Mbps で良くなる
50% の削減。SFU のようにサーバ経由の製品を利用する場合はこのビットレートが下がるのはとても大きい。転送量が安くなるからだ。
ということで、WebRTC SFU Sora の次のリリースからデフォルトで利用するビデオコーデックタイプを VP9 に変更する。結局 Safari が入ると H.264 がメインになるのはわかっている。ささやかな抵抗だ。
VP9 で HDの映像をおいておく。これは WebRTC を利用して getUserMedia からの配信を WebRTC SFU Sora で録画した映像だ。
1920x1080 (Full HD) で 5Mbps で 40 秒の映像だ。容量は 24.4 MB。WebRTC でここまでの映像が配信できることを知っておいてほしい。VP8 や H.264 であれば、10Mbps は必要になる。
https://dl.dropboxusercontent.com/u/89936/8d096fb4-6fd2-40d6-9637-115062a82bc6.webm