Agoraでサービスを考えるための基礎知識集めた & オンラインダンスバトルって面白いんじゃない？

# Agoraとは
>ライブ配信や通話の可能性を広げる簡単・低遅延・大規模なSDK

> WebRTCと互換性があり、P2P通信よりも安定！
>HLSやFlashを使わずに、超低遅延を実現し、SFUサーバーやCDNの構築・運用が不要で短期間に開発できる点が評価されています。

とのこと．[参考ページ](https://jp.vcube.com/service/agora)
WebRTCベースの通話/配信SDKと理解しました．

# そもそもWebRTCって何
かわからなかったのでこの機会に勉強しました．
参考ページにメリット・デメリットは書いてありますが，プロダクト・アウトでサービスを考えるときには強み弱みを明確にするほどよい(気がする)ためです．

超付け焼き刃なので間違った理解があるかもしれません．悪しからず．

**WebRTCとは？**

- カメラ・デバイスへのアクセスやオーディオ・ビデオの通信を既存のTCP/HTTPなどのプロトコルの中で行う技術．最も基本的な接続形態はP2P接続．
[参考にした記事](https://qiita.com/daitasu/items/ae21b16361eb9f65ed43)

**WebRTCのいいところは？**

- **リアルタイム**での動画配信などでは最も向いている．(CDNサーバを利用した配信よりは低遅延）
- P2Pをベースとしており，**双方向通信**ができる．
- 既存プロコトル内での実装で特殊な機器が必要なく，**ブラウザのみで利用することができる．** 

**WebRTCの悪い所は？**

- 新しめの規格なので，ブラウザごとにAPI形態など細かい仕様が落ち着いていなく**実装が面倒．**
- P2P通信ベースのため，NAT環境で使うのは難しい．その回避策として仲介サーバ(STUN/TURNサーバ）を経由する方法が取られるが，無理やり回避しているため中間コンポーネントやプロトコルの複雑度が高く，**トラブルシュートが難しい．**
- P2P通信ベースであるため，送受信のユーザーが，1:多の関係にあるとき，１のユーザも多のユーザー全て分の通信を捌く必要がある．そのため1:多になるときは1の側の端末性能要件が厳しくなり，**1:1000などは基本不可能．**

**WebRTCの悪いところの回避策は？**

-　**SDKにブラウザ差異などは吸収してもらう**
-　**SFUサーバ(WebRTCの仲介サーバ）を利用して，1:多の問題を軽減する**(ただしSFUサーバの導入・維持コストは追加で発生する）

# WebRTCが向いているサービスってどんなの？
WebRTCのメリデメが何となくわかったのでここで考えをまとめると，

- **超リアルタイム**(数十秒とかの遅延があっていいいならWebRTCはコストに見合わない)
- **双方向**(１方向でいいならCDNで良い)
- **発言者は最大でも数十人程度**(視聴者はもう少し多くても大丈夫な可能性あり)
- **複雑な機器を導入できない/しない事情がある**(初期開発コストなど)
- **独自に機能追加をしていく予定がある**(無いならSDKを利用せずZoom,Teamsなどのビデオ会議アプリで良い)

を満たすサービスにWebRTC(特にSDKを利用する開発)が向いている気がします．
実際にWebRTCが使われているサービス例の一つとして，ゲーマー向け通話/チャットツールの[Discord](https://discord.com/)等があります．がゲーマー向け通話のユースケースと比較してみると，

>
- FPSゲームなどの通話はリアルタイムである必要があり，
- 双方向である必要があり，
- 発言者も少ない(大体のゲームは多くても〜8人)，
- ゲーマーはゲームをしたいのであって通話をしたいのでは無いため，機器を買うことはあまりしない．

でドンピシャですね…これはWebRTCベースでないとまず実装できない要件です．　

# Agoraの強みは？
WebRTC自体の強みはわかったので，WebRTC SDK製品類のなかでのAgoraの強みを次はざっと確認します．
v-cubeさんがWebRTC SDK系の製品をまとめてくれているので[そのページ](https://jp.vcube.com/sdk/blog/summary-of-webrtc-commercial-services.-twilio-skyway-sora-agora.io-etc.html)とあとは軽く自分で調べて確認していきます．

正直サービスの強み弱みは個人としてというよりはちゃんと取引相手として色々資料請求しないとわからないところもあるので，このあたりの確認は軽めにとどめます．

## Agora以外のWebRTC系サービス

#### Twilio
KDDIが日本だと代理店をやっている．
KDDI系なので電話・SMS連携は安定感がすごそう．
逆にホームページを見る限りではKDDIとしてはビデオ会議とかライブストリーミングはTwilio自体の機能にはあるものの，あまり推しておらず，ビデオ利用のナレッジは少ない可能性がある．

#### SkyWay
NTT Commun.が日本だと代理店をやっている．
シンプルなビデオ会議を実装する分には非常に良さそうだが，ドキュメントを見る限りではあまり拡張性は高くないように思える．

#### Opentok
日本の代理店が無い…
開発だけなら英語で問題が無いが，日本の代理店がないのは保守運用が著しく困難になるので個人的には採用しにくいですね…

#### マルキャス
マルジュが開発，提供
見たところ基本的なビデオ通話機能のみに見える．
できたばかりのサービスらしくまだ情報量が少ない．

#### Amazon KVS WebRTC, Amazon IVS
KVSはAmazon Kinesisというデータ配信系のサービスにのっかているSDK．
IVSはさらにそれを包んで1:多の配信に特化したマネージドサービス．
基本的にWebRTCの中間サーバーをAWSに立てて，あとは頑張ってクライアント側などを実装する形になる．
AWS内に流せるので色々な処理や，IAMを利用した高度な認証ができるがAgoraやTwilioのような中間サーバーの存在が隠蔽されたSDKに比べると流石に開発コストがかなり高い．
多分AWS以外にも各種クラウドで似たようなサービスはある気がする．

## Agora（その他と比較して)
ということで簡単にまとめます．
項目がMECEじゃないから比較表として意味を成してないって？
アドベントカレンダーなので流石に許して下さい…

|  項目   |  概要   |  詳細   | 
| --- | --- | --- | 
|  拡張性   |   ○  |   Twilioと多分同等くらい．高い拡張性．ただし創業時期の関係から，ライブコマースなど新し目のビジネスへの対応力が高いことが期待される，代理店でサンプルコードへの誘導がある点も優位性か．ただし，クラウドに自分でサーバを構築するよりは拡張性は当然無い．  | 
|  導入コスト   |  ◎   |  低い．中間サーバを意識しなくて良いのは大きい．   | 
|  ユーザ数   |  ◎   |  多い．市場にナレッジも一定以上ありそう．   | 
|  サポート   |   ○  | 日本代理店がある．詳しいサポートとかSLAはわからんので○に留める．    |

可用性やセキュリティはだいたいどのサービスでも保たれていると思っているので，記載しなかった．

# やっとサービスを考える
情報が出揃ったので，やっとテーマの

>
①こんなライブ配信があったら面白いのでは？このリアルの体験をオンラインにできるのでは？
超低遅延ライブ配信/ビデオ通話SDKを使ったサービスアイディアを大募集！

を考えます．私が面白いかな〜と思うのは

# オンラインダンスバトル
です．
## そもそもダンスバトルとは？
その場で音楽に合わせて即興でダンスを各自の持ち時間で披露し，審査員がその勝敗を決めるという競技です．
結構有名なところでは，RedBullが開催している[RedBull BC One](https://www.youtube.com/channel/UC9oEzPGZiTE692KucAsTY1g)などがあります．


このダンスバトルですが，

- その場の音楽に対応する即興性
- 会場の反応
- 相手のダンスに対するリアクション
- ペアやチームの場合チーム内での作戦立て

といった即興性，臨場感が醍醐味の一つです．
例えばこちらの[あきばっか〜のというダンスバトルイベントの動画](https://youtu.be/RIjYNtyMEx0?t=72)を冒頭だけでも見てみてほしいのですが，

![スクリーンショット 2021-12-04 15.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244678/7755e62a-2b9f-606c-7f25-c4e01c0b9e24.png)

曲がかかったあと各チームが実際に会話している様子や，会場のリアクションの様子が感じ取れると思います．

コロナ下において対面ダンスバトルが制限される中，一部オンラインで開催されるバトル(SOULidarity 2020 Championshipなど)もありましたが，やはり急な状況変化で，単なるビデオ通話のような状態になるか，もしくは動画投稿の形式での開催で臨場感が失われてしまったように思えます．似たような感想を持つ方は[私以外にもいるようでした](https://smashnodance.com/online-dance-battle-break-free/)

このオンラインダンスバトルをAgoraでもっとよくできるんじゃないかな〜と思います．

## ダンスバトルとAgora

コミュニケーションが大事といいつつ，ノンバーバルな部分も多いので，コロナ以降もグローバルに人をつなぐことのできるオンラインダンスバトルはグロースすると思っています！

軽くまとめてみましたが，個人的にはAgora，WebRTCとかなり噛み合いがいいんじゃないかな〜と思っています．

|  ダンスバトルの要件  |  Agoraの向き不向き概要  |  詳細   | 
| --- | --- | --- | 
|  リアルタイム   |   ◎  | 超低遅延配信 | 
|  バトル参加人数〜10人で双方向通信必須   |  ◎   |  この人数なら双方向で通信可能．チーム内会話も審査者からのリアクションもOK   | 
|  バトル観戦人数は多数になりうる  |  ◎   |  バトル参加者だけでなく，バトルをたくさんの観戦者人に配信するのもAgoraに統合できる   | 
|  DJがいることもある/音楽が重要  |  ◎   |  高音質オーディオ体験  | 
|  音楽配信にまつわる著作権周り   | ◎  | SDKの形なので，音楽の権利管理などのサポートや，サービスと統合していける．バトル参加者だけでなく，アーティストも巻き込める？|
|  将来的には投げ銭などと統合？   | ◎  | 今はないが，審査者を置くのではなく視聴者からの投げ銭や投票で勝敗を決める形も考えられる．そういった機能もAgoraでは統合して開発できそう．拡張性の高さが生きる|
|  常時ユーザーはいない   | ◎  | バトルのときだけ利用するため，従量課金と相性が良い|
| 導入障壁の低さ   | ◎  | ブラウザ/アプリから参加可能なので，ダンサーにも取り入れてもらえそう|
|グローバル   | ◎  | ノンバーバルコミュニケーションの部分も多分にあり，そもそもグローバルと相性が良い．Agoraのグローバルなインフラが生きる & コロナ後でもグローバルを繋げられる強みがあるので，意義を失わない|


以上です．