ブログ

Armadillo-IoT G4:westonとgstreamerを使ってHDMIに接続したディスプレイにUSBカメラ映像を出力する

at_shinya.matsumoto
2022年2月9日 16時05分

本ブログは作成した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で終了します。