2016-10-07 1 views
0

Ich versuche, playbin in einer Anwendung mit meiner eigenen Pipeline zu ersetzen, weil ich Filter zu dem Video hinzufügen müssen. Hier ist, was ich versuchte:gstreamer: keine Ausgabe von benutzerdefinierten Pipeline (ersetzt playbin)

#  self.pipeline = gst.ElementFactory.make("playbin", None) 
#  self.pipeline.set_property("uri", "appsrc://") 
self.pipeline = gst.Pipeline.new("player") 
source = gst.ElementFactory.make("uridecodebin", "decodebin") 
source.set_property("uri", "appsrc://") 
self.pipeline.add(source) 

aqueue = gst.ElementFactory.make("queue", "aqueue")   
aconverter = gst.ElementFactory.make("audioconvert", "aconverter")   
asink = gst.ElementFactory.make("autoaudiosink", "audiosink") 
self.pipeline.add(aqueue) 
self.pipeline.add(aconverter) 
self.pipeline.add(asink) 
source.link(aqueue) 
aqueue.link(aconverter) 
aconverter.link(asink) 

vqueue = gst.ElementFactory.make("queue", "vqueue")   
vconverter = gst.ElementFactory.make("videoconvert", "vconverter") 
vsink = gst.ElementFactory.make("autovideosink", "videosink") 
self.pipeline.add(vqueue) 
self.pipeline.add(vconverter) 
self.pipeline.add(vsink) 
source.link(vqueue) 
vqueue.link(vconverter) 
vconverter.link(vsink) 

Später schließe ich an die source-setup Signal der Quelle, und dann zu dem need-data Signal mit Daten zu füttern. Dies funktioniert mit playbin, d.h. ein Ausgabefenster öffnet sich und zeigt das Video. Mit meiner benutzerdefinierten Pipeline passiert nichts - kein Fenster ist geöffnet und natürlich kann ich nichts sehen.

Warum ist das so und wie kann ich es beheben?

Ich habe auch versucht, alle Audio-Sachen zu entfernen und nur die Videoelemente zu verwenden, mit dem gleichen Ergebnis. Ich brauche nicht einmal Audio für diese Anwendung.

Antwort

1

Uridecodebin hat dynamische Pads. Sie werden nur erzeugt, wenn das Streaming startet, da es demux/decode benötigt, um zu erfahren, wie viele Pads es zu belichten braucht. Überprüfen Sie https://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-pads.html#section-pads-dynamic

Zum Debuggen ist es auch ratsam, die gstreamer Protokolle zu überprüfen oder den Pipeline-Bus auf Fehlermeldungen zu überprüfen. Es hätte wahrscheinlich einen nicht verknüpften Fehler gemeldet. Oder überprüfen Sie die Rückkehr für die Linkaufrufe würde Ihnen sagen, dass es fehlgeschlagen ist.

Wie auch immer, Sie können einfach playbin verwenden und die Eigenschaft video-filter setzen.

+0

Linking dynamisch funktioniert gut, sehe ich jetzt ein Ausgabefenster. Die Einstellung von playbin-Eigenschaften funktionierte jedoch noch nicht, aber ich werde das auch tun, nur um zu sehen, welcher Weg für meine Anwendung besser geeignet ist. – Christoph

+0

Überprüfen Sie die Debug-Protokolle, um zu sehen, ob es hilft, das Problem mit der Eigenschaft – thiagoss

+0

debug zu verstehen Ausgabe sagt, dass es keine solche Eigenschaft gibt. Ich denke, das sollte in eine andere Frage gehen. – Christoph

Verwandte Themen