リモート開発メインのソフトウェア開発企業のエンジニアブログです

SkyWay vs. Twilio Video

ビデオ通話サービスを構築するための API について調べているときに、SkyWay と Twilio Video を実際に試してみたので、それぞれの長所・短所などを書いていこうと思います。

それぞれの概要

SkyWay とは

NTT コミュニケーションズが提供している、音声・ビデオ通話プラットフォームです。2013年頃から無償サービスとして開始し、2017年に有償化したようです。

ただ、接続回数50万回/月まで、データ転送量500GB/月までなら無償なので、小規模なアプリなら無償で問題無いでしょう。

日本人エンジニアがサポートしてくれるところをメリットに感じる人もいるかもしれません。

Twilio Video とは

Twilio といえば、音声通話が圧倒的に有名だと思いますが、Twilio Video はビデオ通話のプラットフォームです。

音声と一緒で、完全従量課金です。

Twilio は、現在業績好調で、新型コロナの影響でビデオ・音声通話の需要も伸びていると思いますし、今後もさらに伸びそうな感じです。

機能・品質の比較

機能は正直言って、それほど大きな違いはありません。詳細は以下のページを参照して下さい。

品質は、両方ともそこまで変わらないか、若干 SkyWay が良いかなと思います。SkyWay は当然国内にサーバーがあるので、ビデオチャット参加者が全員日本在住の人であれば、メリットを享受できると思います。

値段の比較

公式ページは以下の通りです。

それぞれを詳しく見ていきます。

SkyWay

SkyWay は、無償プランと有償プランがあり、以下の範囲であれば無償プランで問題無いです。

  • 接続回数50万回/月まで
  • データ転送量500GB/月まで

有償プランは10万円/月の基本料金がかかり、データ転送料は40円/GBです。

データ転送量ですが、参考までに私が3人でビデオチャットを2時間くらいやって、転送量が5GBくらいでした(仮に有償プランであれば200円)。小規模なアプリなどであれば無償で収まると思います。

料金ページの「料金モデルケース(1時間あたり)」を見ると、通信量は結構少なく済むように見えますが、解像度やビットレートを明示的に落としたりしないと、こんなに小さな通信量にはならないと思います。(本ページ末尾に追記あり)

(ここから余談)ちなみに・・・以前の料金ページは「接続回数50万回まで、データ転送量500GBまで無料」という感じの表記でした。「/月」という部分が無かったので、てっきり累計で500GBに達したら10万円/月の有償プランに移行しなければいけないのか、と思って Twilio Video を調べ始めたという経緯があります。

Wayback Machine で確認しました。画面には 404 と表示されますが、ソースを見ると「500GBまで」という表記が確認出来ます。

https://web.archive.org/web/20200427143840/http://webrtc.ecl.ntt.com/pricing.html

Twilio Video

通信量では無く分単位の課金のため、分かりやすいです。

ビデオチャット部屋の大きさ、通信の仕方によって値段は異なります。一番安いのは Peer-to-peer Room で、SkyWay の mesh 方式に相当するものだと思ってますが、こちらは $0.0015/min/person です。

先ほどの3人でのビデオチャット例ですと、$0.0015 * 120分 * 3人 = $0.54 = 約60円です。SkyWay の半額以下です。

まとめると

基本的には無償プランで収まるなら SkyWay が良い。収まらないなら Twilio Video となると思います。

(値段という観点で)それ以外に SkyWay を選ぶ場面が無いかも色々考えてみました。SkyWay は人数では無く転送量での課金ですので、大人数だけど転送量が少ない、というケースでは、SkyWay を選ぶメリットがあるかもしれません。大人数向けのオンライン講義で、先生のみビデオ通話とか?

ただ、やはりどう考えても価格面では Twilio Video の方が有利です。

SDK、ドキュメント

どちらも JavaScript、iOS、Android の SDK があり、ドキュメントも問題無く揃っています。私自身は JavaScript SDK しか触っていませんので、以下、その観点で比較します。

SkyWay

シンプルなサンプルコードが何種類かあり、それらをすぐ動かす事が出来ます。また、それらをカスタマイズすれば、簡単にビデオ通話アプリが作れます。

skyway-js-sdk/examples at master · skyway/skyway-js-sdk

ただ、サンプルアプリは、見栄えがしょぼいので、その辺は自分で綺麗にする必要があります。あと、ベタな JavaScript ですので、React などに載せる場合は、大きく書き換える必要があります。

ドキュメントは、シンプルで分かりやすいです。JavaScript SDK にはそこまで多くのクラスも無いので、理解も容易です。

トップ | ドキュメント | SkyWay(アプリやWebサービスに、ビデオ・音声通話をかんたんに導入・実装できるSDK)

Twilio Video

React で作られたサンプルアプリがあり、見栄えも綺麗です。

twilio/twilio-video-app-react: A collaboration application built with the twilio-video.js SDK and React.js

ただ、その分複雑なので、API を理解したい場合は、API ドキュメントのサンプルコード片などを組み合わせてアプリを作っていく必要があります。

JavaScript SDK は機能豊富ですが、ドキュメントは結構複雑かつ分かりにくいです。

以下、わかりにくかったポイントです。

  • JS SDK は v1 と v2 で大きく違うが、検索すると v1 のページが結構上の方に出てくる
  • クラス階層が SkyWay に比べて複雑
    • track, publication 等の概念の説明があまり無い
  • イベント数も多い
    • 発火タイミングに関する明確な説明が無い?

その他、使いにくかった点

SkyWay

認証機能を使用時に credential の TTL を設定するのですが、TTL に 600(秒)以下を指定するとエラーになりました。ドキュメントに記載は無いと思います(※)。

有料ビデオチャットを想定して、TTL で残り時間を管理したかったのですが、600以下を指定できないということは、残り5分を切ったところでブラウザを間違えて閉じてしまった場合に、再接続しようとしてもcredential が生成できない、という事態になってしまいます。結局、残り時間の管理は、自前の JS で実装することにしました。

TTL の最小値は、せめて、60か120くらいにして欲しかったです。

※検索したところ、swagger の yaml には記載されていました・・・

https://raw.githubusercontent.com/skyway/skyway-webrtc-gateway/master/api/api.yaml

Twilio Video

room の有効期限が最大で24時間のため、都度作り直す必要があるのが面倒でした。

Understanding Video Rooms – Twilio

例えば、各ユーザーが1つのビデオチャットの部屋を持てるようにする場合、今日部屋を作っても明日には使えなくなってるので、作り直す必要があります。

ビデオチャットを使う時間帯が9:00〜18:00とか決まっているのであれば、朝一で作り直せば問題無いですが、いつ使うか分からない場合、使う前に有効期間をチェックして、残り時間が短ければ作り直す必要があります。ただ、JavaScript SDK だと、部屋の有効期限を確認することが出来なさそうで、REST API を使う必要がありそうです。

REST API: Rooms – Twilio

なんでこんな面倒な事になってるんでしょうね。

まとめ:結局どちらを使うべき?

  • SkyWay の無償プランで収まり、将来も超える可能性は無い -> SkyWay
  • 利用者が全員日本国内在住で高品質が求められる -> SkyWay
  • 規則等で、海外サーバーにデータを送るのはダメ -> SkyWay
  • 日本語でサポートが無いと困る -> SkyWay
  • それ以外 -> Twilio Video

という結論に至りました。

もう少し SkyWay の価格が安ければ、同じ日本企業ですし「SkyWay 良いですよー!」って宣伝しまくると思いますが、有償プランの基本料金10万円/月はエグいです。グローバル企業と国内企業の体力の差でしょうか。


追記: SkyWay の料金について

本記事を読んで下さったNTTコミュニケーションズの方から、料金に関して補足の情報を頂きました。ありがとうございます。まずはそのまま転載します。

> 有償プランは10万円/月の基本料金がかかり、データ転送料は40円/GBです。

SFU方式で接続した場合はSFUサーバを利用するのでその通りです。

しかし、Mesh方式で接続した場合はまずP2Pで接続しようとします。P2Pで繋がった場合、データ転送料は0円です。

一部のP2P通信ができないネットワークの環境のみ、通信のために中継サーバ(TURN)を利用し、その場合は転送料がかかります。

通信環境に依存しますが、P2P通信ができない割合は全体の10%程度です。

「料金モデルケース(1時間あたり)」では、この割合を加味しているため、ご想定よりも通信量が少なく見えているのかと思います。

通信料金体系が分かりづらく申し訳ございませんが、

より安価に提供するため、実際に利用したリソースに応じた課金という形式を取らせていただいています。

参考情報までに、TURNが使われる条件については以下FAQに掲載されています。

https://support.skyway.io/hc/ja/articles/360048404634

好意的に解釈しても、料金ページはかなり誤解を招く内容だと思います。

現実世界では「4人のうち10%の0.4人がTURNを使用する」という事はあり得ず、殆どの場合は4人のうち0人か1人がTURNを使用することになります。そして、TURNを使用する人が1人いる場合は料金モデルケースを大幅に超えてしまいます。

また、約10%がTURNを利用しているとのことでしたが、私が3〜4人のビデオチャットを、毎回異なるメンバーで3回試した限りでは、私を含めた8人のうち少なくとも3人がTURNを使用しているようでした。(全員自宅からの接続で、同一の社内LANなどではありません。)

「モデルケース」と記載するのであれば、その前提条件を記載しないと、あまり有用な情報では無いので、改善されることを期待します。

← 前の投稿

BERTについて勉強したことまとめ (2)モデル構造について

次の投稿 →

Rails の has_many through で scope を使う

コメントを残す