python - Gstreamer 不在 Ubuntu 18.04 VM 上发送 'prepare-window-handle' 消息

标签 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

videoWidgetQWidget 类型。

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

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

两台 linux 机器都安装了 gstreamer1.0 和同一组插件。在 Linux VM 上未收到此消息的原因可能是什么?与显卡驱动或某些加速问题有关吗?

最佳答案

多亏了 Florian 的问题,我将我的调查引向了一个好的方向,并找到了我的问题的解决方案 - gstreamer 接收管道需要将 autovideosink 更改为 ximagesink。下面发布了完整的工作流水线:

udpsrc 端口=4000 !应用程序/x-rtp,编码名称=H264,有效载荷=96! rtp jitter buffer ! rtph264depay !解码箱!视频转换! ximagesink sync=FALSE

关于python - Gstreamer 不在 Ubuntu 18.04 VM 上发送 'prepare-window-handle' 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539257/

相关文章:

php - Apache 文件所有权/组

c++ - Qt 5.4.0 在 libGL.so.1 上安装失败,但 libgl-dev 和 ibglu-dev 已经安装

qt - 自扩展小部件,鼠标悬停

Python Bloomberg API 未从 ipython 笔记本连接

从 bash 脚本运行时出现 Python 语法错误

python - oauth、python 和谷歌 API?

linux - 解析ls,不推荐

c++ - 从 QGridLayout 中删除小部件

python - 检查python中df中每一列值的每一行

python - 使用 py.tests capsys 捕获 stderr