GStreamer 是一个基于管道的多媒体处理框架,它可以将各种媒体处理模块连接在一起以完成复杂的工作。
例如,GStreamer 可用于构建一个系统,以一种格式读取文件、处理它们并以另一种格式导出它们。 格式和过程可以以即插即用的方式改变。
以简单的mp4 文件播放为例, 我们的管道按如下流程构建.
gst-launch-1.0 -ev filesrc location=./material/talk.mp4 \
! decodebin name=dec \
! videoconvert \
! clockoverlay \
! autovideosink dec. \
! audioconvert \
! audioresample \
! autoaudiosink
@startuml
start
: g_main_loop_new;
: gst_pipeline_new;
: create_elements;
: add_elements_into_pipeline;
: link_elements;
: gst_element_set_state;
: g_main_loop_run;
if (msg type == GST_MESSAGE_EOS) then
: unlink_elements;
: remove_elements;
: release_elements;
endif
end
@enduml
需求
构建一个录制视频的
gst-launch-1.0 v4l2src device=xxx num-buffers=300 \
! x264enc \
! queue \
! mux. alsasrc num-buffers=1000 device="hw:2,0" \
! voaacenc \
! queue \
! qtmux name=mux \
! filesink location=video.mp4
@startuml
start
: v4l2src;
: nvv4l2decoder;
: nvvideoconvert;
: videorate;
: capsfilter;
: queue;
: nvv4l2h264enc;
: mp4mux;
: filesink;
end
@enduml