systemdでGStreamerを起動する際に問題があります。
次のコマンドを入力すると、エラーメッセージが表示され、ビデオが表示されません。
解決策を見つけるのを手伝ってください。
root@imx8mpevk:~# systemctl start myservice
root@imx8mpevk:~# systemctl status myservice
* myservice.service - テストサービス
読み込み済み: 読み込み済み (/etc/systemd/system/myservice.service; 無効; プリセット: 無効)
アクティブ: 2024年5月14日火曜日02:12:25 UTC以降にアクティブ(実行中)。7秒前
メインPID:834(myservice.sh)
タスク: 2 (制限: 5574)
メモリ:5.1M
CGroup: /system.slice/myservice.service
|-834 /bin/bash /home/root/myservice.sh
'-841 スリープ 105月14日02:12:25 imx8mpevk systemd [1]:テストサービスを開始しました。
5月14日 02:12:25 imx8mpevk myservice.sh[834]:GST開始!!
5月14日02:12:25 imx8mpevk myservice.sh[835]:パイプラインを一時停止するように設定しています...
5月14日02:12:25 imx8mpevk myservice.sh[835]:パイプラインを一時停止に設定できませんでした。
5月14日02:12:25 imx8mpevk myservice.sh[835]:パイプラインをNULLに設定しています...
5月14日 02:12:25 imx8mpevk myservice.sh[835]:パイプラインの解放...
同じシェルスクリプトをコンソールで実行すると正常に動作し、ビデオを見ることができます。
root@imx8mpevk:~# ./myservice.sh
GSTスタート!!
パイプラインを一時停止するように設定しています...
パイプラインは稼働しており、PREROLLは必要ありません...
パイプラインは事前に展開されています...
パイプラインを PLAYING に設定しています ...
新しいクロック: GstSystemClock
[ 1033.191967] バイパスCSC
[ 1033.194381] 入力fmt YUV4
[ 1033.197096] 出力fmt YUYV
レイテンシの再配分...
0:00:00.8 / 99:99:99.
これが私の「myservice.service」ですと "myservice.sh"ファイル。
myservice.service
[Unit]
Description=GStreamer
After=multi-user.target
[Service]
Type=simple
User=root
ExecStart=/home/root/myservice.sh
RemainAfterExit=yes
GuessMainPID=nomyservice.sh
#!/bin/bash
export XDG_RUNTIME_DIR=/run/user/0/
echo gst start!!
gst-launch-1.0 v4l2src device=/dev/video2 ! waylandsink
助けてください!!
誰も興味を示さなかったのですが、自分で解決策を見つけ、ここにまとめました。
myprogram.service
【ユニット】
description=私の最後のサービス
アフター=weston.service【サービス】
ユーザー=ルート
環境="WAYLAND_DISPLAY=/run/wayland-0"
環境="XDG_RUNTIME_DIR=/run/user/$(id -u root)"
ExecStart=/home/root/run.sh
再起動=失敗時
StandardOutput=ジャーナル
StandardError=ジャーナル[インストール]
WantedBy=マルチユーザー.ターゲット
run.sh
エコースタートGST!!
GSTローンチ-1.0v4l2src device=/dev/video2 !ウェイランドシンク
サービス登録
systemctl デーモン-リロード
systemctl enable myprogram.service
このように、それは私にとってうまくいきます。再起動すると、カメラの画面が自動的に出ます。