我想使用 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.h和 GstWidget.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/