DJIのドローンの映像をリアルタイムキャプチャしてみた
最近、ドローンを買い直したいと思い、映像出力ができるドローンについていろいろ調べていたところ、僕が持っている DJI Mini2 でも可能なことがわかったので、そのうれしさと方法について記事などで探しても見つからなかったので、皆様にもこのうれしさを共有したいと思い、この記事を書いています!
ドローンって免許や申請が必要なんじゃない?
僕の周りでは、ドローンって手続きなどがめんどくさそうだと思っている人が多いような気がします。
僕の体感では、少しだけめんどくさいという程度です。
100 グラム以上のドローンを購入した場合は、機体登録をする必要があります。(https://www.mlit.go.jp/koku/drone/)
有効期限は 3 年ほどです。
(https://www.mlit.go.jp/koku/drone/assets/pdf/mlit_HB_web_2022.pdf)
そして、ドローンを飛ばしていい場所も上記のリンクを確認してください。
飛ばすときには DJIのドローンを使用しているのであれば、アプリ上で確認することも可能です。
ちなみに、DJI のアプリでも確認することができるので、飛ばす際に、アプリで、自分が今いる位置の状況を確認するといいです!
本題:DJI 製のドローンの映像を PC でリアルタイムで取得するには?
今回のリアルタイムでの映像取得については、DJI 製のドローンであることを前提に話をしていきます。
DJI のドローンのコントローラーは、RC-N1、RC 2、RC-N2、RC-N3 のコントローラーが対象となります。RC Proも対応しているのですが、こちらはHDMI出力があるので、この手法は不要になると思います。
今回使用するドローンは、2020/11/12 日発売の DJI Mini2 を使用します。(書類周りはきちんと提出しています)
大まかな手順として、
- PC で RTMP サーバーを建てる
- DJI のアプリ側で RTMP サーバーに映像データを Stream 配信する
- RTMP サーバーの映像を受信する
と3つの手順でリアルタイムで映像を取得することができます。
この手順で RC Pro という高いコントローラーなしでも、PC で映像のリアルタイムでの受信ができるようになり、この映像を VFX で加工したりなどができるようになります!!
ここから下では、それぞれの手順について説明していこうと思います。
1.RTMP サーバーを建てる
取り合えず、今回は、Windows のパソコンで作成して行きます。
とはいっても、とあるページから実行ファイルをダウンロードして実行するだけです。
bluenviron/mediamtx githubリンク
こちらのGithubのリンクから自分の使用しているPCにあったアーキテクチャのファイルをダウンロードして解凍し、実行しておきます。
2.DJI のアプリ側で RTMP サーバーに映像データを配信する
次に、DJIアプリで先ほど起動したサーバーに対して、映像を配信します。
rtmp://<ip-address>:1935/live/<your_stream_key>
ここの<ip-address>
の箇所はrtmpサーバーを立てたPCのIPアドレスを指定してください!
ポートはMediaMTXの画面を確認してください。デフォルトでは1935
となっていると思います。
また、<your_stream_key>
には今回は例として、streamとしています。
以下に DJIアプリで設定する画面を表示します。
現在飛ばしているドローンの撮影画面で、画面右上にある3点リーダーから設定を開く。その後、設定のメニューバーの画像伝送を選択すると以下の画面が表示されます。
画像伝送画面にてライブ配信プラットフォームを選択すると以下の画像が表示されます。
ライブ配信プラットフォーム選択画面にてRTMP
を選択すると以下の画像が表示されます。そこでRTMPサーバーの<IPアドレス>
と<stream_key>
を設定したのちに解像度やビットレートを選択し、ライブ配信を開始ボタンを選択するとカウントダウンの後からライブストリームが開始されます。
この時のライブの音声は特に設定をしていない場合はコントローラー側で拾っているマイクの音声となる。
3.RTMP サーバーの映像を受信する
ここまでできたなら、PC で受け取ることができるようになっています!
試しにVLC Playerで再生してみましょう。
VLC Playerにてメニューバーから メディア>ネットワークストリームを開くを選択する
このような画面が表示されたら、RTMPサーバーのアドレス(今回は同じPC上でサーバーを立てているため、localhostを使用します。)と<your_stream_key>
を入力してください。私の今回の環境だと、rtmp://localhost:1935/live/stream
を入力して、再生ボタンを押すと配信映像を見ることができます。
すると、以下のように再生することが可能です。
Unreal Engine上で映像を受け取ってみる
では、ここからさらに応用して、Unreal Engine 上に投影してみます。
ただし、Unreal Engineでは、RTMP映像をデフォルトでは受け取ることができないため、一工夫必要になります。
RTSPサーバーを建てる
Unreal EngineはでふぉるとではRTMPは対応していないが、RTSPは対応しているため、RTSPを配信できるようにするために、RTSPサーバーを建てます。
こちらは、RTMPサーバーを建てる際に利用したMediaMTXですでに立っています。
RTSPサーバーにRTMPをRTSP形式に変換して送信する
RTMP形式からRTSP形式に変化するのにffmpegを使用します。
ffmpegのインストール方法はほかにもサイトがたくさんあるため、省略します。
実行するコマンドは以下のものを使用します。
@echo off
ffmpeg -fflags +genpts -i rtmp://localhost:1935/live/<your_stream_key> -c:v copy -c:a aac -ar 44100 -ac 2 -f rtsp rtsp://localhost:8554/<your_stream_key>
pause
Unreal Engine上で投影する
先ほどの設定でRTMPをRTSPに変換したものがrtspサーバーに転送できているはずです。
確認するなら、VLC PlayerでRTMPの映像を確認したのと同じ手順でアドレスをrtsp://localhost:8554/
に設定することで映像を確認できます。
では、Unreal Engineで確認してみましょう。
Unreal EngineエディタでStream Media Sourceを選択し、Stream Urlにrtsp://localhost:8554/
を入力すると以下の画像のようにUnreal Editor上で映像を確認することができます。
今回はここまでになります。
このような感じでDroneの映像をもとにUnreal Engine上で動作させることができました。
現在はUnreal Engineについて勉強をし始めたばかりのため、ここまでとさせてください。
今後、ドローンで撮影している映像にリアルタイムでARエフェクトをかけていきたいと思います。
Discussion