为什么gStreamer从waylandsink抛出错误?

为什么gStreamer从waylandsink抛出错误?,gstreamer,google-coral,Gstreamer,Google Coral,我正在从事智能鸟食器项目() 在开发板上使用Coral camera运行birdfeeder.sh时,我得到: **(python3:3933):严重**:16:37:50.961:未能刷新Wayland连接 错误在终端窗口中向上流动,并淹没输出,直到I^Z退出程序。“python3:”后面的数字对于给定的运行是常量,但在不同的运行中会有所不同。 如果我将视频监视器插入电路板上的HDMI插座并运行该程序,摄像机的实时图像将显示在监视器中,如果我在摄像机前持有一只鸟的照片,该程序将工作,摄像机的图

我正在从事智能鸟食器项目() 在开发板上使用Coral camera运行birdfeeder.sh时,我得到:

**(python3:3933):严重**:16:37:50.961:未能刷新Wayland连接

错误在终端窗口中向上流动,并淹没输出,直到I^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(GST),我觉得它很酷

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

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

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


  • 祝你好运

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

    将其放在python代码中,您可以在其中组合GStreamer管道


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

    非常感谢您的回复。调查是在几个月前开始的,在此期间,我将您在#1中所述的大部分内容拼凑在一起。管道应准备输入到TensorFlow推理引擎。一个必须是320x180图像,但我不确定第二个是什么。我深陷于#2之中,试图理解在没有显示器的情况下,是什么让Wayland陷入愤怒。部署它的时间不会有问题。PS:#3提供了大量信息。我不是一个有经验的Python程序员,但是我已经用很多其他语言编程了。我明白了。是的,第一个线程就是映像本身。第二种是基于TPU对象检测的rsvg覆盖(google it),可能是检测对象的边界框和文本。Wayland是一个窗口管理器,它需要一个GUI。我明白了。Wayland是一个窗口管理器,需要GUI。我怀疑如果没有显示输出,它会产生严重错误。如果没有HDMI信号,则需要将输出流传输到远程系统。使用RTSP信封和udpsink进行流式传输;要在远程服务器上接收的udpsrc。在网上有很多这样做的例子。
    os.environ["XDG_RUNTIME_DIR"] = "/run/user/1000"