ボクココ

個人開発に関するテックブログ

Twilio Video または WebRTC におけるコーデックの話

ども、@kimihom です。

WebRTC に関わるサービス開発をしていると、確実に登場してくるのがコーデックのお話。今回は特に Twilo Video でアプリケーションを作ってる中で検討する必要があった話について書いていく。

Twilio Video や WebRTC に関しての概要を知りたい方は、私の以前書いた Twilio Video の記事を合わせてご参照いただきたい。

コーデック・ウォーズ

コーデックに関する政治的なお話は以下のスライドで伝わると思う。

5分で分るWebRTCコーデックウォーズ https://www.slideshare.net/yusukenaka52/5webrtc

個人的な所感で一言で表すと、Apple がダメ って感じだ(WebRTCに関して)。 Safari でようやく WebRTC をサポートしたと思ったら、Safari だけコーデックが H.264だけっていう制約を課して、他の全てのブラウザも H.264 のコーデックを考える必要が出てきてしまった。Safari がもし VP8 のコーデックをサポートすれば、どんだけ物事がシンプルになったことか。

特に日本ではこれが顕著に大事になってくる。なぜなら iOS のシェアが異様に高いからである。若い人はみ〜んな iPhone なので、むしろ iOS をサポートすることが第一歩くらいになってしまっている。海外だと圧倒的に Android の方がシェアが高いのにね。てことで、私は密かに Apple プロダクトが未来の IE になるだろう、いやむしろ既に IE のような存在になっていると感じている。

Twilio のドキュメントに、コーデックに関するお話が書いてあるので紹介する。こちらの記事から画像を拝借すると、以下のような形だ。

まず、P2P(ブラウザとブラウザが直接つながる) 形式の WebRTC であれば、このコーデックはさほど問題にはならない。それぞれにつながるコーデックで最適なのをブラウザ同士で選ぶことができるからだ。

f:id:cevid_cpp:20180211135743p:plain

しかし、SFU(中央に配信サーバーを置く)形式の WebRTC の場合はうまくいかない。真ん中に配信するコーデックを決めなければならないからである。

f:id:cevid_cpp:20180211135830p:plain

てな訳で、SFU で WebRTC で動画を「配信」する場合には、どちらのコーデックで配信するかを決める必要がある。

Twilio Video でのコーデックの選択

一応コーデックで H.264 をサポートすれば、Chrome とかも H.264 に対応しているので見れなくはない。しかし、ちょっと前めの Android 端末とかは H.264 に対応してなかったりするのもあるので結局どちらのコーデックを使って配信するかの対応を決めなければならない。

iOS 11 でようやく WebRTC がサポートされたわけだが、まだシェアがそこまで広まっていないってことを考えると、iOS Safari のサポートを切るってのも決断の一つとしてあるだろう。今後は H.264 で配信できるようにしつつも、現時点では VP8 での配信を検討した方がいいという考えだ。それによってほぼ全ての Android 端末では WebRTC を使えるようになる。

また、Twilio Video では VP8 のコーデックの場合のみ、simulcast っていうオプションをサポートしている。VP8 Simulcast の資料を読むと、これは見る側の端末の解像度に合わせて最適な画質でビデオを見られるようにするために、配信側がそれぞれのサイズで SFU に動画を送る技術のことだそうだ。これによって、今まで一番画質の低い端末に合わせなければならなかったのが、それぞれの端末に最適な画質で配信が可能になる。simulcast は配信するときに画質問題で大事になってくるので、配信時に多めのデータ通信が必要だとしても取り入れるべき技術だと思う。残念ながら、H.264ではこの simulcast は現時点でサポートしていない。

てな訳で、現時点では私の環境では iOS を完全に切って VP8 のコーデックで配信することにした。IE も丁寧にサポートしてあげるから日本では IE が残り続けているように、iOS を丁寧にサポートしてしまえば iOS が残り続けてしまうのだ(!)。

終わりに

本記事では Twilio Video や WebRTC に関わってくると出てくるコーデックのお話について簡単に紹介した。

WebRTC は難しいというより、こうした旧クロスブラウザ問題に似たコーデック問題があったりしてめんどいのが正直なところとしてある。しかし、それらをクリアすれば、あらゆるコミュニケーションがブラウザで完結するという開発者の夢を実現することができる。やってみれば案外 WebRTC はめんどいものではなく、便利なものだ。だからもっと WebRTC に関わる開発者が増えてきてもいいと思う。

さて私がどんなプロダクトを作っているのか、気になる読者もいることだろう(いて欲しい)。てな訳で今度の Twilio Lounge でその全貌をご紹介しようと思うので、もし興味があればご参加いただければ幸いである。まだ Twilio を触ったことがない方でも興味があれば歓迎だ。

Twilio Lounge Vol.7 - TwilioForKWC(株式会社KDDIウェブコミュニケーションズ) | Doorkeeper

Welcome to the WebRTC world! あなたの WebRTC の挑戦を心から歓迎しよう。