gpt4 book ai didi

qt - 将 Gstreamer 与 Qt 连接以便在 Qt Widget 中播放 gstreamer 视频

转载 作者:行者123 更新时间:2023-12-01 23:32:11 32 4
gpt4 key购买 nike

I tried using phonon to play the video but could not succeed. Off-late came to know through the Qt forums that even the latest version of Qt does not support phonon. That's when I started using Gstreamer. Any suggestions as to how to connect the Gstreamer window with the Qt widget? My aim is to play a video using Gstreamer on the Qt widget. So how do I link the Gstreamer window and the Qt widget?

我通过winid()成功获取了小部件的Id。此外,在 Gregory Pakosz 的帮助下,我在我的应用程序中添加了以下 2 行代码 -

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 的任何提示吗?请帮我解决这个问题。

最佳答案

我刚刚使用 python 做了同样的事情。我要做的就是连接到总线上的“sync-message::element”,并监听在视频接收器已设置。它会向您发送该消息内的接收器,这就是您向其传递窗口 ID 的位置。

关于qt - 将 Gstreamer 与 Qt 连接以便在 Qt Widget 中播放 gstreamer 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250169/

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