Skyway Walkers

SkyWayを使ったサービスを個人開発しています

SkyWayを使ったYouTube同期再生処理を実装

開発中のチャットサービスに、YouTubeの同期再生機能を実装してみました。

 

f:id:iwatendo:20170913132349j:plain

YouTube同期再生のテスト動画。ちょっと暗くてわかりづらいですが、3台のPCをSkybejeで繋いでいます。左上の一番小さなYouTubeの画面の操作で、各PCのYouTube動画が連動して再生・停止・シークしています。

※テストに使わせて頂いた動画は、日食なつこさんの「水流のロック」です。YouTube動画の音は消してます。 

 

チャット時のBGMとして利用したり、オンライン家庭教師等やオンラインサポートのようなサービスでYouTube動画を使って説明したり、友人が接続したときにMステの入場曲を流したりする用途に使用できればと思っています。

追記:YouTube Frame API は、基本的には商用利用禁止なようですね。
参考(
YouTube商業利用のルール

 

SkyWay + YouTube Player Api を使って実現してます。SkyWay(WebRTC)を使用するという事で、YouTube動画を再ストリーミングしている誤解する方もいるかもしれませんが、それぞれのクライアントが、YouTube動画サイトにアクセスしてます。再生する動画のURLや再生・停止情報をSkyWayのデータ通信で送り、疑似的に同期再生させています。

 

ざっくりとした処理の流れ

 ・親ダイアログで、YouTube Player APIを使ってYouTube動画のイベントを拾う。
 ・SkyWayのDataConnectionを使って上記のイベントデータをJSONデータで送る
 ・各クライアントで、YouTube Player APIを使って同じ動作をさせる 

以下のようなYouTube動画の操作が同期できます。
 ・再生開始/停止
 ・再生位置の変更
 ・再生速度の変更
 ・ボリュームの変更(現状、Skybejeでは音量調整は未実装です) 

 

まだまだ問題点も多く、うまく同期しない場合があります。現状、親フレームのイベントを拾って処理してますが、きっちりと実装する前に、どういった動作仕様にするか悩んでて保留にしています。動作仕様は3パターンくらい考えていて 

 

(1)親のYouTubeフレームのでのみ操作可能、クライアント側は操作不可
 ・現状はこの実装です。  

(2)親と全クライアントで操作可能にする。全ての操作を同期させる。
 誰か一人が停止ボタン押した場合、全クライアントの再生が停止するイメージ
 実装は面倒なのですが一応可能と考えています。エラー発生時の対応が難しそうですが・・。 

(3)表示開始のみ行い、動画の操作は各クライアント側で独立させる。
  クライアント側は、動画が勝手に再生されるけど、後は通常通り

使うシーンによっても違うと思うので、親ダイアログ側のオプションで指定する方向でも考えてますが、シンプルにもしたいんですよね。。

 

以下のサイトから個人で開発中のサービスを試せるので良かったら試してみてください。

https://skybeje.net/ (PCのGoogle Chrome専用サービスです)


YouTube Player APIスマホだと自動再生できないらしいので、スマホ向けには同じような実装は多分できないと思います。

SkyWayの正式サービス化

9月7日にSkyWayが正式サービスになりましたね。

webrtc.ecl.ntt.com

 

私自身、2年近くトライアルで使わせて頂いてて、遂に来たかという想いです。
正式サービスといっても、個人での開発やOSSで展開するよう場合は、実質今まで通り無料で使わせて頂けるようです。

 

まずは NTT Communications さんに感謝です。


Community Editionの無料枠も大きくて、個人開発している分には困らないようなのですが、さらに接続/通信量制限がAPIキーごとのようです。これ、どういう事かと言うと、TK氏の「ユドナリウム」のようなOSSで公開されるWebサービスは、個人で別のWebサーバーに別のSkyWayのAPIキーを取得して構築する事ができます。事実上、無制限に使える感じではないでしょうか。

 

個人で別サーバーを建てるのは、面倒でコストが掛かるイメージがあると思いますが、TK氏のユドナリウムや私が開発中のサービスは、サーバー側の処理がありません。
正確には、通常は Webサーバー/Apサーバー/DBサーバーを使用すると思いますが、Webサーバーだけしか使用しません。作業的には、Webサーバーにプログラム(html/css/javascript等)をアップロードして、SkyWayのAPIキーを取得して設定するだけです。料金的には、Webサーバーだけあれば良いので、無料のサーバーを使えばタダです。

 

私の開発しているサービスのテスト環境も、無料のWebサーバーをかりてます。公開サーバーは独自ドメインを取得している為、多少掛かってますが、年間数千円程度です。さらに言えば、使用ユーザーが増えたとしても AP/DBサーバーが無いので、スケールアウトが必要になる可能性も低いんじゃないでしょうか。


また Enterprise Edition ができた事で、SkyWayを使ったビジネス提案がしやすくなったように思いました。料金は掛かりますが、NTT Communicationsさんのサポートが付くというのは話を進める上でかなり大きいです。

 

料金についても、高いように見えて良心的と思いました。自社でWebRTCサーバーを立てるより圧倒的にローコストで運用可能ですし。

 

ただ、使用料金の予測は難しいですね。
私も完全に理解できている訳ではないのですが、シグナリングはともかく、TRUNサーバーは必ず使うわけでは無くて、複数人の同時利用は単純な掛け算では無いですし。
シグナリングやTRUNについて理解してないと料金表が読めない部分もあるので、会社で偉い人に説明するのが難しい感じはします。


ともあれ、SkyWayが大きなプラットホームになる可能性を感じています。あとはSkyWayを使ったキラーアプリ(キラーサービス?)が登場すれば、一気に盛り上がるんじゃないかと思ってます。


私も、多くの人に使われるサービスを作りたいと頑張ってますので宜しくお願いします。(笑)