at_takuma.fukuda
2023年3月7日 21時04分
Armadillo-IoT G4/X2をRTSPサーバとして画像を配信することが出来ます。
今回の記事ではUSBカメラから入力した画像をエンコードしてそのまま配信し、USBカメラをWebカメラ化させていますが、
Armadillo-IoT G4/X2内部で画像処理を行い、その結果をエンコードして配信する事なども可能です。
コンテナイメージ読み込み
VPUの機能を使用するため、アットマークテクノが提供するイメージを使ってコンテナを作成します。
まずは下記手順を参考にコンテナイメージを読み込んでください。
9.2.3. アットマークテクノが提供するイメージを使う
confファイル作成
コンテナを作成するためのconfファイルを作成します。
/dev/video2として認識されるUSBカメラを接続している想定です。
[armadillo:~]# cat /etc/atmark/containers/rtsp_example.conf set_image at-debian-image set_command sleep infinity add_device /dev/video2 add_ports 8554:8554 add_devices /dev/dri /dev/galcore add_devices /dev/mxc_hantro /dev/mxc_hantro_vc8000e add_devices /dev/ion add_devices /dev/input /dev/tty7 add_volumes /run/udev:/run/udev:ro add_volumes /opt/firmware:/opt/firmware:ro add_args --cap-add=SYS_TTY_CONFIG add_volumes /tmp/xdg_home:/run/xdg_home add_args --env=XDG_RUNTIME_DIR=/run/xdg_home
コンテナ作成
confファイルからコンテナを作成し、コンテナ内で必要なパッケージやアプリケーションのインストールを行います。
[armadillo:~]# podman_start rtsp_example コンテナの中に入る [armadillo:~]# podman exec -it rtsp_example /bin/sh 必要なパッケージのインストール [container:~]# apt update [container:~]# apt install -y gstreamer1.0-imx gstreamer1.0-imx-tools \ gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \ git autoconf automake autopoint libtool pkg-config gtk-doc-tools \ libglib2.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-base1.0-dev build-essential v4l-utils gst-rtsp-serverのダウンロード、ビルド [container:~]# git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server [container:~]# cd gst-rtsp-server [container:~]# git checkout 1.4 [container:~]# ./autogen.sh [container:~]# make USBカメラのパラメータ確認 対応している解像度やフレームレートを確認します。 以下は640×480 30fpsに対応している場合のものになりますので、適宜実際のカメラの値に合わせて変更してください。 [container:~]# v4l2-ctl -d /dev/video2 --all RTSPサーバー実行ファイルの作成 viをインストールしていないのでechoコマンドでファイルを作成します。 [container:~]# echo "/gst-rtsp-server/examples/test-launch '( v4l2src device=/dev/video2 ! video/x-raw, width=640, height=480, framerate=30/1 ! queue ! vpuenc_h264 ! h264parse ! rtph264pay name=pay0 pt=96 )'" > /root/start_rtspserver.sh [container:~]# chmod +x /root/start_rtspserver.sh コンテナから出る [container:~]# exit [armadillo:~]#
コンテナイメージ保存
コンテナに加えた変更を反映したイメージファイルを作成します。
[armadillo:~]# podman commit rtsp_example rtsp_example
confファイル修正
上記で保存したコンテナイメージを元に起動し、コンテナ起動時にRTSPサーバを立ち上げるようconfファイルを修正します。
[armadillo:~]# cat /etc/atmark/containers/rtsp_example.conf set_image rtsp_example #set_command sleep infinity set_command /bin/sh /root/start_rtspserver.sh add_device /dev/video2 add_ports 8554:8554 add_devices /dev/mxc_hantro /dev/mxc_hantro_vc8000e add_devices /dev/ion add_volumes /opt/firmware:/opt/firmware:ro confファイル永続化 [armadillo:~]# persist_file /etc/atmark/containers/rtsp_example.conf
動作確認
Armadillo本体を再起動すると、起動時にrtsp_exampleコンテナが起動し、rtspサーバーとして動作します。
VLCメディアプレイヤーなどのクライアントソフトから以下のようにURLを指定してストリーミングを開くとUSBカメラから入力された画像が表示されます。
rtsp://[ArmadilloのIPアドレス]:8554/test