如何使用 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
用于将数据保存到文件中,但我不知道如何将它与管道的其余部分结合起来。
那么,如何在同一管道中使用 appsink
和 filesink
?
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
我是 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
用于将数据保存到文件中,但我不知道如何将它与管道的其余部分结合起来。
那么,如何在同一管道中使用 appsink
和 filesink
?
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