【问题标题】:Why is gStreamer throwing an error from waylandsink?为什么 gStreamer 从 waylandsink 抛出错误?
【发布时间】:2020-03-04 02:23:34
【问题描述】:

我正在从事智能喂鸟器项目 (https://github.com/google-coral/project-birdfeeder) 在开发板上使用 Coral 相机运行 birdfeeder.sh 时,我得到:

** (python3:3933): CRITICAL **: 16:37:50.961: 无法刷新 Wayland 连接

错误在终端窗口中向上流动并压倒输出,直到我 ^Z 退出程序。 “python3:”后面的数字对于给定的运行是恒定的,但在不同的运行中会有所不同。 如果我将视频监视器插入板上的 HDMI 插座并运行程序,来自摄像头的实时图像会显示在监视器中,如果我在摄像头前拿着一张鸟的照片,程序就会运行,并且来自相机的图像被保存,鸟类的正确识别被写入日志文件。 这是管道代码:

def run_pipeline(user_function,
                     src_size=(640,480),
                     appsink_size=(320, 180)):
        PIPELINE = 'v4l2src device=/dev/video0 ! {src_caps} ! {leaky_q}  ! tee name=t'
        if detectCoralDevBoard():

        # Test framerate of 1/1 on 200212 (line 69), then 10/1 back to 30/1

            SRC_CAPS = 'video/x-raw,format=YUY2,width={width},height={height},framerate=30/1'
            PIPELINE += """
                t. ! {leaky_q} ! glupload ! glfilterbin filter=glcolorscale
                   ! {dl_caps} ! videoconvert ! {sink_caps} ! {sink_element}
                t. ! {leaky_q} ! glupload ! glfilterbin filter=glcolorscale
                   ! rsvgoverlay name=overlay ! waylandsink
            """

我对 gstreamer 没有经验,可以使用任何帮助。谢谢。

【问题讨论】:

    标签: gstreamer google-coral


    【解决方案1】:

    好问题,但我不熟悉该程序,并且我的珊瑚板上没有监视器。但是,这里有一些想法供您开始调查。我刚刚进入 gstreamer (GST),我觉得这很酷!

    1. PIPELINE 字符串被输入 GST 解析器以构建处理数据流。管道的每个步骤都由 bang(!) 分隔,可以是插件或内部功能。示例中的管道相当复杂,我怀疑其中一些步骤是不必要的。看起来只有一个来源——珊瑚板相机和两个水槽。对t. 的每个引用都是一个新的处理线程:一个转到{sink_element}(这是在python 脚本中某处定义的字符串),另一个转到waylandsink。 source 和 sink 之间的元素以管道中的前一个元素的 sink 作为源,并进行某种转换。例如,videoconvert 插件被大量用于将源视频信号神奇地转换为可以被接收器消费的信号。 glupload 是一个 opengl 插件,可以将视频转换为 opengl 着色(我不清楚这是否有必要。)我不认识其他一些插件。

    2. 我的猜测是waylandsink 插件正在抛出您的错误。您可以在waylandsink 查看文档。您可能需要查看 C 源代码以了解为什么它会生成 CRITICAL 错误,但如果视频正在本地监视器上显示,则它不应该是 CRITICAL。

    3. python3:NNN字符串中的NNN号是python线程的进程ID。可能对您没有意义,但 GST 是多线程的,因此对调试很有帮助。

    祝你好运!

    【讨论】:

    • 非常感谢您的回复。
    • 调查始于几个月前,在此期间,我将您在上面#1 中所述的大部分内容拼凑起来。管道应该准备输入到 TensorFlow 推理引擎。一个必须是 320x180 图像,但我不确定第二个是什么。我在#2 中根深蒂固,试图了解在没有连接监视器时是什么让 Wayland 下沉生气。部署的时候不会有。
    • PS:#3 信息量很大。我不是一个经验丰富的 Python 程序员,但我用过许多其他语言。
    • 我明白了。是的,第一个线程是图像本身。第二个是基于 TPU 对象检测的 rsvg 覆盖(google it),可能是检测到的对象的边界框和文本。 Wayland 是一个窗口管理器,需要一个 GUI。
    • 我明白了。 Wayland 是一个窗口管理器,需要一个 GUI。我怀疑如果没有显示输出,它会产生严重错误。如果没有 HDMI 信号,那么您需要将输出流式传输到远程系统。使用 RTSP 信封和 udpsink 进行流式传输; udpsrc 在远程服务器上接收。网上有很多这样的例子。
    【解决方案2】:

    适用于所有努力让 Coral Dev-Board 上的 GStreamer 在无头模式下运行且没有活动终端会话(注册为 Systemd 服务或类似服务)的人。 我发现了一个不好的 hack(现在也以类似的方式包含在较新的 Coral 示例代码中):

    os.environ["XDG_RUNTIME_DIR"] = "/run/user/1000"
    

    将其放入您将 GStreamer 管道放在一起的 Python 代码中。

    我之前在一些 Google 代码中看到的另一件事是将消息注入 gstreamer 总线以取悦请求当前显示的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2021-11-20
      • 2019-06-13
      • 2021-06-17
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多