我尝试使用 phonon 播放视频,但未能成功。Off-late 通过 Qt 论坛得知,即使是最新版本的 Qt 也不支持 phonon。那是我开始使用 Gstreamer 的时候。关于如何将 Gstreamer 窗口与 Qt 小部件连接的任何建议?我的目标是在 Qt 小部件上使用 Gstreamer 播放视频。那么如何链接 Gstreamer 窗口和 Qt 小部件呢?
我成功Id
通过winid()
. 在 Gregory Pakosz 的帮助下,我在我的应用程序中添加了以下两行代码 -
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());
但是无法将 Qt 小部件与 gstreamer 视频窗口链接。
这就是我的示例代码的样子:-
int main(int argc, char *argv[])
{
printf("winid=%d\n", w.winId());
gst_init (NULL,NULL);
/* create a new bin to hold the elements */
bin = gst_pipeline_new ("pipeline");
/* create a disk reader */
filesrc = gst_element_factory_make ("filesrc", "disk_source");
g_assert (filesrc);
g_object_set (G_OBJECT (filesrc), "location", "PATH_TO_THE_EXECUTABLE", NULL);
demux = gst_element_factory_make ("mpegtsdemux", "demuxer");
if (!demux) {
g_print ("could not find plugin \"mpegtsmux\"");
return -1;
}
vdecoder = gst_element_factory_make ("mpeg2dec", "decode");
if (!vdecoder) {
g_print ("could not find plugin \"mpeg2dec\"");
return -1;
}
videosink = gst_element_factory_make ("xvimagesink", "play_video");
g_assert (videosink);
/* add objects to the main pipeline */
gst_bin_add_many (GST_BIN (bin), filesrc, demux, vdecoder, videosink, NULL);
/* link the elements */
gst_element_link_many (filesrc, demux, vdecoder, videosink, NULL);
gst_element_set_state(videosink, GST_STATE_READY);
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(videosink), w.winId());
/* start playing */
gst_element_set_state (bin, GST_STATE_PLAYING);
}
您能否在我的上下文中更详细地解释 gst_x_overlay_set_xwindow_id() 的用法?
我能得到任何关于如何在 Qt 下集成 gstreamer 的提示吗?请帮我解决这个问题。