GStreamer+QT重大问题,高手进,急急急,在线等!
因项目需求,使用GStreamer+QT做播放器,支持硬解码播放视频,但是问题出现了,QT窗口与GStreamer库播放的视频画面没有完全结合,即视频画面没有彻底嵌入到qt窗口中!!!很明显的现象是:QT窗口最小化,视频仍然在播,无法跟随视频窗口一起隐藏后台播放!如何才能将gstreamer播放的视频跟随窗口隐藏做到后台播放,请各位知道的大佬告知小弟一二,感激不尽!
环境:gstreamer 1.10.4版本,QT 5.7.1。
gstreamer核心代码:
构造函数:
Media::Media(Lqplayer *player, int windowID)
{
GstElement* videosink;
GstElement* audiosink;
m_initialized = false;
m_frontend = player;
m_volume = 1.0;
if (false == gst_init_check(NULL, NULL, NULL)) {
return;
}
m_loop = g_main_loop_new(NULL, FALSE);
// Init length and position.
m_length = GST_CLOCK_TIME_NONE;
m_position = GST_CLOCK_TIME_NONE;
m_frontend->sliderTiming->setMinimum(0);
m_seeking = false;
m_pipeline = gst_element_factory_make("playbin", "player");
videosink = gst_element_factory_make("rkximagesink", "videosink");
audiosink = gst_element_factory_make("alsasink", "audiosink");
if (NULL == m_pipeline || NULL == videosink || NULL == audiosink) {
cerr << "One element created failed, file: " << __FILE__ << "line: " << __LINE__ << endl;
}
// Whether to embed video into current window.
m_winID = (windowID > 0) ? windowID : 0;
g_object_set(G_OBJECT(m_pipeline),
"audio-sink", audiosink,
"video-sink", videosink,
"volume", m_volume,
NULL);
gst_bus_add_watch(gst_pipeline_get_bus(GST_PIPELINE(m_pipeline)),
bus_callback, this);
gst_element_set_state(m_pipeline, GST_STATE_READY);
// Set playing state to stopped.
m_state = STOPPED;
m_speed = 0;
m_uri = "";
m_initialized = true;
}
与QT窗口绑定接口:
if (GST_IS_X_OVERLAY(videosink)) {
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(videosink), m_winID);
}