gstreamer 1.0视频接收器保持暂停状态

gstreamer 1.0视频接收器保持暂停状态,gstreamer,Gstreamer,我在C中有以下管道来播放视频文件:filesrc!德克宾!视频转换!glimagesink,在获得EOS信号后,我尝试修改管道以显示图像(无间隙): 但是窗口中没有输出。管道图显示glimagesink处于暂停状态。这可能是缺少输出的原因吗?如何修复?在开始时将管道设置为就绪状态,在结束时设置为播放状态是可行的,但会导致我希望避免的一个间隙 如何调用gst\u element\u sync\u state\u和\u parent然后将管道设置为播放,而不是手动设置为播放..没有帮助,我猜在eos

我在C中有以下管道来播放视频文件:
filesrc!德克宾!视频转换!glimagesink
,在获得EOS信号后,我尝试修改管道以显示图像(无间隙):

但是窗口中没有输出。管道图显示glimagesink处于暂停状态。这可能是缺少输出的原因吗?如何修复?在开始时将管道设置为就绪状态,在结束时设置为播放状态是可行的,但会导致我希望避免的一个间隙


如何调用
gst\u element\u sync\u state\u和\u parent
然后将管道设置为播放,而不是手动设置为播放..没有帮助,我猜在eos事件沿着管道传播之后,所有元素都会取消所有资源。在这种情况下,您可以添加以捕获eos,也许这是类似的事情,这不是很容易…这就是我实际做的。我将GST\u PAD\u PROBE\u TYPE\u EVENT\u下游探测器添加到videosink,并等待EOS,传递所有其他内容。在EOS事件中,我放下它并修改管道,调用gst\u pad\u set\u offset以保持时间线同步,但仍然没有视频输出。将decodebin设置为GST\u STATE\u NULL会由于某种原因使管道进入暂停状态。但是,在将其恢复到播放状态后,GstGLImageSink(只有glimagesink的这一部分)保持暂停状态,如图所示。ximagesink/xvimagesink是什么?
gst_element_set_state(player->src, GST_STATE_READY); // filesrc

gst_element_set_state(player->vid_bin, GST_STATE_NULL); // decodebin
gst_element_unlink(player->src, player->vid_bin);
gst_bin_remove(GST_BIN (player->pipe), player->vid_bin);

gst_bin_add(GST_BIN (player->pipe), player->img_bin); // bin: jpegdec ! imagefreeze
gst_element_link_many(player->src, player->img_bin, player->video_out, NULL);

g_object_set(G_OBJECT (player->src), "location", next.path.c_str(), NULL);
gst_element_set_state(player->img_bin, GST_STATE_PLAYING);
gst_element_set_state(player->src, GST_STATE_PLAYING);
gst_element_set_state(player->video_out, GST_STATE_PLAYING); // bin: videoconvert ! glimagesink

GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (player->pipe), GST_DEBUG_GRAPH_SHOW_ALL, "gst-play.eos.final");