合并两条gstreamer管道

合并两条gstreamer管道,gstreamer,Gstreamer,我有两条gstreamer管道。一个在屏幕上显示从摄像头捕获的缩放实时视频,另一个以原始格式拍摄视频,并在使用H264格式编码后将其保存到磁盘上的文件中。这两条管道如下: # 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=

我有两条gstreamer管道。一个在屏幕上显示从摄像头捕获的缩放实时视频,另一个以原始格式拍摄视频,并在使用H264格式编码后将其保存到磁盘上的文件中。这两条管道如下:

# 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

这两条管道各自工作,我想知道如何将它们组合成一条管道,即在屏幕上显示缩放的视频,并将视频以原始格式录制到文件中?

看起来我需要
tee
元素。我不确定我是否做对了,但它似乎有效:

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

是的,这是正确的方法:)tee完全符合您的要求,您的管道看起来是正确的。您还使用了tee之后的队列,这是将每个分支的处理移动到单独线程中所必需的(否则分支可能会相互阻塞)。@otopolsky感谢您的确认!我是gstreamer的新手,所以仍在学习诀窍!我根据它的文档示例重新格式化了管道,但有一点我可以肯定,那就是为什么我们第二次引用tee元素(在第二个队列之前)时,它被引用到了我们t。(为什么是最后一段时间?)