【发布时间】:2016-07-21 19:31:54
【问题描述】:
我正在尝试在 Linux 上的 Qt 小部件中播放视频。
How to implement a video widget in Qt that builds upon GStreamer?
上面的问题非常接近我想要的,但是 6 岁。 QApplication::syncX(); 在 qt5 中不再存在,所以我放弃了它。我还将 gst_x_overlay_set_xwindow_id() 更改为 gst_video_overlay_set_window_handle 以更改 gstreamer 版本。
如果我不将任何窗口句柄传递给视频接收器(它只是弹出一个带有视频的新窗口),我的管道就可以工作。我不确定我是否遗漏了一些东西来让它在 Qt 中渲染。
编辑
我可以将整个应用程序窗口设置为覆盖,但不能设置主窗口小部件的子部分。此外,无法让 appsink 工作,但 glimagesink 似乎工作。
// QWidget* widget = QApplication::activeWindow(); // this works
QWidget* widget = new QWidget(ui->base_widget); // this doesn't work
widget->setAttribute(Qt::WA_NativeWindow, true);
widget->resize(320,240);
widget->update();
widget->setStyleSheet("background-color: red");
widget->show();
winId = widget->winId();
QApplication::sync();
gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(sink) , winId);
【问题讨论】:
-
最好把你的一些代码贴出来看看缺少什么。