ある案件でWebRTCを使うことになりましたが、ググって情報を集めるのに難航しました。整理も兼ねて、iOSにおけるWebRTCの利用方法をまとめてみました。
※この記事はiOS側での実装について記載しており、インフラの構成、サーバーサイドの実装については言及していません。
WebRTCとは?
ブラウザやモバイルアプリ上で音声通話、ビデオ通話などのReal-Time Communication(RTC)を実現するための技術です。Googleを始め、Mozilla、Operaなどがサポートしています。 公式ページ自体はGoogle Chromeチームが運営しているようです。
対応ブラウザとプラットフォーム
Google, Mozilla, Operaが開発しているので、各社ブラウザはもちろんのこと、AndroidやiOSもサポートしています。
- Chrome
- Firefox
- Opera
- Android
- iOS
ビデオ通話や音声通話をするには?
公式で提供されているサンプルがあります。その他にもWebRTCを活用した WebRTC samples が提供されています。ですが、これらすべてブラウザ上で動作するサンプルです。
- ビデオ通話:
Peer connection - 音声通話:
Peer connection: audio only
残念なことに、公式のiOSサンプルはありません!
ですが、公式のAppRTC をiOS実装したISBX/apprtc-iosがあります。
リポジトリをCloneしてビルドすると、Room IDの入力が求められるので、適当に入れ、同じアプリを他の人の端末にビルドして、同じRoom IDを入れると、その人とのビデオチャットがスタートします。
iOS向けのフレームワークってあるの?
公式 では、自分でビルドしろって言ってきますが、 かったるいので CocoapodやCarthageで気軽に入れられるようにしてくださっている方々がいます。
先程紹介したAppRTCのiOS実装です。AppRTCをそのまま利用したい場合は、podでのインストールも可能です。
pod install AppRTC
SSL Peer Connectionの初期化、ビデオチャットの追加方法もコードサンプルとともにまとめられています。
-
libjingle_peerconnection
先程のISBX/apprtc-iosのサンプルでもこのフレームワークを使用しています。WebRTC本家に含まれているiOSのビルドスクリプトを独自に修正し、生成したバイナリをフレームワークとしてCocoapodsで配布してくださっています。 -
Anakros/WebRTC
こちらはCocoaPodsでも、Carthageでもインストール可能です。libjingle_peerconnectionとおおよそ一緒なのですが、一部含まれているヘッダファイルが異なります。
https://chromium.googlesource.com/external/webrtc/にあるwebrtc/build/ios/build_ios_libs.sh
を使ってビルドしています。
こちらは、i386, x86-64アーキテクチャに未対応なので、シミュレーターでのビルドは不可です。
同じWebRTCのバイナリから生成されているものなので、どれを選んでも基本的には問題ないと思います。
僕はCarthageでインストールできるArakros/WebRTCを選びました。
まとめ / 次にやろうと思っていること
iOS向けにまとめられた記事が少なく、調査が難航しましたが、WebRTCに立ち向かわなくてはならない人に参考になれば幸いです。
apprtc-ios
はObjective-Cで書かれているし、他のライブラリを活用する場合でも、モデルやラッパーは自身でつくることになるので、次回は開発で得た知見をSwiftのライブラリにしたためたいところです。
Resouces
- WebRTC :WebRTCの公式ページ
- WebRTC iOS:WebRTCのiOS向けのページ
- Real time communication with WebRTC:ブラウザでのサンプル集
- ISBX/apprtc-ios: A native iOS video chat app based on WebRTC :ISBX社によるiOS実装
- libjingle_peerconnection
- GitHub - Anakros/WebRTC
-
Getting started with WebRTC on iOSは:appear.inでの実装例です。
libjingle_peerconnection
を用いています。