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

标签 c++ qt gstreamer

我想使用 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/

相关文章:

qt - QT 平台 dll 应该去哪里?

c - GStreamer 视频窗口未打开 (macOS)

python - 将textoverlay添加到rtps steam并将其保存到文件

c++ - 静态成员与静态全局

c++ - 在 linux (ubuntu) 上编译 SFML

c++ - C++ 中是否存在比 long long int 更大的类型?

ios - 使用 iOS 从 gstreamer 中运行的管道获取快照

c++ - 错误打印 posix_time

python - 如何永久设置 QListView 行高

c++ - 在 Visual Studio 中的单实例 Qt 应用程序版本 5.11.1 中,在每个其他窗口的顶部打开 Qt MainWindow