gstreamer-pipeline用法汇总

生成mp4

生成2s包含video和audio的mp4

gst-launch-1.0 -e --gst-debug=2 \
\
videotestsrc num-buffers=60 ! video/x-raw,framerate=30/1 ! \
openh264enc ! h264parse ! muxer.video_0 \
\
audiotestsrc num-buffers=90 ! audio/x-raw,channels=1 ! \
fdkaacenc ! aacparse ! muxer.audio_0 \
\
qtmux name=muxer ! queue ! filesink location=./test.mp4

qtmux生成只有video的mp4

gst-launch-1.0 videotestsrc num-buffers=60 \
! video/x-raw,framerate=30/1 ! openh264enc ! h264parse \
! video/x-h264,stream-format=avc,alignment=au ! qtmux \
! filesink location=./test.mp4

openh264enc输出是byte-stream,所以后面不能直接跟qtmux,需要加h264parse转成avc

不要caps video/x-h264,stream-format=avc,alignment=au也是可以的:

gst-launch-1.0 videotestsrc num-buffers=60 \
! video/x-raw,framerate=30/1 ! openh264enc \
! h264parse ! qtmux ! filesink location=./test.mp4

比较全的一个写法:

gst-launch-1.0 -e --gst-debug=**:2 videotestsrc is-live=true \
! queue ! videoconvert \
! videorate silent=false \
! videoscale \
! "video/x-raw, width=1280, height=720, framerate=30/1" \
! queue ! openh264enc ! h264parse \
! queue ! muxer.video_0 \
audiotestsrc is-live=true \
! audioconvert ! audioresample ! audiorate ! "audio/x-raw, rate=48000, channels=1" \
! queue ! fdkaacenc \
! queue ! muxer.audio_0 \
mp4mux name=muxer streamable=true \
! queue ! filesink location="./mystream.mp4" sync=false

从playbin里面dump audio数据

通过修改audiosink,将audio数据dump到文件,并且以mmp4文件存储:

gst-play-1.0 ./test.mp4 --audiosink='aacparse ! qtmux ! filesink location=./test.aac.mp4'

这个适合在代码中指定playbin的audiosink为上面的组合,dump出来的数据方便问题分析。

然后用gst-launch播放

gst-launch-1.0 filesrc location=./test.aac.mp4 \
! qtdemux name=d d.audio_0 ! aacparse ! fdkaacdec ! autoaudiosink

播放-如何添加caps filter

autovideosink和waylandsink可以播放成功,但是颜色不对:

gst-launch-1.0 playbin uri=file:/data/panda.mp4
gst-launch-1.0 filesrc location=/data/panda.mp4 ! decodebin ! autovideosink

h264parse的pad属性

h264parse的src pad的sink caps是video/x-h264,经过处理,输出的caps是经过parse的,stream-format可以是avc,avc3, byte-stream。

$ gst-inspect-1.0 h264parsePad Templates:SINK template: 'sink'Availability: AlwaysCapabilities:video/x-h264SRC template: 'src'Availability: AlwaysCapabilities:video/x-h264parsed: truestream-format: { (string)avc, (string)avc3, (string)byte-stream }alignment: { (string)au, (string)nal }

v4l2h264dec的sink pad属性

sink pad的caps是video/x-h264,可接收的收据stream-format只能是byte-stream,alignment只能是au

$ gst-inspect-1.0 v4l2h264decSINK template: 'sink'Availability: AlwaysCapabilities:video/x-h264(memory:DMABuf)stream-format: byte-streamalignment: auvideo/x-h264stream-format: byte-streamalignment: au

所以h264parse和v4l2h264dec放在一起,实际上不指定caps filter是可以的,可以完成自动协商。

但下面这几种写法都可以播放,但是颜色不对:

gst-launch-1.0 filesrc location=/data/panda.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! v4l2h264dec ! autovideosink
gst-launch-1.0 filesrc location=/data/panda.mp4 ! qtdemux ! h264parse ! v4l2h264dec ! autovideosink

caps filter解决颜色问题

通过分析,判断color-format不对,增加caps filter,加上format参数,指定位NV21格式,颜色正常:

gst-launch-1.0 filesrc location=/data/panda.mp4 \
! qtdemux ! h264parse ! video/x-h264,stream-format=byte-stream,alignment=au \
! v4l2h264dec ! videoconvert ! video/x-raw,format=NV21 ! autovideosink

简化下,去掉h264parse和v4l2h264dec之间的caps filter,videoconvert也是不需要的:

gst-launch-1.0 filesrc location=/data/panda.mp4 \
! qtdemux ! h264parse ! v4l2h264dec ! video/x-raw,format=NV21 ! autovideosink

使用waylandsink也是一样的:

gst-launch-1.0 filesrc location=/data/panda.mp4 \
! qtdemux name=demux demux.video_0 ! h264parse ! v4l2h264dec \
! videoconvert ! video/x-raw,format=NV21 ! waylandsink

播放http源

gst-launch-1.0 playbin uri=http://192.168.31.122/mov/mp4/panda.mp4gst-launch-1.0 souphttpsrc location=http://192.168.31.122/mov/mp4/panda.mp4 \
! qtdemux name=demux demux.video_0 ! h264parse ! v4l2h264dec \
! video/x-raw,format=NV21 ! autovideosink

打开Gstreamer日志,GST_DEBUG=4,4是INFO级别信息

GST_DEBUG=4 gst-launch-1.0 filesrc location=/data/panda.mp4 ! qtdemux ! decodebin ! autovideosink

播放https

souphttpsrc需要加上ssl-strict=false属性

gst-launch-1.0 \
souphttpsrc ssl-strict=false location=https://192.168.31.122/mov/mp4/panda.mp4 \
! qtdemux name=demux demux.video_0 ! h264parse ! v4l2h264dec \
! video/x-raw,format=NV21 ! autovideosinkgst-launch-1.0 \
souphttpsrc ssl-strict=false location=https://media.w3.org/2010/05/sintel/trailer.mp4 \
! qtdemux ! h264parse ! openh264dec !  autovideosink

playbin播放hls

gst-launch-1.0 playbin uri=http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8gst-launch-1.0 playbin uri=http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8gst-launch-1.0 playbin \
uri=https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_fmp4/master.m3u8

playbin通过videosink设置参数

gst-play-1.0 ./test.mp4 --videosink="glimagesink render-rectangle=<300,200,320,240>'"

gst-launch-1.0生成hls播放源

使用gst-launch-1.0生成HLS segment

gst-launch-1.0 videotestsrc is-live=true ! x264enc ! mpegtsmux ! hlssink max-files=20

它将生成播放列表和片段文件,时间越长segment000xx.ts的文件个数会更多,不用max-files选项的话,默认是10个:

.
├── playlist.m3u8
├── segment00000.ts
├── segment00001.ts
├── segment00002.ts
├── segment00003.ts
└── segment00004.ts

然后这些文件就可以通过HTTP访问,如nginx或Apache做服务器,用ffplay和gst-launch做播放测试:

ffplay http://192.168.31.122/hls/playlist.m3u8gst-launch-1.0 playbin uri=http://192.168.31.122/hls/playlist.m3u8gst-launch-1.0 playbin uri=http://192.168.31.122/hls/playlist.m3u8

生成Pipeline运行时的Element关系图

命令行程序,可以设置环境变量GST_DEBUG_DUMP_DOT_DIR,在pipeline运行时会生成pipeline的dot图。

GST_DEBUG_DUMP_DOT_DIR=. gst-launch-1.0 playbin uri=file:///data/panda.mp4

或者:

export GST_DEBUG_DUMP_DOT_DIR=.
gst-launch-1.0 playbin uri=file:///data/panda.mp4

分离2channel音频位1ch音频

gst-launch-1.0 filesrc location=~/audio.mp4 \
! qtdemux ! faad ! deinterleave name=d d.src_0 \
! fdkaacenc ! audio/mpeg,stream-format=raw ! aacparse \
! qtmux ! filesink location=~/audio-1ch.mp4

分离后播放:

gst-launch-1.0 filesrc location=~/audio-1ch.mp4 ! qtdemux ! faad ! playsink
gst-launch-1.0 filesrc location=~/audio-1ch.mp4 ! qtdemux ! avdec_aac ! playsink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github pages 用法详解 发布自己的网站

github pages 基础用法 URL 规则 假设你的 github 帐号为 mygithub&#xff0c;需要发布的仓库名为 myrepo&#xff0c;那么 pages 的 URL 为&#xff1a; https://mygithub.github.io/myrepo 添加内容 用任意编辑器写好&#xff08;或者生成&#xff09;标准的网页内容&a…

数据挖掘的基本概念和大数据的特点

数据挖掘是指从大量数据中提取有价值的信息或模式的过程。它通常使用计算机技术来分析数据&#xff0c;并利用统计学、机器学习、人工智能等方法来发现数据中的隐藏规律、趋势和关联性。 数据挖掘的基本概念包括以下几个方面&#xff1a; 数据预处理&#xff1a;对原始数据进行…

苹果正在测试新款Mac mini:搭载M3芯片 配备24GB大内存

据悉苹果目前正在测试新的Mac机型&#xff0c;亮点是采用最新的M3芯片。 据报道&#xff0c;首款搭载M3芯片的设备应该是13英寸的MacBook Pro和重新设计的MacBook Air&#xff0c;Mac mini机型并不在名单上。 M3和M2同样拥有最多8个核心&#xff0c;分别为4个性能核和4个能效核…

OpenAI-Translator 实战总结

最近在极客时间学习《AI 大模型应用开发实战营》&#xff0c;自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator&#xff0c;在这里简单记录下开发过程和心得体会&#xff0c;供有兴趣的同学参考 功能概览 通过openai的chat API&#xff0c;实现一个pdf翻译器实现一个…

设计模式十三:代理(Proxy Pattern)

代理模式是一种结构型设计模式&#xff0c;它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介&#xff0c;并提供了额外的功能&#xff0c;如远程访问、延迟加载、访问控制等。 代理模式的使用场景包括&a…

Python爬虫——selenium的安装和基本使用

1.什么是selenium&#xff1f; selenium是一个用于web应用程序测试的工具selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样支持通过各种driver&#xff08;FrifoxDriver&#xff0c;ItenrentExploreDriver&#xff0c;OperaDriver&#xff0c;ChromeDrive…

【BASH】回顾与知识点梳理(十四)

【BASH】回顾与知识点梳理 十四 十四. 文件与目录的默认权限与隐藏权限14.1 文件预设权限&#xff1a;umaskumask 的利用与重要性&#xff1a;专题制作 14.2 文件隐藏属性chattr (配置文件案隐藏属性)lsattr (显示文件隐藏属性) 14.3 文件特殊权限&#xff1a; SUID, SGID, SBI…

了解华为(H3C)网络设备和OSI模型基本概念

目录 一&#xff0c;认识华为 1.华为发展史 2.华为网络设备介绍 3.VRP概述 二&#xff0c;OSI七层模型 1.七层模型详细表格 2.各层的作用 3.数据在各层之间的传递过程 4.OSI四层网络模型 一&#xff0c;认识华为 官网&#xff1a;https://www.huawei.com/cn/ 1.华为发…

从‘深林’到潮鞋App:得物如何改变电商格局”

在App Store上搜索下载得物App&#xff0c;惊奇发现其下载量达到百万级别&#xff0c;媲美同期京东App的下载量。 这是一个不小的数据体量&#xff0c;对此我产生了极大的好奇&#xff1a;“在淘宝系、京东、唯品会等电商巨头林立的现状下&#xff0c;单依靠潮鞋的得物凭什么能…

详解配置交换机多生成树MSTP+VRRP 的典型组网

详解配置交换机多生成树MSTPVRRP 的典型组网 组网&#xff1a; 1. 这是一个由三台交换机组成的倒三角型二层交换网络&#xff1b;网络中有4个VLAN&#xff1a;10、20、30、40&#xff1b;接口编号如图所示&#xff1b;SW3为接入层交换机&#xff0c;SW1、SW2为汇聚层交换机&am…

bash: make: command not found

make之后报错信息如下&#xff1a;cd 对应的文件路径后 make 发现报错&#xff1a;bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…

Spark官方调优三部曲之二:内存调优

前言 这里再次强调一遍,spark性能调优最重要的只有两个: 数据序列化内存调优上一篇博客已经详细介绍了数据序列化性能调优,本文主要针对内存调优进行讲解。 说白了就是减少数据对内存的占用 内存调优概述 调整内存使用时有三个考虑因素:对象使用的内存量(您可能希望整个…

websocket+node实现直播(弱鸡版)

心血历程 这部分主要是写在写这些的时候遇到的问题以及换思路的过程&#xff0c;可以之间看正文 在之前我也写过直播功能&#xff0c;并且与websocket相结合实现了直播弹幕。只不过直播是使用的腾讯云的&#xff0c;而不是手写的直播推流拉流&#xff0c;这次又有一个新的项目…

“深入解析JVM内部机制:理解Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM内部机制&#xff1a;理解Java虚拟机的工作原理 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;解释其工作原理。我们将讨论JVM的组成部分、类加载过程、运行时数据区域以及垃圾回收机制。此外&…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S&#xff08;DDD with SpringBoot&#xff09;为本作者使用DDD过程中开发的框架&#xff0c;目前已可公开查看源码&#…

自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”

各位CSDN的uu们好呀&#xff0c;好久没有更新小雅兰的C专栏啦&#xff0c;话不多说&#xff0c;让我们进入类和对象的世界吧&#xff01;&#xff01;&#xff01; 类的6个默认成员函数 构造函数 析构函数 拷贝构造函数 类的6个默认成员函数 如果一个类中什么成员都没有&am…

el-select与el-tree结合使用,实现select框下拉使用树形结构选择数据

使用el-select与el-tree&#xff0c;实现如下效果&#xff0c; 代码如下&#xff1a; 注意点&#xff1a;搜索input框的代码一点放在option上面&#xff0c;不要放在option里面&#xff0c;否则一点击搜索框&#xff0c;下拉框就会收起来&#xff0c;不能使用。 <el-select…

【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

SKNet&#xff08;Selective Kernel Network&#xff09;是一种用于图像分类和目标检测任务的深度神经网络架构&#xff0c;其核心创新是引入了选择性的多尺度卷积核&#xff08;Selective Kernel&#xff09;以及一种新颖的注意力机制&#xff0c;从而在不增加网络复杂性的情况…

工业无线技术应用-无线控制斗轮机启停、故障等开关信号

斗轮堆取料机是一种对散料进行连续堆取作业的高效装卸大型机械,被广泛使用于火力发电厂和炼焦厂的输煤系统中。目前对斗轮机的技改主要为将斗轮机的部分程控信号改为无线传输&#xff0c;取代卷筒电机和电缆的应用。 多数情况下都是利用无线通讯做媒介&#xff0c;让工作人员通…

NestJs 的 项目配置 学习

应用程序通常运行在不同的环境中。根据环境的不同&#xff0c;应使用不同的配置设置。例如&#xff0c;通常本地环境依赖于特定的数据库凭据&#xff0c;仅对本地数据库实例有效。生产环境将使用一组单独的数据库凭据。由于配置变量发生变化&#xff0c;最佳实践是将配置变量存…