Gstreamer 常用命令搜集

1.YUV-H264编码

gst-launch-1.0 filesrc location=test.yuv blocksize=3110400 ! video/x-raw,format=I420, framerate=25/1,width=1920,height=1080,interlace-mode=progressive ! nvh264enc ! filesink location=out.264

2.自动探测解码播放

gst-launch-1.0 filesrc location=out.h264 ! decodebin  ! d3dvideosink

3.指定解码器播放

gst-launch-1.0 filesrc location=out.h264 ! video/x-h264 ! h264parse ! avdec_h264 ! d3dvideosink

4.解码H264-YUV

gst-launch-1.0 filesrc location=out.h264 ! video/x-h264 ! h264parse ! avdec_h264 ! filesink  location=1.yuv

5.H264-RGB

gst-launch-1.0 filesrc location=out.h264 ! video/x-h264 ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=BGRA ! filesink location=2.rgb

6.混视频流

/usr/local/bin/gst-launch-1.0 -vv -e videomixer name=mix background=2 \
        sink_0::alpha=1.0 \
        sink_0::ypos=0 \
        sink_0::xpos=0 \
        sink_1::alpha=1.0 \
        sink_1::ypos=80 \
        sink_1::xpos=40 \
        sink_2::alpha=1.0 \
        sink_2::ypos=80 \
        sink_2::xpos=410 \
        sink_3::alpha=1.0 \
        sink_3::ypos=80 \
        sink_3::xpos=780 \
        sink_0::zorder=1 \
        sink_1::zorder=3 \
        sink_2::zorder=3 \
        sink_3::zorder=4 \
        ! clockoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=top \
        ! timeoverlay auto-resize=false draw-shadow=false draw-outline=false halignment=left valignment=bottom \
        ! queue \
            ! nvh264enc preset=1 bitrate=1500 rc-mode=2 gop-size=10 \
            ! h264parse config-interval=-1 \
            ! mpegtsmux ! rtpmp2tpay pt=33 \
            ! udpsink host=239.255.42.61 port=5004 multicast-iface=10g-1 ttl=4 ttl-mc=4 \
        multifilesrc location=/IMG/logo.jpg caps="image/jpeg,framerate=1/1" \
            ! jpegdec ! videoconvert ! videoscale \
                ! video/x-raw,width=1920,height=1080 \
            ! mix.sink_0 \
        udpsrc multicast-group=239.255.42.60 address=239.255.42.60 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
                ! mix.sink_1 \
        udpsrc multicast-group=239.255.42.57 address=239.255.42.57 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
            ! mix.sink_2 \
        udpsrc multicast-group=239.255.42.62 address=239.255.42.62 port=5004 multicast-iface=eth0 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T,payload=(int)33" \
                ! rtpjitterbuffer ! rtpmp2tdepay ! tsdemux ! h264parse config-interval=-1 \
            ! avdec_h264 skip-frame=1 output-corrupt=false ! videoconvert ! videoscale \
            ! video/x-raw,width=360,height=240 \
            ! mix.sink_3 \

4.转码将h265转码成h264

gst-launch-1.0 filesrc location=out2.h265 ! video/x-h265 ! h265parse ! avdec_h265  !openh264enc  complexity=high bitrate=10000000 !filesink location=out3.h264

5.播放MP4

1)万能播放器播放

gst-play-1.0.exe 1.mp4

2)自动插件播放

gst-launch-1.0 filesrc location=t.mp4 ! qtdemux name=demux  demux.  ! queue ! decodebin  ! autovideosink  demux. ! queue  ! decodebin  ! audioconvert ! audioresample ! autoaudiosink

6 采集屏幕录像

采集并播放

gst-launch-1.0 dx9screencapsrc  ! d3dvideosink

采集并保存RGB文件

gst-launch-1.0 dx9screencapsrc  ! filesink  location=D:\\videos\\capture.bgr

采集并保存YUV文件

gst-launch-1.0 dx9screencapsrc !videoconvert !video/x-raw,format=I420 !filesink  location=capture.yuv

7.采集摄像头

gst-launch-1.0 ksvideosrc devicepath="\\\\\?\\usb\#vid_04f2\&pid_b604\&mi_00\#6\&31e07f50\&0\&0000\#\{6994ad05-93ef-11d0-a3cc-00a0c9223196\}\\global" ! d3dvideosink

Linux上采集设备为v4l2src。

8.摄像头采集并RTP串流

gst-launch-1.0 wrappercamerabinsrc  !videoconvert !video/x-raw,format=I420 !openh264enc usage-type=camera complexity=high bitrate=10000000 ! rtph264pay  config-interval=3 ssrc=12345 !queue !udpsink host="127.0.0.1" port=60002

9.音视频同步

gst-launch-1.0 udpsrc address=192.168.1.93 port=7890! typefind ! tsdemux name=d ! multiqueue name=q use-buffering=1 d. ! q.  q. ! h264parse ! capsfilter caps=“video/x-h264, stream-format=\(string\)avc, alignment=\(string\)au” ! avdec_h264 ! d3dvideosink q. ! aacparse ! avdec_aac ! audioconvert ! audioresample ! autoaudiosink
gst-launch-1.0.exe udpsrc uri=”udp://192.168.1.93:7890” latency=200 ! tsdemux name=demuxer demuxer. ! queue max-size-time=0 ! h264parse ! d3d11h264dec ! d3dvideosink demuxer. ! queue max-size-time=0 ! avdec_aac ! audioconvert ! audioresample ! autoaudiosink

10.nvenc转推srt流

gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! nvh264enc preset=1 bitrate=2000 rc-mode=2 gop-size=10 ! video/x-h264 ! mpegtsmux alignment=7 ! srtsink uri="srt://:1234" sync=false async=false

11.videotestsrc用nvcodec硬件编码,码率高的解决方式:

gst-launch-1.0 videotestsrc is-live=true ! videorate ! video/x-raw,width=1280,height=720,framerate=30/1 ! videorate max-rate=30 ! nvh264enc bitrate=2000 ! video/x-h264 ! mpegtsmux alignment=7 ! srtsink uri="srt://:12345" sync=false async=false

1. 播放视频、音频

  音频:gst-launch-1.0 filesrc loaction=123.mp3 ! mad ! autoaudiosink   

  //补充说明:autoaudiosink可换成pulsesink或alsasink,需要使用gst-inspect查询是否存在这些sink插件,其实autoaudiosink是个壳,最终还是选择使用后两者之一。

  视频:gst-launch-1.0 filesrc location=320_240.mp4 ! qtdemux ! sprdavcdec ! autovideosink

  //补充说明:autovideosink默认使用ximagesink。ximagesink兼容性较好,但耗资源,xvimagesink兼容性差,因缺乏显卡支持会失败,但效率高。

  其他:gst-launch-1.0 filesrc location=abc.mp4 ! qtdemux name=demux demux.video_0 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink //只分离视频并播放

     gst-launch-1.0 filesrc location=3.mp4 ! decodebin ! autovideoconvert ! autovideosink   //只解码和显示视频部分,音频过滤掉,decodebin使用着最简单方便
  //补充:gstreamer好像不能分离出可播的264裸码流,但是可以用ffmpeg转:ffmpeg.exe -i 320_240.mp4 -vcodec copy -an 320_240.h264

2. 视频、音频编码

  视频:gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080" ! omxh264enc ! "video/x-h264, stream-format=byte-stream" ! h264parse ! qtmux ! filesink location=test.mp4

  音频:gst-launch-1.0 audiotestsrc ! audioconvert ! "audio/x-raw,format=S16LE,channels=2,rate=8000" ! lamemp3enc ! filesink location=audio_conv.mp3

             gst-launch-1.0 xxx.mp3 ! mad ! audioconvert ! lamemp3enc ! filesink location=xxx_mad_lame.mp3   //mad只解码出S32LE的格式,lame只支持S16LE的格式,因此必须通过audioconvert来转换

3. 摄像头预览

  gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=20/1 ! autovideosink

  说明:v4l2src即图形源,如果不带此插件,可以用videotestsrc替代

4. 转码(avc->yuv, mp3/aac->pcm)

  avc->yuv:gst-launch-1.0 filesrc location=attachment.mkv ! matroskademux ! avdec_h264 ! filesink location=tmp.yuv //注意,生成的yuv的size会非常大,mkv中的视频为h264格式

  avc->yuv->sinkgst-launch-1.0 filesrc location=dgld.mp4 ! qtdemux ! avdec_h264 ! videoconvert  ! video/x-raw,format=I420 ! autovideosink

  mp3->wav:gst-launch-1.0 filesrc location=1.mp3 ! mad ! wavenc ! filesink location=1.wav  //mad解码出来是32bit的pcm数据,不是S16LE格式的,wavenc其实是对pcm数据编码+封装的过程,因为要有32->S16LE和加wave_header的过程

  aac->wav->sink:gst-launch-1.0 filesrc location=out.aac ! aacparse ! avdec_aac ! audioconvert ! alsasink   //aac文件到解码之间必须要有一个aacparse,而MP3没有,是因为AAC的ADTS、ADIF容器格式文件导致的吧

5. 常用的一些插件介绍

  h265解码,社区提供了两个插件:avdec_h265,de265,前者为ffmpeg项目提供的,后者为德国一家公司提供的插件+解码库

  avdec_xxx为ffmpeg项目组提供的解码插件方案,例如avdec_h264、avdec_aac

  xxmux为文件封装插件,如qtmux(不要理解为做UI库的QT公司,而是mp4封装,即苹果公司推出的QuickTime符合mp4规范的)

  xxdemux为解封装插件

6. filter相关

  crop处理:gst-launch-1.0 -v videotestsrc ! videocrop top=42 left=1 right=4 bottom=0 ! ximagesink //videocrop——裁边,可以处理解码器将width/height强制32或64对齐而引入的右侧/底部的灰边,其值表示裁掉多少像素。

7. 网络推流/拉流(两个终端下执行)

  gst-launch-1.0 tcpserversrc host="127.0.0.1" port=3000 ! decodebin ! autoaudiosink
  gst-launch-1.0 filesrc location=./1.mp3 ! tcpclientsink host="127.0.0.1" port=3000

8. jpeg相关

  mjpeg文件解码+显示:gst-launch-1.0 filesrc location=test_mjpeg.mp4 ! qtdemux ! jpegdec ! videoconvert ! autovideosink
  mjpeg文件解码+多文件保存:gst-launch-1.0 filesrc location=test_mjpeg.mp4 ! qtdemux ! jpegdec ! multifilesink location=%02d.yuv

  jpeg解码+显示:gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! videoconvert ! imagefreeze ! ximagesink //解码后显示,必须用imagefreeze和videoconvert插件,在PC上验证结果。imagefreeze——将图像冻结,否则很快消失。

  //yuv的显示
  //以下不知道为什么显示全黑色的图像——log中出现了error信息!
  //把pixel-aspect-ratio和interlace-mod这两个属性去掉,因为videoconvert的SinkPad不带这些属性
  gst-launch-1.0 filesrc location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720,pixel-aspect-ratio=1/1,framerate=0/1,interlace-mod=progressive" ! videoconvert ! imagefreeze ! ximagesink //yuv图片的显示
  //最终答案是,filesrc 添加文件大小的属性:blocksize=xxx,表示数据源多大,来确定读多少数据来作为一帧。
  //videoconvert的sink_pad,有的gst版本要求带framerate的属性,否则报错
  gst-launch-1.0 filesrc blocksize=xxx location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720" ! videoconvert ! imagefreeze ! ximagesink

  //yuv的jpeg编码,前半部分一样,后半部分进行编码+写文件
  gst-launch-1.0 filesrc blocksize=xxx location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720" ! videoconvert ! jpegenc ! filesink location=yyy.jpg

  gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! imagefreeze ! glimagesink //解码+显示
  gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! filesink location=test.yuv //解码+存本地文件
  gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! imagefreeze ! glimagesink //yuv显示
  gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! jpegenc ! filesink location=test_enc.jpg //利用yuv文件编码

  //解码+显示
  gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! imagefreeze ! glimagesink //可以指定文件大小,使用blocksize=xxx

  //解码+存本地文件
  gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! filesink location=test.yuv

  //yuv文件显示
  gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! imagefreeze ! glimagesink
  说明:blocksize指定test.yuv文件的大小,width=900,height=800指定yuv文件的实际宽高,必须填对!

  //利用yuv文件jpeg编码
  gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! jpegenc ! filesink location=test_enc.jpg
  说明:blocksize指定test.yuv文件的大小

9. 其他未归类命令

  gst-launch-1.0 filesrc location=Capture001.png ! pngdec ! imagefreeze ! autovideosink
  gst-launch-1.0 filesrc location=Capture001.png ! pngdec ! filesink location=png.yuv

  gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! filesink location=320_240_gst_naked.hevc //跟ffmpeg分流后得到的不太一样,start_code中包含size信息

  gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! sprdhevcdec ! filesink location=320_240_hevc.yuv
  gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
  gst-launch-1.0 filesrc location=bigbuckbunny_1080p_4mbps.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
  gst-launch-1.0 filesrc location=Movie_h265_NA.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
  gst-launch-1.0 filesrc location=02_Naturally_720p_x265.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
  gst-launch-1.0 filesrc location=bigbuckbunny_1080p_4mbps_ffmpeg.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink

10. 其他未归类命令

  用gstreamer的管道命令,太麻烦了,真不如ffmpeg用着方便啊!

  当然,其存在必然有其合理性,这是linux平台下通用的多媒体中间件系统,多种播放器都是使用它来做的,它的一个很大特点是软件分层、解耦、抽象做的非常好。

  如果要做一些插件,需要有一些基础知识,例如gobjec,glib库。

windows:

1.下载安装:

gstreamer-1.0-msvc-x86_64-1.20.2.msi

gstreamer-1.0-devel-msvc-x86_64-1.20.2.msi

默认安装到c盘,安装后在windows系统环境变量添加path路径:C:\1.0\msvc_x86_64\bin

再在dos命令里测试下:

gst-launch-1.0 filesrc location="C:/Users/test/Desktop/test.mp4" ! qtdemux name=demux  demux.  ! queue ! decodebin  ! autovideosink  demux. ! queue  ! decodebin  ! audioconvert ! audioresample ! autoaudiosink

#查看插件信息
gst-inspect-1.0 webrtc

gst-launch-1.0 -v filesrc location="D:/ffmpeg-20200831-win64-static/bin/1280x720.yuv" blocksize=4147200 ! videoparse format=yv12 width=1280 height=720 framerate=25/1 !  videoconvert ! video/x-raw,format=I420,width=1280,height=720,framerate=25/1 !  x264enc ! filesink location=nvenc.264

混音:audiomixer,audio/x-mulaw 表示pcmu, audio/x-alaw:pcma,audio/x-raw:pcm

把g711u 文件解码后混音,g711u解码用:mulawdec, g711a解码用:alawdec 

gst-launch-1.0 -v filesrc location=src_37221.pcmu ! audio/x-mulaw, channels=1, rate=8000 ! mulawdec  ! audiomixer name=mix ! filesink location=mix.pcm filesrc location=src_48020.pcmu ! audio/x-mulaw, channels=1, rate=8000 ! mulawdec ! mix.

 

xilinx低延时

#低延时udp发送
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! 'video/x-raw, format=NV12, width=1920, height=1080, framerate=60/1,colorimetry=bt709'\
! omxh264enc num-slices=8 periodicity-idr=240 cpb-size=500 gdr-mode=horizontal initial-delay=250 control-rate=low-latency \
prefetch-buffer=true target-bitrate=8000 gop-mode=low-delay-p ! video/x-h264, alignment=nal ! \
rtph264pay pt=96 ! udpsink host=192.168.38.16 port=6000 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v


#H264码流解码显示,XLNXLL超低延时
gst-launch-1.0 udpsrc port=6000 buffer-size=60000000 caps="application/x-rtp, media=video, clock-rate=90000, payload=96, encoding-name=H264" ! rtpjitterbuffer latency=7 ! rtph264depay ! h264parse ! video/x-h264, alignment=nal ! omxh264dec low-latency=1 ! video/x-raw\(memory:XLNXLL\) ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false fps-update-interval=1000 video-sink="kmssink driver-name=xlnx" sync=true -v

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值