Gstreamer不会在Ubuntu 18.04 VM

时间:2018-11-29 12:37:48

标签: python linux qt gstreamer pyside

我正在尝试开发python应用程序,该应用程序会在QWidget窗口中显示收到的UDP流。我使用gstreamer和Pyside(Qt)。为此,我需要使用QWidget的winId设置窗口句柄,然后这样做。下面的代码示例:

def _on_any_bus_message(self, bus, message):
    structure = message.get_structure()
    if structure is not None:
        print(structure.get_name())
        if structure.get_name() == "prepare-window-handle":
            message.src.set_window_handle(self.videoWidget.winId())
    return Gst.BusSyncReply.PASS

videoWidget的类型为QWidget

当我在Ubuntu 18.04 VM中运行应用程序并尝试接收流时,它会在新的OpenGL渲染器窗口中打开,而不是在预期的窗口中打开。我在上面的代码中打印了传入的消息,并发现消息"prepare-window-handle"从未收到。

我进行了另一项测试-我在Ubuntu 16.04的docker容器中运行了相同的应用程序,并收到消息"prepare-window-handle"-它在终端中打印并由应用程序处理。

两台Linux机器均安装了gstreamer1.0,并带有相同的插件集。在Linux VM上未收到此消息的原因可能是什么?它与图形驱动程序或某些加速问题有关吗?

1 个答案:

答案 0 :(得分:0)

由于弗洛里安(Florian)的问题,我将调查指向了一个正确的方向,并找到了解决我的问题的方法-gstreamer接收管道需要将autovideosink更改为ximagesink。完整的工作流程如下:

udpsrc port=4000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtpjitterbuffer ! rtph264depay ! decodebin ! videoconvert ! ximagesink sync=FALSE