2016/3末時点のWebRTCブラウザ対応状況まとめ
はじめに
WebRTCは様々なブラウザでサポートが進んでいる。これらの対応状況について世の中に多くの情報があるが、アップデートされていない情報も多いため、最新の情報を追うのはなかなか骨が折れる。そこで、本記事では2016年3末時点での対応状況をまとめていく。
本記事を読むと得られるもの・得られないもの
- 得られるもの
- 2016年3末時点での各ブラウザにおけるWebRTCの対応状況
- 得られないもの
- ソースコードレベルの実装詳細
対象読者
- WebRTCに関わっているエンジニア、WebRTCの動向に興味がある人
- WebRTCを多少なりとも知っている人
では本題に進む。
Google Chrome
WebRTCの提唱をはじめたGoogleだけあって、WebRTCの黎明期から様々な機能を提供している。現在も活発に開発が進んでおり、Chrome/FirefoxにおけるWebRTCのマイルストーンの記事に項目がまとまっている。
映像コーデック
これらの中でも特筆すべきは、H.264コーデックのサポートだ。WebRTCの映像コーデックは、IETFの場でプロレスのような議論があり、最終的にVP8とH.264の両方の実装がmandatoryであるという結論になった。Chromeもそれに準じており、当初はVP8のみのサポートであったものの、最新の開発版ChromeにてH.264がフラグ付きで利用可能になった。ただし、ソフトウェアコーデックのみのサポートである。H.264を利用できるようになると何が嬉しいかというと、特にiOSのようにH264のHWエンコーダ・デコーダがある端末は処理負荷を非常に下げられる点がある。
また、コーデックで言えばVP9の対応も開始している。VP9はVP8に比べ、消費帯域が少ないが、処理コストは高く微妙にレイテンシが上がる、という特性がある。詳細はこの動画内部で説明されているので参照されたい。
WebRTC API
W3C側のドキュメントにて、ORTC由来のAPIが多く規定されはじめている。ただし、ブラウザでの実装はまだまだ進んでおらず、特にChromeで利用できるものはほとんどない。(後述するFirefoxのが進んでいる)
Firefox
Chrome同様にWebRTCを利用できるブラウザである。WebRTCの実装面でいえば、より標準(IETF、W3C)に近い形で実装が進んでいるのがFirefoxだ。たとえば、RTPSenderというAPIなどが既に実装されており、Chromeより進んでいる。
Firefoxで特筆すべきは、Simulcastへの対応だ。すでにリリースノートにも多く登場しており、 pref設定によってDev版のFirefoxで利用できる。詳細は WebRTC in Firefox - Kranky Geek, Bangaloreを参照願いたい。
Microsoft Edge
Windowsの新ブラウザであるEdgeは、WebRTCに先行してORTC版の機能を実装している。ORTCは、以前の記事で書いたように、WebRTCの各要素を低レイヤで切り出した仕様であり、ORTCの部品を組合せることによって、WebRTC1.0の仕様(現在のChrome/Firefoxのサポートする仕様)と相互通信できる。
そのEdgeに関して、個人的に驚くべきニュースだったのは、WebRTC 1.0の開発をはじめたことだ。当初はORTCを組み合わせたshimのような部品を利用しなければ、Chrome/Firefoxと通信できなかった。しかし、開発が完了すればSDPを利用できることになり、shim無しでChrome/Firefoxと相互接続可能になる。
ただし、MS Edgeのサポートする映像コーデックはChromeやFirefoxの提供するH.264とやや違っており、映像通信はまだできない。
IE
プラグインを利用すればWebRTCを使える。
Safari
IE同様に、プラグインを利用すればWebRTCを使えるが、Safariにはかなり光がある。How to Test / Evaluate WebRTC in Safari ?で説明されているように、すでに一部のWebRTC APIは姿を見せ始めている。たとえばgetUserMediaはnightly版で存在するものの、Permission画面が出ないため使えない。
ちなみに、SafariはWebkitにApple製のGUIをかぶせて、機能を削ったものであり、webkit自体にはWebRTCの実装がかなり進んでいる。あとはApple次第。ちなみに、Safari Technology Previewが始まったので、これで早く使えないかな、と期待している。
まとめ
2016/3末時点での各ブラウザにおけるWebRTCの対応についてまとめた。おそらく1年後に書いたら、まるっと内容が変わってるだろう。。。