Gstreamer Video Overlay 在 QWidget 上的无效投射,Windows 10

Posted

技术标签:

【中文标题】Gstreamer Video Overlay 在 QWidget 上的无效投射,Windows 10【英文标题】:Gstreamer Video Overlay Invalid Cast on QWidget , Windows 10 【发布时间】:2018-06-19 12:32:57 【问题描述】:

问题是我无法在 QWidget 中流式传输相机或任何视频。我可以在没有 Qt 的情况下完成,但我需要在 QWidget 中完成。语法很好。 QWidget 出现但其中没有任何内容。我使用 GstElement* 作为源和接收器。

data.source = gst_element_factory_make("autovideosrc", "source"); data.sink = gst_element_factory_make("autovideosink", "sink");

在命令行中,当我编写时它工作正常 “ gst-launch-1.0 autovideosrc ! autovideosink ” 但是,它不适用于代码。

QApplication::sync(); gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(GST_ELEMENT(data.sink)),guintptr(ui.widget->winId()));

它给出了这个错误:

GLib-GObject-WARNING **:从“GstAutoVideoSink”到“GstVideoOverlay”的无效转换

** (QtGuiApplication2.exe:6188): CRITICAL **: gst_video_overlay_set_window_handle: 断言 'GST_IS_VIDEO_OVERLAY (overlay)' 失败

>> 我怎么解决这个问题?感谢您的关注。

【问题讨论】:

【参考方案1】:

autovideosink 不公开GstVideoOverlay 接口。因为它不是一个真正的渲染器,而只是一个自动插件助手。在您启动管道后的某个时间,它决定插入一个实际的渲染器。

您应该添加一个总线同步处理程序来检查准备覆盖消息,然后执行视频覆盖调用。文档通过示例展示了基本思想:

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/GstVideoOverlay.html

【讨论】:

当我在网上深入搜索时,autovideosink 提供了我指定的自动窗口。有些人建议使用appsink 和glimagesink。我使用了它们,但是“appsink”给出了同样的错误,无效的转换并且它没有给出窗口。 “glimagesink”没有给出任何错误,但也没有显示任何内容。顺便说一句,你提供的链接,我已经调查过了。它也没有工作。 appsink 也不提供视频叠加界面。所以这个错误是意料之中的。 可能有同样问题的人,尝试使用 glimagesink 暴露 GstVideoOverlay。正如 Florian Zwoch 所说,不暴露 GstVideoOverlay 的接收器将不起作用。尝试使用 gst-inspect-1.0 | grep "sink" ,查看各种接收器。实现 glimagesink 后,您无法显示 QWidget,因为线程进入其中。您应该为您的程序创建一个线程机制,以便显示 QWidget 并执行其他操作。 试试xvimagesink

以上是关于Gstreamer Video Overlay 在 QWidget 上的无效投射,Windows 10的主要内容,如果未能解决你的问题,请参考以下文章

使用Gstreamer在录制音频+视频的同时显示无音频视频

从 GStreamer 实时接收 Numpy 数组

如何在 gstreamer 中混合音频和视频

GStreamer画中画rtmp转rtmp

gstreamer中的caps设置问题

在 GStreamer 中混合音频和视频冻结