Gstreamerを使ってUAV/USV/UGVになどに搭載しているカメラから映像を、受信して表示するFPVアプリを作りたくなりました。
- アプリを作る前に、基本を抑えるためコマンドベースでの動作検証を行いました。
- PCでの検証はUbunt搭載の自作マシン、SBCはJetson Nano 2GB Developer Kitを使いました。
PC環境
- Ubuntuは将来的にDeepStreamと連携を行うため22.04です。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
$ uname -r
6.5.0-41-generic
SBC(Jetson)
- メモリについてですが、カメラからのキャプチャ映像をWifi送信するだけのなので2GBで問題ないです。
- 512MBしかないRaspberry Pi Zero2でも大きな遅延などの問題は特に起こりませんでした。
jetson@nvidia:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
jetson@nvidia:~$ uname -r
4.9.337-tegra
カメラはAliexpressで見つけた1200円くらいのIMX219でメーカ不明です。
ケーブルの方向やケーブル裏表などシビアでした。
1.環境確認
- まず初めにハードウェアが認識されているか確認します
https://qiita.com/hexaforce/items/8ea21d893c478ade1ad9
2.キャプチャして確認
- 次に、GStreamerを入れてカメラからキャプチャできるか確認します。
https://qiita.com/hexaforce/items/a356bbfa4bebbb574f36
3.ループバックでストリーミングしてみる
- キャプチャできることがが解ったらスタンドアローンでストリーミングしてみます
https://qiita.com/hexaforce/items/59a4d9f240c6da54a0b0
4.Wifiでアクセスポイントを立ち上げる
- 受信側をアクセスポイントとして、送信機とのWifi接続を設定します
https://qiita.com/hexaforce/items/06d689e464668f1c0206
5.ストリーミングしてみる
- 最後に、ストリーミングWifiを介してストリーミングができる事を確認します
H.264リアルタイムストリーミング受信側(Ubuntu)
$ gst-launch-1.0 -e udpsrc port=5000 ! application/x-rtp, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
H.264リアルタイムストリーミング送信側(Jetson)
# 送信側:
jetson@nvidia:~$ gst-launch-1.0 -e nvarguscamerasrc sensor-id=0 ! \
'video/x-raw(memory:NVMM), width=1920, height=1080, framerate=30/1' ! \
nvv4l2h264enc bitrate=4000000 ! rtph264pay ! udpsink host=[受信側のIPアドレス] port=5000 sync=false async=false