GStreamer-Pipeline-的构建

199 阅读1分钟

GStreamer 是一个基于管道的多媒体处理框架,它可以将各种媒体处理模块连接在一起以完成复杂的工作。

例如,GStreamer 可用于构建一个系统,以一种格式读取文件、处理它们并以另一种格式导出它们。 格式和过程可以以即插即用的方式改变。

以简单的mp4 文件播放为例, 我们的管道按如下流程构建.

pipeline

gst-launch-1.0 -ev filesrc location=./material/talk.mp4 \
  ! decodebin name=dec \
  ! videoconvert \
  ! clockoverlay \
  ! autovideosink dec. \
  ! audioconvert \
  ! audioresample \
  ! autoaudiosink

snapshot

build pipeline

@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

pipeline

@startuml
start
: v4l2src;
: nvv4l2decoder;
: nvvideoconvert;
: videorate;
: capsfilter;
: queue;
: nvv4l2h264enc;
: mp4mux;
: filesink;
end
@enduml