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