post Image
iOSで音声/ビデオ通話をWebRTCを使って実現する(調査編)

ある案件で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 が提供されています。ですが、これらすべてブラウザ上で動作するサンプルです。

残念なことに、公式の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


『 Swift 』Article List