如何使用 GStreamer 组合 appsink 和 filesink?

How to combine appsink and filesink using GStreamer?

我是 GStreamer 的新手,我正在尝试创建一个管道来同时显示和录制视频。我设法使用以下方法制作了显示部分:

ss << "filesrc location=/home/videos/video1.avi ! avidemux name=demux demux.video_0 ! mpeg4videoparse ! avdec_mpeg4 ! nvvidconv ! video/x-raw,format=I420 ! appsink name=mysink";

另外,我读到 filesink location=somepath 用于将数据保存到文件中,但我不知道如何将它与管道的其余部分结合起来。

那么,如何在同一管道中使用 appsinkfilesink

GStreamer 为这种情况提供了一个 tee 元素。但是请注意,在大多数情况下,您会希望在发球台的每个分支之后使用 queue 以防止死锁。例如

filesrc location=/home/videos/video1.avi ! avidemux name=demux demux.video_0 ! mpeg4videoparse ! avdec_mpeg4 ! nvvidconv ! video/x-raw,format=I420 ! tee name=mytee ! queue ! appsink name=mysink mytee. ! queue ! filesink location=out.raw