GStreamer基础教程12 - 常用命令工具

摘要

  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 <[email protected]>

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/

本文版权归作者所有,欢迎转载。商业转载请联系作者获得授权,非商业转载请在文章页面明显位置给出原文连接.

原文地址:https://www.cnblogs.com/xleng/p/11791944.html

时间: 2024-10-10 10:59:51

GStreamer基础教程12 - 常用命令工具的相关文章

Linux 系统基础优化和常用命令

目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux中文显示设置(防止中文乱码) df 命令 tree命令 设置主机名 DNS 查看Linux的dns, 唯一配置文件 本地强制dns解析文件 /etc/hosts nslookup命令 计划任务crond服务 软件包管理 windows程序 macos程序 RPM软件包管理器 实例 rpm安装软件 r

Linux基础系统优化及常用命令

# Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ifconfig 查询.设置网卡和ip等参数- ifup,ifdown 脚本命令,更简单的方式启动关闭网络- ip 符合指令,直接修改上述功能 ```bash在我们刚装好linux的时候,需要用xshell进行远程连接,那就得获取ip地址,有时候网卡默认是没启动的,Linux也就拿不到ip地址,因

GStreamer基础教程02 - 基本概念

摘要 在 Gstreamer基础教程01 - Hello World中,我们介绍了如何快速的通过一个字符串创建一个简单的pipeline.为了能够更好的控制pipline中的element,我们需要单独创建element,然后再构造pipeline,下面将介绍GStreamer的一些基本概念并展示pipeline的另一种构造方式. 基本概念 Element 我们知道element是构建GStreamer pipeline的基础,element在框架中的类型为GstElement,所有GStrea

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

基础教程:svn命令在linux下的使用

1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    简写:svn co 2.往版本库中添加新的文件 svn add file   例如:svn add test.php(添加test.php)   svn add *.php(添加当前目录下所有的php文件) 3.将改动的文件提交到版本库 svn commit -m "LogMessage"

java jvm常用命令工具

[尊重原创文章出自:http://www.chepoo.com/java-jvm-command-tools.html] 一.概述 程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统日志.堆dump文件.线程dump文件.GC日志等.通过虚拟机监控和诊断工具可以帮忙我们快速获取.分析需要的数据,进而提高问题解决速度. 本文将介绍虚拟机常用监控和问题诊断命令工具的使用方法,主要包含以下工具: jps 显示系统中所有Hotspot虚拟机进程 jstat 收集Hotspot虚拟机各方

JVM监控和调优常用命令工具总结

JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非常方便了.本文总结了最常用的命令行工具及其常用参数解释,图形化监控工具的用法,仅供参考. jps Java版的ps命令,查看java进程及其相关的信息,如果你想找到一个java进程的pid,那可以用jps命令替代linux中的ps命令了,简单而方便. 命令格式: jps [options] [hos

linux基础知识:常用命令

概要 linux版本 linux有两种版本:发行版本和核心版本.核心版本主要是linux内核,官方版是由linus维护. linux核心版本表示:major.minor.patchlevel.例如 2.2.11表示核心版本2.2的第11次修改.我们约定,minor为奇数时表示,该版本刚加入新的内容,不稳定,相当于测试版本:minor为偶数时:表示是稳定版本. linux分区类型 硬盘分区的命令设计:hd:表示IDE硬盘:sd表示是SCSI硬盘:第三个字母表示分区在哪个设备上面:a表示1,b表示2

Linux基础命令--常用命令工具

1 cd 切换工作目录 [[email protected] ~]# cd /usr/local/    #切换到目录/usr/local下 [[email protected] local]# cd ..       #切换到上一级目录 [[email protected] usr]# cd -        #返回到/usr/local下 /usr/local 2 touch 创建或修改文件 [[email protected] ~]# touch test.txt 在当前目录下,若果不存在