本ブログは作成したwestonとgstreamerを使用し、HDMIに接続したディスプレイにUSBカメラ映像を出力する方法について記載しております。
はじめに
Armadillo-IoT G4はeMMC(ストレージ)への書き込みを最小限にする観点から、tmpfs(メモリ上に作成するファイルシステム)に保存する設定にしております。メモリ上のファイルは電源を一度落とすと消えてしまう為、開発時はeMMCへ書き込む様に下記の様に設定を変更します。
ファイルをeMMCへ保存に変更するコマンド
# podman_switch_storage --disk
ファイルをtmpfs(メモリ)へ保存に変更するコマンド
# podman_switch_storage --tmpfs
ファイルの保存先設定を確認するコマンド(下記はeMMCへ保存する設定)
# podman_switch_storage --status
Currently in disk mode, run with --tmpfs to switch
以下、eMMCへ保存する事を前提で記載致します。
全体の手順
当社Webに掲載しているArmadillo-IoT ゲートウェイ G4 コンテナのDockerfileを使用し、下記の順に進めていきます。
※コンテナイメージをダウンロードして、後から各種パッケージをインストールしても問題ありません。
《注意》
Armadillo-IoT G4でgstreamerを使うには当社リリースのパッケージを使用する必要があります。
パッケージは配布のコンテナまたはDockerfileで作成した場合に使用する事が出来ます。
1.Dockerfileの編集~コンテナイメージの作成
2.コンテナの作成
3.動作確認
1.Dockerfileの編集~コンテナイメージの作成
まずは当社ArmadilloサイトからDockerfileをダウンロードします。
以下、Armadillo-IoT G4をインターネットに接続している事を前提で進めていきます。
コンテナからイメージファイルを作成(versionは適宜変更)
# wget https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/container/at-debian-image-dockerfile-[version].tar.gz
ダウンロードしたDockerfileを展開し、ディレクトリ内に移動
# tar xzf at-debian-image-dockerfile-[version].tar.gz
# cd at-debian-image-dockerfile-[version]
viエディタでDockerfileにgstreamerのインストールパッケージを追加する
# vi Dockerfile
Dockerfileを下記の様に編集します。
◆編集前
# cat Dockerfile
FROM docker.io/debian:bullseye
LABEL version="1.0.1"
COPY resources /
RUN apt-get update && apt-get upgrade -y && apt-get install -y weston && apt-get clean && mkdir /tmp/.X11-unix
◆編集後
# cat Dockerfile
FROM docker.io/debian:bullseye
LABEL version="1.0.1"
COPY resources /
RUN apt-get update && apt-get upgrade -y && apt-get install -y weston && apt-get clean && mkdir /tmp/.X11-unix
RUN apt-get install -y gstreamer1.0-imx-tools gstreamer1.0-imx gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
Dockerfileが完成したら、Dockerfileと同じ階層でビルドしてイメージを作成します。
(Dockerfileと同じ階層でビルドする事でDockerfileの内容が反映されます)
Dockerfileからat_gstreamer:v1.0.0というコンテナイメージを作成
# podman build -t at_gstreamer:v1.0.0 .
作成したコンテナイメージを確認
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/at_gstreamer v1.0.0 e01d42d4602c About a minute ago 347 MB ←今回使用するイメージ
docker.io/library/debian bullseye 0371e3756e46 2 weeks ago 123 MB ←at_gstreamerの引用元イメージ(削除可)
2.コンテナの作成
上記で作成したコンテナイメージを使って、gstream_webcamというコンテナを作成します。
--device=/dev/video3 のvideoNは番号が異なる事がありますので、適宜書き換えてください。
(下記コマンド実行後からコンテナ内に入ります)
コンテナ作成(VPUを使用する場合※)
# podman run -it --name=gstream_webcam \
--env=XDG_RUNTIME_DIR=/tmp \
--env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \
--device=/dev/dri \
--device=/dev/galcore \
--device=/dev/input \
--device=/dev/tty1 \
--volume=/run/udev:/run/udev:ro \
--volume=/opt/firmware:/opt/firmware:ro \
--device=/dev/video3 \
--device=/dev/mxc_hantro \
--device=/dev/mxc_hantro_vc8000e \
--device=/dev/ion \
--cap-add=SYS_TTY_CONFIG \
localhost/at_gstreamer:v1.0.0 /bin/bash
コンテナ作成(VPUを使用しない場合)
# podman run -it --name=gstream_webcam \
--env=XDG_RUNTIME_DIR=/tmp \
--env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \
--device=/dev/dri \
--device=/dev/galcore \
--device=/dev/input \
--device=/dev/tty1 \
--volume=/run/udev:/run/udev:ro \
--volume=/opt/firmware:/opt/firmware:ro \
--device=/dev/video3 \
--cap-add=SYS_TTY_CONFIG \
localhost/at_gstreamer:v1.0.0 /bin/bash
※VPUを使う場合はATDE上でクロスコンパイルしたライブラリイメージを書き込む必要があります。
初期イメージ(インストールディスクイメージ)はライブラリイメージが書き込まれています。
クロスコンパイルの詳細はマニュアルをご参照ください。
3.動作確認
まず、westonを起動しHDMIに接続したディスプレイに出力します。
westonを起動した時点では灰色の画面になります。
westonを起動する
# weston --tty=1 &
テスト信号を確認する
# gst-launch-1.0 videotestsrc ! autovideosink
下記の様なテスト信号が表示されればテストはOKです。
Ctrl+Cで終了します。
最後に、USBカメラからの映像を出力します。westonは引き続き起動した状態で行います。
device=/dev/video3 はコンテナ作成時のvideoNと同じ設定にします。
gstreamerを起動し、USBカメラ映像を出力する
# gst-launch-1.0 v4l2src device=/dev/video3 \
! video/x-raw,width=640,height=480,framerate=30/1 \
! waylandsink window-width=1920 window-height=1080
<補足>
video/x-raw,width=640,height=480,framerate=30/1 :カメラの設定
waylandsink window-width=1920 window-height=1080 :出力側の設定
以上でUSBカメラの映像をディスプレイに表示出来ます。
Ctrl+Cで終了します。