ボクココ

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

WebRTC コーデックの現状に関する考察

ども、@kimihom です。

f:id:cevid_cpp:20181026205705j:plain

WebRTC(Web Real-Time Communication) で大人数の配信や通信系サービスを提供するってなると、必ず課題として上がってくるのがコーデック。このコーデックに関しては以前の記事に概要を記した。

www.bokukoko.info

本記事では現状の WebRTC コーデックに関して私の調査範囲ではあるが概要をまとめたいと思う。

コーデック VP8 と H.264

最近の WebRTC で大きな話題となったのが、Safari の WebRTC サポートだ。とりわけ iOS の Safari で WebRTC が使えるようになったというのは、今後の WebRTC アプリケーションを開発する上で大変重要な進歩だった。

ただこれには条件があって、Safari では H.264 のコーデックしかサポートしていないという点がある。他の Chrome や Firefox などは、VP8 と H.264 のコーデックをどちらもサポートしているため、この点は問題ではない。しかし、だからと言って気軽に H.264 コーデックに切り替えると以下のような課題に当たった。

  • iOS Safari で映像は見れるが、音が聞こえない?
  • DataChannel でうまくデータを送信できない
  • 相手が日本語文字を DataChannel で投稿すると文字化けする
  • Android 端末 HUAWEI が H.264 コーデックをサポートしていない

最初の3点は WebRTC SDK 側の Safari サポートが追いついていない可能性も考えられる。そういう意味では純粋に SDK のサポートを待つだけで良いのだが、最近になって 4つ目の問題である人気の Android 端末が H.264 コーデックをサポートしていないという事実が判明した。つまり、H.264 のコーデックをサポートすると Android の多くの端末で視聴できないという問題が発生してしまう結果となった。これは相当痛い問題である。

今後の判断

現状を踏まえてどんな選択肢があるだろうか。

0. 視聴できないデバイスや OS があることを認める

現状でも PC の Chrome や Firefox に限定さえすれば問題になることはない。ブラウザやデバイスを限定することでどれだけ問題が起きるかによって、以降の選択肢が出てくることになるだろう。

1. ひたすら待つ

Safari や IE、iPhone、Android 端末などで共通の WebRTC コーデックが出てくるのを信じて待つという方法がある。これはいつになるかわからないけど、たぶん共通化の流れになっていくと思う。

2. iOS, Android はネイティブアプリを用意する

なぜか iOS, Android 共に ネイティブアプリでなら正しく WebRTC が使える環境が用意されている。だから現状すぐにでも WebRTC をあらゆる端末でサポートしたい!ってなら専用アプリを用意するしか方法がない。なのでアプリ開発の得意な会社が、去年あたりにこぞって配信系のサービスを出してきているのはそれが理由だ。とりわけ BtoC の場合はアプリで完結するサービスってケースが多いから、現状でも問題なく開発することができる。

3. 視聴側は WebRTC を使わない

WebRTC で配信の形式をとる場合、多いのは圧倒的に視聴者の方だ。視聴者が配信に参加したりする必要がない場合には、視聴者側は WebRTC を使わせないという方針を取ることができる。Youtube Live は WebRTC が使われているのに、あらゆる環境で視聴が可能なのは、この WebRTC からビデオへの変換ができているからだそうだ。

YouTube LiveのWebRTCサポートを技術的にみた感想 – meteor – Medium

視聴者側はWebRTCではなく、トランスコード処理を行いMPEG-DASHまたはHTTP Live Streamingで配信されています。

もちろん、この方法でも配信側は WebRTC の環境が必須となる。とはいえ圧倒的に視聴者の方が多い環境であれば、配信者が Chrome 限定にさせるくらい我慢してもらうのは大きな問題にはならないだろう。個人的にこの 3 の方法は特に注目している。 とはいえこの変換コストはなかなか高そうなので、技術的な部分で課題が出てきそうな感じはする。

終わりに

ちなみに私の場合、現状は 0 の判断をしつつ VP8 のコーデックで Chrome, Firefox, Android 端末でのサポートをし、 1 や 3 の発展を待つ決断をしている。日本では IE の利用率が高いとかそういう問題はあるけど、IE を使うような層が WebRTC のような新しい技術を使った新しいサービスに来るとは考えづらい。日本ではさらに iPhone ユーザーも多いってのが非常に厄介な問題だ。これに関しては現状 H.264 でも iPhone ブラウザでは 正しくWebRTCで視聴できない環境なので、 Android 端末に最適化した VP8 にした方が正しく動作する端末が多い。私はそんな判断をしている。

WebRTC は発展途中だからこそ、誰にでもチャンスがある面白い技術だと思う。それぞれの判断が最終的にどう向くかはわからないけど、私は私の信じた道を突き進むだけだ。