【笔记】常用gstreamer命令记录

发布于:2024-04-14 ⋅ 阅读:(193) ⋅ 点赞:(0)

一、安装gstreamer

方法1:

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

方法2:

sudo apt-get install -y libgstreamer1.0-0 \
            gstreamer1.0-plugins-base \
            gstreamer1.0-plugins-good \
            gstreamer1.0-plugins-bad \
            gstreamer1.0-plugins-ugly \
            gstreamer1.0-libav \
            gstreamer1.0-doc \
            gstreamer1.0-tools \
            libgstreamer1.0-dev \
            libgstreamer-plugins-base1.0-dev

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libqt5gstreamer-dev libgtk-3-dev

sudo apt-get install libpng12-0 

sudo apt-get install build-essential  cmake git pkg-config  libjpeg8-dev libgtk2.0-dev libavcodec-dev  libavformat-dev libswscale-dev  libv4l-dev  libatlas-base-dev  gfortran libhdf5-dev libjpeg-dev libtbb-dev libeigen3-dev

sudo apt-get install -y gstreamer1.0-tools gstreamer1.0-nice gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good libgstreamer1.0-dev git libglib2.0-dev libgstreamer-plugins-bad1.0-dev libsoup2.4-dev libjson-glib-dev

二、常用网站

gstreamer资源:

Gstreamer_- 教程中文翻译系列博客

GStreamer · GitLab源码

GStreamer: 官方英文官网

GStreamer C开发教程

(gstreamer安装包下载目录)

GStreamer· GitLab源码

gstreamer 插件列表)

gstreamerC++代码的博客:

GStreamer_zz的博客

gStreamer 官方教程资源大全_gstreamer教程-CSDN博客

7. GStreamer建议的学习步骤和网页链接汇总_gstreamer pdf-CSDN博客

GStreamer_机器人虎哥的博客

Gstreamer从入门到放弃?_此心安处是吾鄕的博客-CSDN博客

gstreamer_CJourneys的博客

阿龍1787-CSDN博客

三、基础知识

1. gstreamer知识

基础概念
概述
elements 元件,基本类
bin 集合,有共同的状态
pipline 管道,高级bin,gstreamer必须是pipline
pads 输入和输出接口,包括src和sink
---例子 name=d d.audio_0 指定使用audio_0
src 元件的输出pads,一般作为下一级的源
sink 元件的输入pads,一般作为上一级的输出
bus 消息管道
caps 过滤器 ,如 ! video/x-vp8 !
capsfilter capsfilter caps="application/x-rtp,media=(string)video"
tee 分支,tee name=t ,t.就表示切换新分支
支持的uri链接:
file:///<path>/<file>
http://<host>/<path>/<file>
mms://<host>/<path>/<file>
dvb://<CHANNEL>
...

2.音视频知识

图片常见格式:

【YUV420常见格式】: I420、YU12、YV12、NV12、NV21、YU12。YVU9、YUV9、YVU410、YUV410、YVU420、YUV420P、YUV420SP、YUV420P10、YUV420P12、YUV420P16、YUV420SP10、YUV420SP12、YUV420SP16、YUVJ420P、YV16

【YUV422常见格式】: I422、YV16、NV61、NV16、YUVY、VYUY、UYVY、YUY2(YUYV)、YVYU、Y41P、Y211、Y41T、Y42T、YUYV422、UYVY422、HDYC、CYUV、YUV422P、YUV422SP、YUV422I、YUV422A、YUV422P16、V216、V422、P422

【YUV444常见格式】: I444、YV24、NV24、NV42、YUV444。J2K YUV444、YUVA444、V308、V408、YUVP、YUV4、YV16、Y41B、YUV444P、YUV444P10、YUV444P12、AYUV、V410、YUV444P16、YUV444SP、YUV444I、YUV444A、NV24

【RGB常见格式】: RGB24、RGB32、RGB565、RGB555、RGB444、RGB888、RGB444LE、BGR24、BGR32、BGR565、BGR555、BGR888、ARGB、RGBA、ABGR、BGRA、RGBX、XRGB、XBGR、BGRX

按照 YUV 的排列方式,再次将 YUV 分成三个大类,Planar,Semi-Planar 和 Packed。

  • Planar YUV 三个分量分开存放

  • Semi-Planar Y 分量单独存放,UV 分量交错存放

  • Packed YUV 三个分量全部交错存放

具体排布和区分,参考文章:YUV 格式详解,只看这一篇就够了 - 简书 (jianshu.com)

RGB和YUV和YCbCr的转换关系
Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16  
Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128  
Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128  
R' = 1.164*(Y’-16) + 1.596*(Cr'-128)  
G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)  
B' = 1.164*(Y’-16) + 2.017*(Cb'-128) 
    
Y'= 0.299*R' + 0.587*G' + 0.114*B'  
U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')  
V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')  
R' = Y' + 1.140*V'  
G' = Y' - 0.394*U' - 0.581*V'  
B' = Y' + 2.032*U' 

码率计算

分辨率 × 位深 × 帧速率 ÷ 1024 ÷ 1024

例如1080P@25: (1920×1080)×(8×3)×25fps÷1024÷1024 = 1186.52Mbps


四、常用命令:

初始测试
  • 播放网络视频流:

    gst-launch-1.0 playbin uri=<stream_url>

  • 捕获相机并显示:

    gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink

  • 播放本地MP4视频文件

gst-launch-1.0 -v filesrc location=./1080p_60fps_h264.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw, width=640,height=480 ! autovideosink
  • 测试流:

    gst-launch-1.0.exe videotestsrc ! autovideosink

  • 可移动的彩条:

    gst-launch-1.0 videotestsrc num-buffers=3600 pattern=13 horizontal-speed=10 ! 'video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080,framerate=60/1' ! videoconvert ! autovideosink

  • 将视频流保存为文件:

    • gst-launch-1.0 videotestsrc ! x264enc ! mp4mux ! filesink location=output.mp4 -e

    • gst-launch-1.0 videotestsrc ! 'video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080,framerate=60/1' ! x264enc ! mp4mux ! filesink location=output.mp4 -e

  • 实时录制摄像头视频到文件:

    gst-launch-1.0 v4


网站公告

今日签到

点亮在社区的每一天
去签到