微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 udev 规则调用的脚本内在后台运行 gstreamer 应用程序

如何解决如何在 udev 规则调用的脚本内在后台运行 gstreamer 应用程序

UDEV 规则 ( /etc/udev/rules.d/99-monitor-hotplug.rules )

KERNEL=="card4",ACTION=="change",SUBSYstem=="drm",ENV{HOTPLUG}=="1",RUN+="/usr/bin/hdmi-hotplug.sh"

下面是脚本,我在连接 HDMI TX 后立即运行,这里我通过 gstreamer 命令进行流式传输

#!/bin/sh

for i in /sys/class/drm/card4-HDMI-A-2/status ; do
status=$(cat $i);
connector=${i%/status*};
connector=${connector#*-};
if [ "$status" == "disconnected" ];
then
    echo $connector" disconnected" >>/dev/ttyPS0
    killall gst-launch-1.0
elif [ "$status" == "connected" ];
then
    modes=${i//status/modes}
    echo $connector" connected" >>/dev/ttyPS0
    modetest -D amba_pl@0:hdmitx_disp_0
    echo $modes >>/dev/ttyPS0
    resolution=$(cat $modes | head -n 1)
    echo $resolution >>/file.txt
    if [ "$resolution" = "1920x1080" ]; then
        echo "Full HD Monitor Connected" >>/dev/ttyPS0
        killall gst-launch-1.0
        modetest -D amba_pl@0:hdmitx_disp_1 -s 31:1920x1080-60@YUYV
    gst-launch-1.0 -v v4l2src device=/dev/video1 ! "video/x-raw,width=1920,height=1080,interlace-mode=(string)progressive,framerate=60/1" ! \
          kmssink bus-id="amba_pl@0:hdmitx_disp_1" force-modesetting=true sync=false &
    fi
fi
done
echo "TASK COMPLETED" >> /dev/ttyPS0

但我面临以下问题

[  805.103502] udevd[1935]: worker [1944] /devices/platform/amba_pl@0/amba_pl@0:hdmitx_disp_1/drm/card4 is taking a long time
[  925.251937] udevd[1935]: worker [1944] /devices/platform/amba_pl@0/amba_pl@0:hdmitx_disp_1/drm/card4 timeout; kill it
[  925.262577] udevd[1935]: seq 2856 '/devices/platform/amba_pl@0/amba_pl@0:hdmitx_disp_1/drm/card4' killed

如何在不阻塞 udev 的情况下运行 gstreamer 命令

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。