WebRTC での 4K 配信の現状
WebRTC を利用して 4K@30 配信をしたいというのは一定の需要があるようです。超低遅延で超高画質は確かに夢があります。
ただ現時点では、かなり限定された環境でしか配信することはできません。
ここでの 4K における画質の定義ですがコーデックが H.264 、解像度が 2160p (3840×2160) 、ビットレートは 35~45 Mbps とします。この値は YouTube にアップロードする動画の推奨エンコードから持ってきました。
4K を WebRTC でどうすれば実現に近づけられるのかを書いていきます。
この資料は P2P は一切考慮していません。SFU のみをターゲットとしています。P2P ではブラウザ側の制限が入るためビットレートが 5Mbps 以上上げることができないからです。
つまり P2P で WebRTC を利用しての 4K はその時点で 4K の画質を満たしていません。
ビットレートに注目する
まず残念な話をしますが WebRTC では 35–45 Mbps は今の所は無理です。パケット数が恐ろしい数になってしまうため、配信側が早々耐えられません。そのため現実的なビットレートに落ちることになります。この時点で画質が下がってしまいます。
WebRTC で今の所、現実的なビットレートは自社製品ですと 15Mbps です。他であればおそらく 5Mbps でしょうか。他で 5Mbps 以上の性能を出しているのを見たこと無いのでおそらくクライアント側の制限で詰まっているかと思います。
そのためまず WebRTC で 4K 対応を利用したい場合は、対応ビットレートを気にしてください。H.264 や VP8 を利用しているのであれば、本来は 4K は 30Mbps 以上必要なはずです。
対応ビットレートが公開されていない場合はおそらく 5Mbps で天井でしょう。4K で 5Mbps と書けないから書いていないと考えてもらって良いです。
つまり 4K を実現するには最低でも 10Mbps 以上のビットレートでの配信を実現できる必要があります。
クライアントに注目する
ブラウザで 4K が利用できるのは Windows の Chrome だけです。macOS の Chrome では 4K 配信は行えません。そのため Windows で Chrome と書いてある場合は 4K 配信が実現できる可能性があります。
ただし、それはビットレートが 5Mbps に絞られている可能性が高いです。これはクライアント、つまり Chrome 側の制限があるためです。
では、実際にどう実現するかというと Native Client を利用して Linux 上から配信するというのが今の所、実現可能になっています。
自社の製品であれば Momo という Native Client を利用することで 4K@30 の配信が可能です。ただし配信サーバとして自社製品である Sora を利用した場合限定になります。
理由としてはビットレートを引き上げる命令を Sora 側から送る必要があるためです。
$ momo --no-audio --video-codec VP8 --fixed-resolution --video-bitrate 15000 --framerate 30 --resolution 4K sora wss://example.com/signaling test-4k
まとめ
現状で自社で確認できている 4K のリアルタイム配信は 1 秒近い遅延があり、超低遅延とは言いにくいのが現状です。これはソフトウェアエンコードのためエンコードが実時間で終わっていないという可能性が高いと考えています。
ソフトウェアで 4K をリアルタイムエンコードするにはかなり無理があります。そのため今後は VP8/VP9 で 4K 対応のハードウェアエンコーダを積んだチップに対応したネイティブクライアントが必要になると考えています。
4K での超低遅延配信に興味あるかたは時雨堂までお問い合わせください。