GStreamer:暂停后无法恢复实时视频

时间:2018-08-13 12:47:52

标签: gstreamer python-gstreamer gstreamer-1.0

我正在使用GStreamer-python创建以下管道:

v4l2src -> queue -> h264parse -> avdec_h264 -> glimagesink 

根据我的用例,我想为收到的某个事件E1暂停视频,然后针对事件E2再次恢复播放。为了模拟这一点,我尝试使用valve  具有属性drop=true的元素一定的超时时间。并设置drop=false,在超时时间到期后恢复播放视频。

v4l2src -> queue -> h264parse -> avdec_h264 -> glimagesink 

现在,执行此操作可以暂停视频,但无法恢复播放视频。 有一些链接,例如thisthis,它们说明了如何暂停和恢复,但它讨论的是元素filesink。 这是我的代码:

class ThreadingExample(object):
def __init__(self):
    thread2 = threading.Thread(target=self.get)
    self.valve = Gst.ElementFactory.make("valve","valve")
    self.sink = Gst.ElementFactory.make("glimagesink", "sink")
    thread2.start()


def get(self):
    try:
        cnt = 0
        cnt2 = 0
        while True:
            cnt = cnt + 1
            if cnt == 100000 and cnt2 == 0:
                cnt = 0
                cnt2 = 1
                self.valve.set_property("drop","true")
                #self.sink.set_property("async","false")
            else:
                if cnt2==1 and cnt == 100000:
                    self.valve.set_property("drop","false")
                    #self.sink.set_property("async","true")
                    cnt2 = 0

其他元素在class ThreadingExample外部创建,并且相应地将元素添加到管道中。从代码中可以看出,我尝试使用drop的{​​{1}}属性和valve的{​​{1}}属性。但是它们都不起作用。

有人知道在GStreamer中暂停和恢复直播视频的正确方法是什么。

编辑: 1.我不想暂停整个流水线,而只是暂停来自async的视频数据。这是因为我的用例要求我在暂停的视频上应用一些glimagesink。这意味着接收器仍在流上最后应用了gltransformation的接收帧,直到接收到事件v4l2src

0 个答案:

没有答案