gpt4 book ai didi

c++ - 如何在基于 GStreamer 的 Qt 中实现视频小部件?

转载 作者:可可西里 更新时间:2023-11-01 15:48:10 25 4
gpt4 key购买 nike

我想使用 Qt 创建一个可以播放本地视频文件的简单 GUI 应用程序。我可以使用 Phonon 来完成所有幕后工作,但我需要有更多的控制权。我已经成功地使用 decodebin 和 autovideosink 元素实现了 GStreamer 管道。现在我想使用 Qt 小部件将输出引导至。

有人成功过吗? (我想是的,因为有基于 GStreamer 的基于 Qt 的视频播放器。)有人能指出正确的方向吗?

注意:这个问题类似于我之前发布的关于如何将 Qt 与传入 RTP 流连接的问题。这似乎颇具挑战性。我认为这个问题会更容易回答。

更新 1

Patrice 关于使用 libVLC 的建议已经很有帮助了。这是在 VLC 网站上找到的代码的更简洁版本: Sample for Qt + libVLC .但是,我最初的问题仍然存在:如何将 GStreamer 连接到 Qt 小部件?

更新2

经过一些实验,我得到了 this working sample .这取决于 GstWidget.hGstWidget.cpp来 self 自己的小 GstSupport 库。但是请注意,目前仅在 Mac 版 Qt 上进行了测试。

最佳答案

要将 Gstreamer 与您的 QWidget 连接,您需要使用 QWidget::winId() 获取窗口句柄并将其传递给 gst_x_overlay_set_xwindow_id();

粗略示例代码:

    sink = gst_element_factory_make("xvimagesink", "sink");
gst_element_set_state(sink, GST_STATE_READY);

QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());

此外,您还希望您的小部件由 native 窗口支持,这是通过在应用程序级别设置 Qt::AA_NativeWindows 属性或 Qt::WA_NativeWindow 小部件级别的属性。

关于c++ - 如何在基于 GStreamer 的 Qt 中实现视频小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com