gst-launch-1.0详细说明

2023-12-13 21:57:18

简介

gst-launch-1.0是GStreamer库提供的命令行工具,用于构建和运行基于GStreamer的多媒体处理管道。它接受一个管道描述作为输入,可以从各种来源中捕获音视频数据,并将其转换、编解码、过滤、传输和显示等。

安装和配置

在使用gst-launch-1.0之前,您需要安装和配置GStreamer库。具体的安装方法和配置步骤可以参考GStreamer的官方文档或社区资源。例如,在Ubuntu上,您可以使用以下命令安装GStreamer库和相关插件:

sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

使用gst-launch-1.0

基本语法

gst-launch-1.0的基本语法如下:

gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION

其中,OPTIONS是可选的命令行选项,PIPELINE-DESCRIPTION是用于描述GStreamer管道的字符串。

管道描述

PIPELINE-DESCRIPTION是一个由GStreamer元素和管道连接符组成的字符串。每个元素代表一个GStreamer插件,可以实现不同的功能,例如从文件中读取音视频数据、进行编解码、转换格式、添加特效等。元素之间的连接符可以是!|,分别表示顺序连接和并行连接。

以下是一个简单的管道描述,用于从文件中读取H.264编码的视频流,并在X窗口系统上显示:

gst-launch-1.0 filesrc location=/path/to/video.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

在这个例子中,filesrc元素从文件/path/to/video.mp4中读取视频数据,qtdemux元素将数据解封装成原始媒体流,h264parse元素解析H.264编码数据,avdec_h264元素对数据进行H.264解码,videoconvert元素将解码后的视频数据转换为当前系统支持的格式,最后autovideosink元素将视频数据显示在屏幕上。

命令行选项

gst-launch-1.0支持多种命令行选项,这些选项可以改变运行时的行为和输出。以下是一些常用的选项:

  • -h, --help: 显示帮助信息。
  • --version: 显示GStreamer库的版本信息。
  • -t, --tags: 输出元数据信息。
  • -v, --verbose: 输出详细的调试信息。
  • -q, --quiet: 不输出任何进度信息。
  • -m, --messages: 输出流媒体数据的状态信息。

示例

打开摄像头并将视频数据输出到 Wayland 显示服务器:

gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=NV12,width=320,height=256 ! waylandsink

该命令主要由以下元素组成:

  • v4l2src 元素:从摄像头读取视频数据的源。
  • videoconvert 元素:将输入的视频数据转换为 Wayland 显示服务器支持的格式。
  • video/x-raw,format=NV12,width=320,height=256 描述输入视频流的格式信息。
  • waylandsink 元素:将视频数据显示到 Wayland 显示服务器上。

通过这个命令,你可以在 rk3568 系统上打开摄像头,并将视频数据显示到 Wayland 显示服务器上。

需要注意的是,如果你使用的不是 Wayland 显示服务器,而是其他显示服务器(如 X11),则需要将 waylandsink 元素替换为相应的元素,以便将视频数据正确地显示到目标显示器上。

另外,你也可以根据自己的需求修改命令中的参数,例如修改视频的分辨率、帧率、格式等。

以下是一个示例管道描述,用于从摄像头捕获视频流,并在屏幕上显示:

gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=640,height=480 ! videoconvert ! autovideosink

在这个例子中,v4l2src元素从设备/dev/video0捕获视频流,video/x-raw元素将其转换为原始格式,videoconvert元素将原始格式转换为当前系统支持的格式,最后autovideosink元素将视频数据显示在屏幕上。通过使用-v选项,我们还可以输出详细的调试信息。

改进版本:

gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=1920,height=1080 ! queue ! videoconvert ! waylandsink sync=false

以下是该命令的解释:

  • -e: 启用提前终止模式,可以通过按下Ctrl+C来停止管道。
  • v4l2src device=/dev/video0: 使用v4l2src元素从设备/dev/video0中捕获视频流。
  • video/x-raw,format=NV12,width=1920,height=1080: 将视频流转换为原始格式,使用NV12像素格式(YUV颜色空间),宽度为1920像素,高度为1080像素。
  • queue: 在管道中添加一个队列元素,用于控制数据流速率。
  • videoconvert: 转换视频流的格式,以便与Wayland显示器兼容。
  • waylandsink sync=false: 使用waylandsink元素将视频数据显示在Wayland显示服务器上,并设置sync=false以禁用同步。

在RV1126播放H264、MP4、MP3、WAV文件:

  1. gst-launch-1.0 filesrc location=/usr/200frames_count.h264 ! h264parse ! mppvideodec ! kmssink:从文件中读取H.264编码的视频流,使用h264parse解析,然后使用mppvideodec进行解码,并最终在kmssink上显示。

  2. gst-launch-1.0 filesrc location=/usr/SampleVideo_1280x720_5mb.mp4 ! qtdemux ! queue ! h264parse ! mppvideodec ! videoconvert ! kmssink:从文件中读取MP4视频文件,使用qtdemux解封装,然后通过队列控制数据流速率,再使用h264parse解析H.264编码,mppvideodec进行解码,videoconvert转换格式,并在kmssink上显示。

  3. gst-play-1.0 --flags=3 --use-playbin3 /usr/SampleVideo_1280x720_5mb.mp4:使用gst-play-1.0播放器,使用playbin3插件播放MP4视频文件。

  4. gst-launch-1.0 filesrc location=/usr/SampleVideo_1280x720_5mb.mp4 ! qtdemux ! h264parse ! mppvideodec ! kmssink:与第2个命令类似,只是没有使用队列元素。

  5. gst-launch-1.0 filesrc location=/usr/love_story.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! autoaudiosink:从文件中读取MP3音频文件,使用mpegaudioparse解析,然后使用mpg123audiodec进行解码,audioconvert转换格式,并在autoaudiosink上播放。

  6. gst-launch-1.0 filesrc location=/usr/bell.wav ! wavparse ! audioconvert ! autoaudiosink:从文件中读取WAV音频文件,使用wavparse解析,然后使用audioconvert转换格式,并在autoaudiosink上播放。

  7. gst-launch-1.0 -v videotestsrc pattern=snow ! video/x-raw,width=1280,heigh=720 ! kmssink:生成一个测试视频源,模式为雪花,分辨率为1280x720,然后将视频数据显示在kmssink上。

  8. gst-inspect-1.0 | grep video:使用gst-inspect-1.0命令列出所有可用的GStreamer插件,并通过grep筛选出包含"video"关键字的插件。

使用gst-launch-1.0命令通过RTSP推流媒体数据

下面是一个示例命令,将本地摄像头的视频数据以H264编码通过RTSP协议推流到网络上:

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! x264enc ! rtph264pay ! udpsink host=192.168.1.10 port=5000

这个命令使用v4l2src元素从/dev/video0设备读取视频数据,然后通过videoconvert元素进行格式转换,再使用x264enc编码成H264格式。接着使用rtph264pay将H264数据打包成RTP包,并通过udpsink元素将RTP包发送到网络上指定的地址和端口。

在接收端,可以使用类似如下的命令来接收RTSP流并播放:

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.10:8554/test latency=0 ! decodebin ! autovideosink

这个命令使用rtspsrc元素从网络上指定的RTSP地址获取流媒体数据,然后使用decodebin自动解码不同的媒体格式,最终使用autovideosink元素将视频数据显示在屏幕上。

使用gst-launch-1.0命令抓一帧图片

使用gst-launch-1.0命令可以从视频流中抓取一张图片。下面是一个示例命令,演示了如何从摄像头捕获一帧图像并保存为JPEG文件:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 ! jpegenc ! filesink location=capture.jpg

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, width=1920, height=1080 ! videoconvert ! jpegenc ! filesink location=test.jpg

在这个命令中,v4l2src元素从指定的摄像头设备中获取视频数据,并使用num-buffers=1参数指定只捕获一帧图像。接着使用jpegenc对图像进行JPEG编码,最后使用filesink将图像保存为名为capture.jpg的文件。

执行该命令后,您将在当前目录下看到一个名为capture.jpg的JPEG格式图像文件,其中包含了从摄像头捕获的一帧图像。

请注意,实际使用时可能需要根据您的摄像头设备和要保存的文件路径进行相应的调整。

文章来源:https://blog.csdn.net/weixin_37787043/article/details/134980211
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。