概要
全天球ライブストリーミング映像を見ながら運転する。
そんな楽しそうな未来に向けて、レゴマインドストームEv3にTHETA Sを載せて、Ev3を操作しながらTHETA Sのライブストリーミング映像を見られるようにしてみました。
※ お断り
やること
- レゴマインドストームEv3(以下Ev3)をROSで遠隔操作する
- Ev3にTHETA Sを積んでライブストリーミング(DualfishEye)する
- 将来的には全天球動画にしてHMDで見れるようにしたい
- 配信されたライブストリーミング映像を見る
- 視聴環境:Mac PC、iPhone、Android (4.x以上) のみ
実現方法
Ev3を遠隔操作
まずは操作する車の方です。
Ev3ハード設計
Ev3は車型にして、LiveShell2とTHETA Sを積みました。
(きちんと設計しないと、バランス崩して倒れたり、配線に失敗したりします。)
- Ev3にUSB WiFiドングルをセット (遠隔操作の通信用)
- LiveShell2とTHETA SをHDMIケーブルで結線
- LiveShell2にUSB WiFiドングルをセット (配信サバとの通信用)
Ev3ソフト環境構築
動画配信
- LiveShell2からWiFiドングル経由で配信サバへ転送します
- 配信サバからHLSで配信します
動画配信サバの設定
今回はAWS EC2インスタンス上に配信サバを構築しました。
EC2インスタンス
EC2インスタンスを起動する際、以下の点に注意してください。
- EIPをつけない場合は"自動割り当てパブリック IP"を有効化して下さい
- SecurityGroupで以下のようにRTMP, HTTP用の穴あけをして下さい
ポート | プロトコル | 送信元 | 補足 |
---|---|---|---|
22 | tcp | 0.0.0.0/0 | 接続元IPに絞ってください |
80 | tcp | 0.0.0.0/0 | 閲覧用HTML取得 |
443 | tcp | 0.0.0.0/0 | 同上 |
1935 | tcp | 0.0.0.0/0 | RTMP用 |
nginx + rtmp_module インストール
こちらを参考にさせて頂きました。 => nginx-rtmp-moduleでお試しLive配信環境を作る
- クライアントは前述のLiveShell2でやるのでスキップ。
- nginxはyumからも取れますが、rtmp_module込みでビルドしないといけないのでソースから入れました。
HLS配信・閲覧用のHTML配信
こちらを参考にさせて頂きました。 => nginx-rtmp-moduleを使ってスマートフォンへの生放送配信を実験
- iPhone, Mac, AndroidはHLS形式に対応しているため、デフォルトブラウザで閲覧ができるようになります。
nginxの設定
上記2つのqiitaを参考にして、以下のようになりました
LiveShell2の設定
初期セットアップについては省略。
配信サバへの転送設定について記載します。
- 設定 (ダッシュボード右上)
- 配信先サービス : その他配信サービス (サーバーアドレス入力)
- 配信先URL : rtmp://[配信サバのPublicIP]/hls
- ストリーム名 : 任意の文字列
- カスタム (ダッシュボード右上)(設定のちょっと下辺り)
- 平均ビットレート : 32Kbps
- フレームレート : 1fps
- 配信キューの長さ : 100
- プロファイル : Baseline ( ※ Androidでは「Baseline」のみ対応のため)
閲覧
- 配信サバを起動(EC2/nginxを起動する)
- THETA Sをライブストリーミングモードで起動 (参考 : 起動方法)
- LiveShell2を起動する
- ダッシュボードから配信を開始する
- ブラウザから配信サバのPublicIPにアクセスするとプレイヤーが表示されるので再生します。
今後の課題
- タイムラグの軽減
- 回線が重いと結構なタイムラグが発生します
- LiveShell2の設定の見直し
- サーバーのスケールアップ
- DualfishEye動画をスティッチして全天球動画に変換して配信したい
- 全天球動画をHMDで見たい