Gstreamer 视频覆盖 QWidget 上的无效投射,Windows 10

Gstreamer Video Overlay Invalid Cast on QWidget , Windows 10

问题是我无法在 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):严重 **:gst_video_overlay_set_window_handle:断言 'GST_IS_VIDEO_OVERLAY (overlay)' 失败

<<< 这个问题几乎无处不在,但在Whosebug、qtcentre 和gstreamer 开发者论坛中仍然没有明确的解决方案。我知道有人已经解决了这个问题,但请回复论坛...>>>

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

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

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

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