2017-12-14 7 views
0

Ich bin noch kein Genie bei Gstreamer, aber experimentiere mit den Grundlagen, um weniger ignorant zu werden. Ich habe versucht, diese, erwartet zwei Testmuster in separatem Pop-up-Fenster, um zu sehen:Warum wird ein Videostrom, der durch ein T-Stück geteilt wird, in nur einem Anzeigefenster angezeigt?

gstl videotestsrc ! tee name=t ! autovideosink t. ! autovideosink 

Dies bewirkt, dass zwei neue Fenster, Pop-up, aber nur eine zeigt das Testmuster Farbbalken. Die andere Seite zeigt einen eingefrorenen Schnappschuss des Desktop-Hintergrunds, über den er zufällig gecovert hat. Warum passiert das und wie würde ich meine Pipeline ändern?

+0

BTW, 'gstl' ist ein Alias ​​für gst-launch-1.0 – DarenW

Antwort

2

pls versuchen wie folgt aus:

gst-Launch-1.0 videotestsrc! Abschlag Name = t! Warteschlange ! autovideosink t. ! Warteschlange ! autovideosink

+0

Können Sie erklären, warum das funktioniert und was passiert, wenn 'queue' fehlt? – DarenW

+0

Eine Warteschlange fügt einen Thread hinzu. Wenn Ihre Pipeline vorrollt, wartet sie, bis alle Senken Daten empfangen haben. Wenn keine Warteschlange vorhanden ist, sendet das erste Ausgangspad Ihres T-Stücks Daten an die Senke - das senkt Blöcke und wartet und verhindert dadurch, dass das T-Stück Daten an das zweite Ausgangspad sendet. Ein Thread erlaubt dies, so dass beide Senken Daten erhalten und Sie können vom Vorrollen in den Spielstatus wechseln. –

+0

Wenn 'queue' fehlt, funktioniert die Pipeline im Push-Modus. Wenn das T-Element vorhanden ist, blockiert die Chain-Funktion des ersten Sink-Elements die Pad-Push-Funktion des Quellelements, das zweite Sink-Element kann die Preroll-Funktion nicht abschließen. finden Sie unter: https://gstreamer.freedesktop.org/documentation/design/preroll.html#preroll https://gstreamer.freedesktop.org/documentation/application-development/advanced/threads.html#Scheduling-in -gstreamer – zyliu

Verwandte Themen