hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

GStreamer基础教程12 - 常用命令东西

2019-11-18杂谈搜奇网18°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/ 本文版权归作者一切,迎接转载。贸易转载请联络作者取得受权,非贸易转载请在文章页面显著位置给出原文衔接.
  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
GStreamer基础教程12 - 常用命令东西

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282253.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>