由于工作中要使用DeepStream这个框架,绕不开gstreamer-1.0,于是这段时间学习了这个框架的用法。还没有能力去阅读源码。gstreamer框架中,gst-inspect-1.0和gst-launch-1.0这两个工具是必须要熟悉的,现就gst-launcher-1.0的用法做下笔记,以免日后遗忘。参考https://blog.csdn.net/u010168781/article/details/102805210

一、命令格式

gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION
## OPTIONS参数选项:
–help
-v, --verbose
-q, --quiet 不打印信息
-m, --messages 输出管道总线上的消息
-t, --tags 输出标记tag(也称为元数据)
-o FILE, --output=FILE 将管道保存到XML文件中,并退出
-f, --no_fault 不安装故障处理程序
-T, --trace 打印内存分配跟踪。必须在编译时启用该特性才能工作。
## PIPELINE-DESCRIPTION

元件: ELEMENTTYPE [PROPERTY1 …]
元件属性:PROPERTY=VALUE …,多个值之间用空格
箱子Bin: [BINTYPE.] ([PROPERTY1 …] PIPELINE-DESCRIPTION),通常在gst_parse_launch()函数中使用,构建部分管道,而不是完整的顶级管道
链接Link:[[SRCELEMENT].[PAD1,…]] ! [[SINKELEMENT].[PAD1,…]],将SRCELEMENT通过“!”链接到SINKELEMENT
[[SRCELEMENT].[PAD1,…]] ! CAPS ! [[SINKELEMENT].[PAD1,…]],CAPS表示过滤器,链接符合CAPS的PAD
//能力CAP:MIMETYPE [, PROPERTY[, PROPERTY …]]] [; CAPS[; CAPS …]],使用给定的mimetype和可选的给定属性创建功能。
能力属性:NAME=[(TYPE)] VALUE in lists and ranges: [(TYPE)] VALUE

二、用例

1、播放MP4音视频

MP4文件一般有2个流:音频流和视频流,部分文件会有字幕流。一般我们只处理2个流就够了。一般视频流采用h264编码,音频流采用aac编码。一开始由于不熟悉gst-inspect的用法,导致音视频解码器找不到,浪费了很多时间。

gst-inspect-1.0 | grep h264 找到h264解码器avdec_h264

gst-inspect-1.0 | grep aac 找到aac解码器avdec_aac。也可以用faad解码,faad输出为16位音频,avdec_aac输出为32位音频

gst-launch-1.0中关于demux的用法也摸索了好久,mp4文件要用到qtdemux(quick time demux),用names属性分离管道,正确用法如下

gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! avdec_h264 ! xvimagesink 播放视频

gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! avdec_aac ! audioconvert ! audioresample ! alsasink  播放音频(audioresample可选)

gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! queue ! avdec_aac ! audioconvert ! alsasink demuxer. ! queue ! avdec_h264 ! xvimagesink  播放音视频

demuxer. 后面可以指定流名称,如 demuxer.video_0,demuxer.audio_0,流名称必须与文件中的流名称对应。

其他的文件格式,如flv,ogg,mpeg等文件都可以采用类似的方式,先用gst-inspect-1.0查找对应的demux和音视频解码器,然后构建管道即刻播放。

对于元件中的request pad,gst-launch-1.0也可以指定request pad的连接,典型如tee,nvstreammux等元件需要request pad,连接方式如下:

gst-launch-1.0 filesrc location=sample_720.h264 ! h264parse ! nvv4l2decoder ! smuxer.sink_0 nvstreammux name=smuxer  width=1920 height=1080 batch-size=1 batched-push-timeout=4000000 ! nvinfer config-file-path=dstest1_pgie_path.txt ! nvvideoconvert ! nvdsosd ! nvvideoconvert ! nvv4l2h264enc ! h264parse ! qtmux ! filesink location=test.mp4

以上命令是对deepstream-test1的命令行模拟,但是缺少了osd探针函数,所以并不完整,但也可以运行,主要用于展示nvstreammux request pad(sink_%u)的用法。其中nvv4l2decoder是nvidia的硬解码元件,nvstreammux是deepstream队列元件,在使用nvinfer进行推理之前必须要使用该队列元件添加nvinfer所需要的数据。nvinfer是推理元件,配置文件为dstest1_pgie_path.txt。有关deepstream的资料,请另行查阅。

2、编码

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc ! h264parse ! qtmux ! filesink location=1.mp4 -e

注意,尾部的-e不能省,表示按下ctrl-c键后会向视频流发送EOS标识,视频流才能完整编码。

3、rtp推流

发送端:gst-launch-1.0 v4l2src ! video/x-raw,format=YUY2,width=1280,height=720,framerate=10/1 ! videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5600

接收端:gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264' ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink

gst-launch-1.0用法小记相关推荐

  1. Matlab norm 用法小记

    Matlab norm 用法小记 matlab norm (a) 用法以及实例 norm(A,p) 当A是向量时 norm(A,p)   Returns sum(abs(A).^p)^(1/p), f ...

  2. document.execCommand()的用法小记

    document.execCommand()的用法小记 首先要说明的是在firefox下支持不好. 2D-Position 允许通过拖曳移动绝对定位的对象.  AbsolutePosition 设定元 ...

  3. <笔记2>numpy的生成随机数用法小记

    numpy的生成随机数用法小记 numpy生成随机数 <以下图片来自黑马程序猿录播课程笔记> import numpy as np import random #random 生产随机数 ...

  4. boost::fibers::launch::dispatch的用法测试程序

    boost::fibers::launch::dispatch的用法测试程序 实现功能 C++实现代码 实现功能 boost::fibers::launch::dispatch的用法测试程序 C++实 ...

  5. python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记

    python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记 此篇为上一篇pyqt5图像压缩小工具改良版.因为比较简单,下面直接贴上代码. 效果图: # -*- coding: u ...

  6. zbb20180930 java,nio,netty Netty5.0用法

    Netty5.0用法 Maven坐标       <dependencies>            <!-- https://mvnrepository.com/artifact/ ...

  7. do{}while(0)用法

    do..while(0)的用法 真是的,我用C++还是太少了.这个宏以前明明见过的,但其存在的意义突然就想不起来了.刚才问了下axx大才又"知道"了一次.赶紧记下来. 这样的宏见过 ...

  8. Python之max(num, key=lambda x:x[0])用法的详细解析

    1.max(num, key=lambda x:x[0])语法介绍如下: key=lambda 元素: 元素[字段索引] print(max(C, key=lambda x: x[0])) x:x[] ...

  9. javascript:void(0);用法及常见问题解析

    void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...

  10. char data[0]用法总结

    struct MyData {     int nLen;     char data[0]; };         开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来.          ...

最新文章

  1. [BZOJ2502]清理雪道 有上下界网络流(最小流)
  2. 2次转管理失败后,我对项目、团队、敏捷转型的新认知
  3. 10个随机数相加等于100
  4. 最新版本的Silverlight Tools For Silverlight 2 RTW正式版
  5. 在状态栏中显示鼠标位置坐标
  6. ae2021最新遮罩路径图形扭曲插件:BAO Boa for Mac
  7. java日志技术:Log4J使用教程
  8. Mvc Webapi+Fiddler调试 (WebAPI 一)
  9. HP-Socket v5.4.4 发布,高性能跨平台网络通信框架
  10. Java高级面试题!docker启动
  11. OpenCV 1.0在VC6下安装与配置(附测试程序)
  12. abaqus与python后处理_abaqus用Python批量后处理教程!如何从abaqus导出python
  13. PHP开发安全之近墨者浅谈(转)
  14. 喜报 | 谱尼测试获得零跑科技第三方试验室认可
  15. 华为手机灵敏度设置_和平精英华为手机灵敏度怎么设置 上分灵敏度推荐
  16. linux 命令:userdel 详解
  17. 保温杯哪种材质最好_玻璃杯材质分为哪几种 玻璃杯什么材质最好
  18. sql end关键字
  19. 世间什么才是最珍贵的?
  20. ts16949 软件开发流程图_TS16949体系过程流程图(1)

热门文章

  1. 解读随着教育改革的深入steam教育
  2. Python学习笔记(01 Hello World的条件输出 02 数值运算)
  3. 【已解决】取消电脑自动开机
  4. 在企业中TPM管理如何开展?
  5. Ubuntu Install Zhengma
  6. Mysql:数据库无法启动,系统找不到指定文件
  7. 问卷设计中 你经常使用计算机吗,计算机应用基础课程调查问卷
  8. Telltale:简化了Netflix应用程序监视
  9. 阿里云轻量应用服务器防火墙配置(全网最简单)
  10. 错误代码:0x800F081F-0x20003。在INSTALL_UPDATES操作过程中的SAFE_OS阶段,安装失败,出现错误