http://uzukiaoba.blog.shinobi.jp/vr/vr%E6%98%A0%E7%94%BB%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E7%94%A8%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9FVR映画コンテンツ用にバックエンドを作った
今年の8月に伊豆映画祭にて、土肥劇場で上映されるVR映画コンテンツに少し関わった。
https://izu-film-festival.themedia.jp/pages/1057540/page_201706110336このコンテンツ、映像だけだと面白くないので、ToneDisplay(知り合いのVR向けUXソリューション)を組み合わせる事にした。
ToneDisplayはVRコンテンツに合わせて風圧や振動を発生・制御するソリューションだ。
ToneDisplay自体は、3DのVRゲームでも、360動画でも両方OK。
360動画の場合は、Google Spreadsheetsにシーケンスを書いておいて、それをアプリがロードして使う。
いづれの場合も、コンテンツに応じてMQTTで各デバイスに制御を送るイメージ。
これ、今は1ユーザーのみ想定で、かつネット必須だった。
今回、土肥という場所、映画祭というシチュエーションなどにより、既存のToneDisplayに対して以下の点が要望としてあった。
- ネットワーク接続は不安定なので、ローカルネットワークのみで動作する
- 複数人に対応するため、複数台での再生を可能にする
- オペレーションの簡素化のため、再生/停止は一斉にやりたい
これを実現すべく、大雑把にいうと以下のことをやった
1.ローカルにRaspberry Piで作ったサーバを設置し、MQTTのブローカーやら制御やらは全部こいつに任せる
2.プレイヤーアプリでシーケンスをロードしてMQTTに送出していたが、これを一箇所にまとめる
3.プレイヤーの再生停止制御をMQTTで行う
4.これらをスマホからリモコン的に制御できるようにする
システムイメージはこんな感じ。
僕の担当は1,2,3だった。あとハード的なインフラ。
で、これを実現するために、Node.jsでサーバアプリと、VueでWebアプリとを作った。
ソースはここに
https://github.com/TakuroFukamizu/mnk-server正直、これだけだとシステム動かないので単なるログとして見て欲しい。
(READMEが無かったり、掘り下げると色々突っ込みどころが多いが、徹夜で仕上げてテストしてそのままの状態なんだ。整理したかったが、その後も忙しくて。)
ただ、中身は結構凝ってる。
ポイントは、集中管理するコンソールはスマホだけど、信号の送出処理などは全部サーバ側のデーモンに任せてるの点や、各種チェックなどの作り込み。
一度渡してしまうと、後の運営はノンエンジニアに委ねるので、可能な限り縮退しても動き続けるように頑張ってる。
ハッカソン的に数日で作ったけど、その割にはちゃんと動き続けるはず。
P.S.
そろそろES7時代のvueの正しい書き方を知りたい