Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
仕事で WebRTC

仕事で WebRTC

日時:2017-09-09
作:@voluntas
バージョン:1.1.1
url:https://voluntas.github.io/

この記事は WebRTC SFU Sora の宣伝記事です。

間違ったことは書いていないと思います。 もし気になる点があった場合は Twitter にて @voluntas 宛にメンションをいただけると助かります。

概要

WebRTC を調べると、便利なライブラリを使った P2P のサンプルで終わることが多く、実際にビジネスレベルでの運用を考える時の情報が少なすぎるのが問題だと考えています。

また WebRTC はブラウザのアップデートに伴い仕様が変わる場合があり、過去の記事では動かないこともあります。最近では Chrome と Firefox に加え、 Edge が対応し、そして 2017 年秋には Safari が対応します。 ちなみに、これら 4 つのブラウザは最悪なことに WebRTC の仕様がそれぞれ動作が異なります。

また、 2020 年には Flash が終了することが確定しました。既存の Flash で実現していた機能を WebRTC や HLS/MPEG-DASH に切り替えていく必要がります。

この資料では WebRTC を仕事で利用する場合、何をしたいのか、やりたいことをするには何をすればいいのかを、選ぶお手伝いができればと考えています。

注意

  • この記事ではメディアチャネル(音声や映像)のみを扱っています。データチャネルは扱っていません
    • 将来的には取り扱っていく予定です
  • この記事では具体的に JavaScript をどう書くべきかという話などは扱っていません
  • この記事では具体的な WebRTC の仕様については触れていません

判断

ここでは様々な側面から見た WebRTC 需要に対して、どうしたらいいのかをざっくり書いてきます。

趣味で使いたい

これを読む必要はありません。色々試してみましょう。まずは無料で利用可能な SkyWay - Enterprise Cloud WebRTC Platform を触ってみることをお勧めします。

仕事で使いたい

WebRTC を使う場合、一番最初に気にする必要があるのはお金を払う用意があるのかどうか、です。

WebRTC は音声や映像を扱う以上、繋がらないが誰もがわかる技術です。そのため、できる限り繋がる必要があります。ただ、それが繋がらなくてもいい場合だってあります。おまけ的な機能だったらチャットでカバーできたりもしますし、最終的にはメールや Skype でも良い場合だってあります。

まずは会社としてお金を払う用意があるのかどうかを確認しましょう。

仕事として P2P を前提として使っていきたい

1:1 や 3 人くらいまでの会議であれば P2P で問題ないでしょう

まず触ってみるから始めるのであれば SkyWay を検討するのが良いと思います。ライブラリも揃っています。何より、多くの実績があります。

2017 年 5 月の時点では シグナリングサーバーだけでなく、 TURN サーバまでも 500GB/月の範囲までは無償で利用可能です。

iOS/Android の SDK も提供されており、一通りの懸念はすべてつぶせます。ただ繋がらない場合の解析は大変かもしれません。

仕事として MCU を前提として使っていきたい

MCU が必要ということは会議システムがメインでしょうか。MCU はそもそも会議システムの世界で生まれた技術ですのでそちらの代理店を色々探して見るのが良いです。 もちろん OSS もあるので、それも検討するのが良いでしょう。

仕事として SFU を前提として使っていきたい

OSS でがんばるか、商用でがんばるかの二択をまず選びます。もちろんどちらかを選択して、辛くなったので切り替えるというのでも構わないと思います。

最初から SFU を選択できるのであればある程度 WebRTC への理解があると思いますので、まずは P2P を検討するもありです。

ブラウザ対応状況

仕事で利用する場合に一番気になるのがブラウザ対応状況です。

Chrome

現時点 WebRTC を安定的に利用するならば、Chrome が一番無難です。

Firefox

一部機能は Chrome より最新の仕様に追従していますが、安定しているとはあまり言えません。

Edge

仕様がクローズドで、さらにソースがクローズドで、アップデートが不明確なため対応していると言っても現時点では採用はお勧めしません。

Safari

最後の巨人。Safari 11 で WebRTC への対応が発表されました。仕様の追従としては Chrome と Firefox を足して 2 で割った状況です。

ただビデオコーデックが H.264 のみのため、他のブラウザへのコーデックも H.264 を強制させられます。

JavaScript クライアント

商用サービスや商用パッケージを利用する場合はクライアントが用意されていることが多いと思いますので、それを利用するのが一番です。

WebRTC API はブラウザごとに仕様が異なります。さらにアップデートされるたびにその状況は変化していっています。まずはそこを意識しましょう。

JavaScript ライブラリ選定

実はこれといったおすすめは特にありません。色々ありますがメンテナンスが終了するタイミングでさてどうしたらいいかとなってしまいます。簡単に使えるライブラリは隠蔽が多く、あなたのやりたいことが阻害されることが多いです。

そのため、おすすめとしては WebRTC adapter を使って仕事で利用するライブラリを自前で作ることをおすすめします。そのベースとするためにいろいろなライブラリを見てみるのは良いです。

おすすめは商用サービスのクライアントが OSS で公開されているパターンがあるので、それを参考にしてみるのが良いと思います。

WebRTC adapter

ブラウザの互換性を一番に考慮することになります。そのためおすすめなのが既存の便利ライブラリを覚えるのではなく、 adapter というブラウザの互換性を吸収してくれるライブラリを使うことを検討しましょう。

webrtc/adapter: Shim to insulate apps from spec changes and prefix differences. Latest adapter.js release:

adapter は世界中に WebRTC を利用している人たちの苦労が集まっています。使わない理由はありません。

トラブルシューティング

あまりにいろいろな要因があるため、対応が難しく、ノウハウが重要になります。

まず、一番最初にすることは webrtc.org が提供してくれている test.webrtc.org に接続してもらう事です。 ただこれは当たり前ですが iOS ではできませんので要注意です。

https://test.webrtc.org/

ここにアクセスして貰い Start を押して貰いましょう。

すべての調査が終わったら、バグマークをクリックしてアップロードレポートをクリックし、URL を生成して貰いましょう。

その後その URL を貰って、ログを確認してみてください。

ログを貰ってからが勝負です。がんばりましょう。

ブラウザ以外で使いたい

https://webrtc.org/native-code/native-apis/

ネイティブで利用できる仕組みがありますので、ブラウザ以外でも利用可能です。ただ情報はかなり少ないです。 また利用するソースコードのバージョンは 6 週間ごとに上がっていきますので追従は iOS/Android と同様ですのである程度の覚悟が必要です。

例えば .NET で利用することも可能です。

radioman/WebRtc.NET: WebRTC for C# & C++/CLI

お金を払う用意はない (P2P 編)

無償のオープンソース、または無償枠の範囲内で SkyWay - Enterprise Cloud WebRTC Platform を使うということなります。その場合はいくつかの課題に立ち向かう必要があります。

  • 繋がらないときにどうするか
  • ブラウザのアップデートへの追従をどうするか
  • シグナリングサーバの運用をどうするか
  • STUN/TURN サーバの運用をどうするか
  • iOS/Android アプリどうするか

主にこの 5 つが課題になります。まずはお金を払わず P2P で運用する場合をまとめてみます。

繋がらないときにどうするか

がんばりましょう、理由は様々です。ノウハウを溜め込みましょう。ネットワーク環境、ブラウザ環境、プラグイン、様々な原因があります。

Stack Overflow で助言を求めましょう。

ブラウザのアップデートへの追従をどうするか

がんばりましょう。適当にライブラリを決めてしまうと追従を止める可能性はあります。 WebRTC adapter を利用するのが一番です。もちろん Pull-Request を送ったりするのもとても良いことです。

Chrome と Firefox と Edge の 3 種類のブラウザの変更履歴に目を凝らしましょう。

シグナリングサーバの運用をどうするか

がんばりましょう。シグナリングサーバは WebRTC の仕様は決められていません。どんな実装でも問題ありません。多い実装は Node.js で Socket.io が多いようです。

この部分は利用者数を想定する必要があります。基本的に WebRTC を利用する場合はシグナリング用の通信は張りっぱなしにすることが多いです。そのため 1 サーバで同時に張れる量を調べてみるのが良いです。

Golang や Elixir なんでも良いです、好きな言語で作ってもよし。既存のシグナリングサーバ実装を使うもよし。

ただ、無償で提供されているシグナリングサーバはいつ閉じるのかわかりません。ここは注意しましょう。

STUN/TURN サーバの運用をどうするか

がんばりましょう。TURN サーバを建てないと 70% 程度しか繫がらないという調査結果があります。つまり 30% はつながりません。仕事で使う場合はこれは受け入れられないでしょうから、 TURN サーバのノウハウを溜め込んでいきましょう。

ありがたいことに TURN サーバの選択肢は多くありません。まずは coturn というサーバを利用してみてください。

https://github.com/coturn/coturn

TURN サーバを運用するということはトンネルサーバを提供するということになります。転送量を気にしましょう。映像や音声はすぐに最大値を利用してきます。WebRTC であれば 2000kbps とかもザラにつかってきますので、あっというまに転送量が 1G 行きます。また、TURN サーバが落ちている場合は繫がらないのと同等ですので気をつけてください。

TURN サーバは認証が必須です。Username/Credential はワンタイムで利用できるようにしましょう。coturn は RDB や Redis といったデータベースと連携できますので、うまく組み合わせていきましょう。

TURN-TCP と TURN-TLS まで対応させてしまえば、 そのポートが潰されて限りは大丈夫なはずです。たまに MITM やってる FW がありますがそこはまぁあきらめてください。

iOS/Android アプリどうするか

がんばりましょう。まずは https://webrtc.org/ を眺めてみることをお勧めします。

ビルドして、使えるようになるのがまず一番です。忘れていけませんがこのコードもガンガンバージョンは上がっていきます。ブラウザだけではなくこれらのコアライブラリにも追従していく必要があります。 最近は日本語でビルド情報を公開してくれている方も多いのでそちらを参考にしてみるのが良いと思います。

色々妥協できるのであれば React-Native を利用するというのも手です。

oney/react-native-webrtc: A WebRTC module for React Native.

ただ、 React-Native も結局は iOS/Android の知識が必要なので、まぁ悩ましいところではあります。

お金を払う用意はない (OSS SFU/MCU 編)

お勧めは Janus です。様々な機能を持っていますし、たくさんの場所で利用されています。今 OSS を選択するのであれば Janus が現実的だと思います。

利用する OSS を定めて、がつがつ使って Pull-Request を送ったり、 SO で解答したりしてみましょう。

お金を払う用意はある (P2P 商用シグナリングサーバ利用編)

有償のシグナリングサーバが幾つかあります。

これらは同時に STUN/TURN サービスも提供してくれています。ただ問題の繫がらないを解決するヒントはあまりしてくれません。そんなときはサービスを使うことで情報を可視化してくれます。

https://www.callstats.io/

さて、ここで少し気づいて貰う必要があります。お金を払おうがお金を払わまいが WebRTC の知識は必要になるということです。結局勉強する必要があります。

これは大変ですね。ざっくり勉強する必要があります。現在在庫がありませんが ... この本がおすすめです。

わか(った気にな)るWebRTC 紙+電子版セット

お金を払う用意はある (商用サービス利用編)

商用サービスは接続時間での従量課金制がほとんどです。

tokbox

WebRTC をサービスで利用する場合、一番の選択肢に上げるべきなのは tokbox です。 WebRTC のサービスとしては一番古く、一番最先端を走り続けています。

他にも幾つかのサービスがあるのですが、実際に使ったことがあるということでこのサービスを紹介させてもらいます。

Tokbox ができることはたくさんあります。WebRTC で考えつくことはほとんどできます。

費用面でも最近は 9.99 ドル/月 から試せるようになりました。ただ従量課金制なので気をつけてください。ユーザーがある一定数いる場合はあっという間にスゴイ金額になります。 録画もできますし、配信している映像を HLS に変換しての配信も可能です。

貴方のやりたいすべてが Tokbox にはあります。ただし従量課金制です。それだけは忘れないでください。

  • 1:1
  • 1:N の配信
  • 複数人数会議
  • SIP 連携
  • 録画機能
  • 録画変換 MP4 機能
  • HLS 配信機能
  • 録画ファイル暗号化
  • iOS/Android/JavaScript クライアント

何でも本当にあります、まずはこのサービスで解決できないか検討するべきです。ただ懸念点はあります。日本のサーバでは無いためサーバが近くてもシンガポールです。そのため遅延が気になる事があるかも知れません。 これは実際に触ってみて確認するのが良いと思います。

twilio

Announcing Programmable Video Group Rooms: More Participants, Video Recording, and Pricing for Scale

twilio が新しくサービスを提供し始めました。グループビデオチャット機能を提供開始しました。今までの P2P も残ります。

買収した Kurento ベースの SFU を利用しているようです。画質は 540Kbps (SD) と 1.5Mbps (HD) のどちらかが選べるようです。 4K とか 3D で利用する場合位はもっとビットレートを高く指定できるようですので、かなり融通はききそうです。

  • 1:1
  • 1:N は未実装
  • 複数人数会議
  • 録画機能
  • iOS/Android/JavaScript クライアント

実際に触っていませんが、かなり攻めてきた感じという認識です。Tokbox 以外にも検討するサービスが出てきたと考えて良いでしょう。

SkyWay

SkyWay - Enterprise Cloud WebRTC Platform

SkyWay が正式版としてリリースされ、コミュニティエディションとエンタープライズエディションが用意されました。

SFU は Atlassian がオープンソースで公開している Jitsi を利用しているとのことです。

  • 1:1
  • 1:N
  • 複数人数会議
  • iOS/Android/JavaScript クライアント

エンタープライズエディションは月額 10 万円の基本料金と、イン・アウトの通信料に対して 1GB 単位で 40 円の課金が行われます。時間課金ではなく、転送量課金のため自由に接続して使ってもらうというよりも、閉じた世界で使ってもらうという形になるでしょう。

お金を払う用意はある (商用 MCU 利用編)

大規模なうえに MCU が必須で自社運用を考えるのであれば、自分が知っている範囲であれば今のところ一つです。ちなみに SFU 機能も持っています。

http://www.dialogic.com/en/products/media-server-software/xms.aspx

まずは代理店を探してみると良いでしょう。価格と機能を確認し、それで納得できそうであれば検討をすると良いです。

お金を払う用意はある (商用コールセンター編)

WebRTC とコールセンターで検索するといくつか出てきます。大規模すぎて自前で何かという世界ではありません。 WebRTC 1% それ以外 99% の世界ですので、まずはこの記事を読む前にもっと調べることがあるはずです。

コールセンターの仕組みは複雑です、それを踏まえてください。

お金を払う用意はある (商用 SFU 利用編)

これは宣伝記事です

WebRTC SFU Sora

商用の WebRTC SFU です。価格は 100 接続で年間利用料ライセンス 60 万円です。毎年かかります。製品のサポート料金込みです。

複数人数での会議や、 数百人への配信、一対一の面談など様々な用途に利用可能です。

パッケージで提供しますので、自社で運用が可能です。 AWS だろうが GCP だろうが、オンプレだろうがなんでもどうぞ。 サーバさえあれば起動までは 10 分です。デモ機能が内蔵しているので動かすまで 15 分でいけます。

  • とにかく 落ちないこと を目的に作っています
  • とにかく 繋がること を目的に作っています
  • とにかく 手間がかからないこと を目的に作っています
  • 最新ブラウザのアップデートに追従しています
  • シグナリングサーバ内蔵ですので別途立てる必要はありません
  • TURN サーバ内蔵ですので別途立てる必要ありません
  • 日本語によるサポート対応しています
  • フルスクラッチ自前実装なのですべて把握しています
  • 1:1、1:N、複数人会議、録画あります
  • Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
  • Apache 2.0 ライセンスで JavaScript と iOS と Android のクライアント SDK を公開しています
  • 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です
    • 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます
  • 海外で利用される場合は該非判定書も用意しております

時間をお金で買いませんか?

興味のある方は sora at shiguredo.jp までお問い合わせください。

紹介や検討資料も公開しております。

おまけ

世界の WebRTC プラットフォーム一覧。おそらく世界で一番詳しい資料です。

WebRTC Platforms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment