У меня есть gstreamer конвейер с videotestsrc. Мой план состоит в том, чтобы изменить конвейер, но без потери позиции воспроизведения видео-видео. Мой текущий код изменяет конвейер и изменяет эффект quarktv с помощью эффекта radactv, но видеозапуск начинается с начала после возобновления конвейера. Есть ли способ предотвратить это?gstreamer videotestsrc состояние сброс
from gi.repository import Gst
import time
import os
os.environ["GST_DEBUG"] = "3"
Gst.init()
pipeline = Gst.Pipeline.new()
def gen_cb(a, b, *c):
print "gen_cb", a, b, c
return Gst.PadProbeReturn.OK
# creating elements
vs = Gst.ElementFactory.make('videotestsrc')
vs.set_property('pattern', 18)
vs.set_property('is-live', 1)
pipeline.add(vs)
vc = Gst.ElementFactory.make('videoconvert')
pipeline.add(vc)
av = Gst.ElementFactory.make('autovideosink')
pipeline.add(av)
quark = Gst.ElementFactory.make('quarktv')
pipeline.add(quark)
radioactv = Gst.ElementFactory.make('radioactv')
q1 = Gst.ElementFactory.make('queue')
pipeline.add(q1)
# linking
vs.link(q1)
q1.link(quark)
quark.link(vc)
vc.link(av)
# starting
pipeline.set_state(Gst.State.PLAYING)
# sleep some time
time.sleep(2)
# modify
probe_id = q1.pads[1].add_probe(Gst.PadProbeType.BLOCK_DOWNSTREAM, gen_cb)
quark.unlink(q1)
pipeline.remove(quark)
quark.set_state(Gst.State.NULL)
pipeline.add(radioactv)
q1.link(radioactv)
radioactv.link(vc)
radioactv.set_state(Gst.State.PLAYING)
q1.pads[1].remove_probe(probe_id)
# wait until end
time.sleep(4)