GStreamer基础教程12 - 常用命令东西
2019-11-18杂谈搜奇网27°c
A+ A-择要
GStreamer供应了差别的敕令行东西用于疾速的检察信息以及考证Pipeline的是不是能够准确运转,在日常平凡的开辟过程当中,我们也优先运用GStreamer的敕令行东西考证,再将Pipeline集成到运用中。本文将引见gst-inspect-1.0,gst-discoverer-1.0,gst-launch-1.0敕令行东西的运用。
gst-inspect-1.0
此敕令有3种事情形式,现实中我们经常使用第一种和第三种体式格局:
一、不带任何参数。如许会列出当前体系中支撑的一切Element,这些Element可用于组织Pipeline.
二、跟文件名。如许会将指定文件作为一个GStreamer插件,尝试列出个中所包括的Element。比方下面的敕令列出了libgstjpeg.so所包括的2个Elements:
$ gst-inspect-1.0 /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstjpeg.so Plugin Details: Name jpeg Description JPeg plugin library Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstjpeg.so Version 1.8.3 License LGPL Source module gst-plugins-good Source release date 2016-08-19 Binary package GStreamer Good Plugins (Ubuntu) Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-good1.0 jpegenc: JPEG image encoder jpegdec: JPEG image decoder 2 features: +-- 2 elements
三、跟Element名。会列出Element的详细信息。比方,下面的敕令会列出jpeg解码器所支撑的输入数据范例,Pad信息,支撑的属性及值。我们重要关注Pad Template,以及Element的属性信息。
$ gst-inspect-1.0 jpegdec Factory Details: Rank primary (256) Long-name JPEG image decoder Klass Codec/Decoder/Image Description Decode images from JPEG format Author Wim Taymans <wim@fluendo.com> Plugin Details: Name jpeg Description JPeg plugin library Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstjpeg.so Version 1.8.3 License LGPL Source module gst-plugins-good Source release date 2016-08-19 Binary package GStreamer Good Plugins (Ubuntu) Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-good1.0 GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstVideoDecoder +----GstJpegDec Pad Templates: SINK template: 'sink' Availability: Always Capabilities: image/jpeg SRC template: 'src' Availability: Always Capabilities: video/x-raw format: { I420, RGB, BGR, RGBx, xRGB, BGRx, xBGR, GRAY8 } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ] Element Flags: no flags set Element Implementation: Has change_state() function: gst_video_decoder_change_state Element has no clocking capabilities. Element has no indexing capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Implementation: Has chainfunc(): gst_video_decoder_chain Has custom eventfunc(): gst_video_decoder_sink_event Has custom queryfunc(): gst_video_decoder_sink_query Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default Pad Template: 'sink' SRC: 'src' Implementation: Has custom eventfunc(): gst_video_decoder_src_event Has custom queryfunc(): gst_video_decoder_src_query Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default Pad Template: 'src' Element Properties: name : The name of the object flags: readable, writable String. Default: "jpegdec0" parent : The parent of the object flags: readable, writable Object of type "GstObject" idct-method : The IDCT algorithm to use flags: readable, writable Enum "GstIDCTMethod" Default: 1, "ifast" (0): islow - Slow but accurate integer algorithm (1): ifast - Faster, less accurate integer method (2): float - Floating-point: accurate, fast on fast HW max-errors : (Deprecated) Error out after receiving N consecutive decoding errors (-1 = never fail, 0 = automatic, 1 = fail on first error) flags: readable, writable, 0x80000000 Integer. Range: -1 - 2147483647 Default: 0
gst-discoverer-1.0
此敕令在GStreamer基础教程06 - 猎取媒体信息中运用过,是对GstDiscoverer接口的封装,能够轻易的检察媒体文件的编码,帧率等信息。
$ gst-discoverer-1.0 sintel_trailer-480p.mp4 Analyzing file:///home/xleng/video/sintel_trailer-480p.mp4 Done discovering file:///home/xleng/video/sintel_trailer-480p.mp4 Topology: container: Quicktime audio: MPEG-4 AAC video: H.264 (High Profile) Properties: Duration: 0:00:52.209000000 Seekable: yes Live: no Tags: audio codec: MPEG-4 AAC audio maximum bitrate: 128000 datetime: 1970-01-01T00:00:00Z title: Sintel Trailer artist: Durian Open Movie Team copyright: (c) copyright Blender Foundation | durian.blender.org description: Trailer for the Sintel open movie project encoder: Lavf52.62.0 container format: ISO MP4/M4A video codec: H.264 / AVC bitrate: 535929
gst-launch-1.0
gst-launch是我们日常平凡运用最多的一个敕令,它吸收一个用字符串体式格局形貌的Pipline,将其实例化并运转。我们能够用此敕令疾速的搜检Pipeline中各个元素是不是能够准确的衔接起来。当我们须要构建的Pipeline很庞杂时,我们也能够将Pipeline举行拆分,逐渐经由过程gst-launch考证Pipeline的合法性。
经由过程gst-launch考证的字符串Pipeline能够直接运用gst_parse_launch()接口将其转化为GstPipeline对象,节省了我们零丁挪用API去建立Element的时候。
当我们用字符串形貌Pipeline时,每一个Element之间须要经由过程叹号 “!" 分开Element,如许gst-launch才准确辨认。
在运用gst-launch时,依据差别的运用场景,我们能够分为以下的范例。
采纳默许的参数建立Pipeline
这类体式格局我们只需将所运用的Element运用叹号分开即可,比方:
$ gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
设置Element的属性
在某些情况下,我们须要修正Element的属性,或指定所需参数(比方playbin的uri参数),Element的属性直接跟在Element以后。下面的敕令会设置videotestsrc的视频形式,输出图象为环形。属性支撑的值能够经由过程gst-inspect敕令检察。
$ gst-launch-1.0 videotestsrc pattern=11 ! videoconvert ! autovideosink
假如属性值中包括空格,我们能够将其置于单引号或双引号中。
$ gst-launch-1.0 -v videotestsrc ! clockoverlay halignment=right valignment=bottom text="Edge City" shaded-background=true font-desc="Sans, 36" ! videoconvert ! autovideosink
包括分支的Pipeline
每一个Element都有name的属性,我们能够应用name来完成包括多个分支的庞杂的Pipeline,这常见于有多个输出/输入的Element(mux,demux,tee等)。
下面的敕令经由过程tee建立了2个分支,离别用于差别的sink,在一个分支是Pipeline完成后(抵达sink),我们能够运用“name加一个点号”从新建立一个分支。
$ gst-launch-1.0 videotestsrc ! videoconvert ! tee name=t ! queue ! autovideosink t. ! queue ! autovideosink
运用一样的体式格局,我们也能够将多个分支兼并为一个。下面的敕令起首解码文件,将视频编码为H.264,音频编码为MP3,终究再兼并生成TS文件。注重dmux和mux Element的运用。
$ gst-launch-1.0 filesrc location=surround.mp4 ! decodebin name=dmux ! queue ! audioconvert ! lamemp3enc ! mux. \
dmux. ! queue ! x264enc ! mpegtsmux name=mux ! queue ! filesink location=out.ts
指定Element的Pad
某些情况下,我们愿望本身指定某个Pad用于衔接,我们能够指定已定名Element的Pad来完成。
$ gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! \
matroskademux name=d d.video_00 ! matroskamux ! filesink location=sintel_video.mkv
上面的敕令会将sintel_trailer-480p.webm文件举行Demux,只挑选个中的视频(video_00),再将其保存为mk文件,只保存了视频部份。假如想只保存音频部份,能够运用以下敕令:
$ gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! \
matroskademux name=d d.audio_00 ! vorbisparse ! matroskamux ! filesink location=sintel_audio.mka
上面两条敕令均未对视频举行解码,只是将其从一个容器中拷入到另一个容器。
应用Caps Filter过滤码流
当Element包括多个输出Pad时,能够致使衔接到下一个Element的Pad具有不肯定性。鄙人一个Element支撑当前Element一切的输出范例,这时候GStreamer会随机挑选一个Pad用于衔接。
比方:我们没法肯定下面的Pipeline会运用video_00照样audio_00衔接到filesink,由于filesink同时支撑audio及video输入。
$ gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux ! filesink location=test
我们能够如上一节所说,显式指定衔接所用的Pad,或许运用Caps Filter:
$ gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! \
matroskademux ! video/x-vp8 ! matroskamux ! filesink location=sintel_video.mkv
Caps Filter表现为一个只吸收指定数据范例的Element,并将数据通报到下一个Element,能够高效的处理二义性的题目。
我们能够运用gst-inspect检察Element的输出Pad,以决议我们的Caps Filter须要增加何种参数。在gst-launch后加 -v 参数能够输出Pipeline衔接时所运用的Pad信息。
关于多个过滤前提,我们须要经由过程逗号离隔。
关于某些特别的范例参数,GStreamer供应了响应的关键字来举行转换:
- i 或 int 示意整型或局限;
- f 或 float 示意浮点数及局限;
- 4 或 fourcc 示意4个字符的FOURCC 代码;
- b, bool, 或 boolean 示意布尔型数据;
- s, str, 或 string 示意字符串;
- fraction 示意分数(比方帧率, 像素宽高比);
- l 或 list 示意列表。
用于发送和吸收UDP RTP数据:
$ gst-launch-1.0 v4l2src ! \ video/x-raw-yuv,width=128,height=96,format='(fourcc)'UYVY ! \ videoconvert ! ffenc_h263 ! video/x-h263 ! rtph263ppay pt=96 ! \ udpsink host=192.168.1.1 port=5000 sync=false $gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, \ clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 \ ! xvimagesink
运用YUY2或YV12作为测试视频格式,帧率为30帧/秒:
$ gst-launch-1.0 videotestsrc ! \ 'video/x-raw-yuv,format=(fourcc)YUY2,framerate=30/1;video/x-raw-yuv,format=(fourcc)YV12,framerate=30/1' \ ! xvimagesink
经由过程alsasrc录制文件,限制采样率及位宽:
$ gst-launch-1.0 alsasrc! \ 'audio/x-raw-int,rate=[32000,64000],width=[16,32],depth={16,24,32},signed=(boolean)true' \ ! wavenc ! filesink location=recording.wav
总结
经由过程本文,我们控制了:
- 怎样经由过程gst-inspect-1.0检察当前体系所具有的GStreamer插件以及每一个插件的详细信息。
- 怎样经由过程gst-discoverer-1.0检察媒体文件的Metadata。
- 怎样经由过程gst-launch-1.0运转及测试Pipeline。
- 假如经由过程Caps Filter过滤指定数据。
援用
https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c
https://gstreamer.freedesktop.org/documentation/tutorials/basic/gstreamer-tools.html?gi-language=c
作者: John.Leng 出处: http://www.cnblogs.com/xleng/ 本文版权归作者一切,迎接转载。贸易转载请联络作者取得受权,非贸易转载请在文章页面显著位置给出原文衔接.