2016-04-11 8 views
1

Ich habe 2 gstreamer rohrleitungen. Einer zeigt ein skaliertes Live-Video an, das von der Kamera auf dem Bildschirm aufgenommen wurde, und der andere nimmt das Video in seinem ursprünglichen Format und speichert es in einer Datei auf der Festplatte, nachdem es mit dem H264-Format codiert wurde. Die zwei Pipelines sind wie folgt;kombinieren zwei gstreamer rohrleitungen

# Capture and display scaled camera feed 
gst-launch-1.0 -v autovideosrc ! videoscale ! video/x-raw, 
width=480,height=270 ! xvimagesink -e --gst-debug-level=3 sync=false 

# Save the camera feed in its original format to disk 
gst-launch-1.0 -v autovideosrc ! omxh264enc ! 'video/x-h264, 
stream-format=(string)byte-stream' ! h264parse ! qtmux ! filesink 
location=test.mp4 -e 

Diese zwei Pipelines für sich arbeiten, und ich habe mich gefragt, wie ich sie in eine d zeigt das skalierte Video auf dem Bildschirm verbinden könnte und das Video in seinem ursprünglichen Format in eine Datei aufzeichnen?

Antwort

1

Sieht aus wie ich das tee Element benötigt. nicht sicher, ob ich das richtig mache, aber es scheint zu funktionieren:

gst-launch-1.0 -v autovideosrc ! tee name = t ! queue ! omxh264enc ! 
'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! qtmux ! 
filesink location=test.mp4 t. ! queue ! videoscale ! video/x-raw, 
width=480,height=270 ! xvimagesink -e sync=false 
+1

ja das ist richtig Ansatz :) Tee tut genau das, was Sie wollen, Ihre Pfeife sieht richtig aus. Sie haben auch Warteschlangen nach dem T-Stück verwendet, die notwendig sind, um die Verarbeitung jedes Zweiges in einen separaten Thread zu verschieben (andernfalls können sich die Zweige gegenseitig blockieren). – nayana

+0

@otopolsky Danke für die Bestätigung! Ich bin neu bei Gstreamer, also lerne immer noch die Seile! Ich habe die Pipeline aus ihrem Dokumentationsbeispiel umformatiert, aber eines ist sicher, dass das zweite Mal, wenn wir das tee-Element (vor der zweiten Warteschlange) beziehen, auf uns t verwiesen wird. (Warum die Zeit am Ende?) – Luca