2015-08-02 4 views
0

У меня есть 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) 

ответ

0

Это похоже на ошибку, пожалуйста, файл его в https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer

Когда вы делаете изменения в трубопроводе событие «перенастроить» генерируется так, чтобы элементы адаптируются к возможной новой конфигурации (другой формат/может потребоваться разрешение). Как часть этого, похоже, что videotestsrc также перезагружает свое внутреннее состояние, поэтому чертеж перезапускается с «0».

Смежные вопросы