命令
# gst-launch-1.0
-h、 --help 显示帮助选项
--help-all 显示所有帮助选项
--help-gst 显示GStreamer选项
-v, --verbose 详细输出状态信息和属性通知
-q, --quiet 不打印任何进度信息
-m, --messages 输出管道总线上的消息
-t, --tags 输出标记tag(也称为元数据)
-o FILE, --output=FILE 将管道保存到XML文件中,并退出
-f, --no_fault 不安装故障处理程序
-T, --trace 打印内存分配跟踪。必须在编译时启用该特性才能工作。
-f、 --无故障不要安装故障处理程序
-e、 --关闭时的eos在关闭管道之前对源强制eos
--version 打印版本信息并退出
--no position不打印管道的当前位置。
参数
# gst-launch-1.0
filesrc location= # 要解码的文件
udpsrc # 要解码的udp资源
videotestsrc # 测试视频数据
gdppay # 缓冲区
gdpdepay # 回放
h264parse # 解析H264码流
rtph264pay # H264 转 RTP 数据包
config-interval # 以秒为单位发送 SPS 和 PPS 插入间隔(
# 检测到时,sprop 参数集将在数据流中多路复用。)
# (0 = 禁用,-1 = 与每个 IDR 帧一起发送)
rtph264depay # RTP 数据包转 H264
autovideoconvert # 自动格式转换
autovideosink # 自动匹配视频接收器
sync # 音视频时间同步(没有音频请禁用)
udpsink / udpsrc #udp 发送端/接收端
tcpserversink/tcpclientsrc # tcp 发送端/接收端
filesrc 文件 mad
mp3解码器
osssink 音频播放设备
gnomevfssrc gnome虚拟文件
oggdemux OGG文件解复用器
filesink 存储到文件
cdparanoiasrc CD设备
wavparse WAV文件解码器
xvimagesink 视频播放设备(X Display)
osssrc 音频录制设备
dvddemux DVD文件解复用器
sdlvideosink 视频播放设别(SDL)
v4l2src Video4linux2视频文件
x264enc H.264编码
x265enc H.265编码
appsink 传输至应用程序 appsrc 来自应用程序的数据
curlhttpsink 通过http传输至网络
rtmpsrc 网络中的RTMP流
rtmpsink 通过RTMP将FLV视频传输至网络
rtspsrc 网络中的RTSP流
rtspclientsink 通过RTSP将视频传输至网络
推流流程
第一种: 外推:
- raspivid 捕捉视频 > gst-launch-1.0推流到外部主机 IP:端口
- 外部主机 > gst-launch-1.0 监听本地端口拉流
第二种: 内推:
- raspivid 捕捉视频 > gst-launch-1.0推流到本地端口
- 安装 rtsp 服务器 > 本地端口拉取数据转为 rtsp
- 外部主机 > 连接 rtsp 服务器拉取 rtsp 流 rtsp://树莓蒎IP:rtsp-server端口/流名
一 安装框架
# gst-launch-1.0 gstreamer框架
# 树莓蒎:
sudo apt-get install gstreamer1.0-tools
# MAC:
#下载安装包 https://gstreamer.freedesktop.org/download/
#配置环境变量
# ~/.bash_profile 或者 ~/.zshrc
nano ~/.zshrc
export PATH=$PATH:/Library/Frameworks/GStreamer.framework/Versions/1.0/bin/
source ~/.zshrc
三 推/拉流
本地播放视频
# 测试窗口 gst-launch-1.0 videotestsrc ! autovideosink # 播发视频 gst-launch-1.0 filesrc location=/home/yanan/movie.mp4 ! decodebin ! autovideosink
本地播放usb/web摄像头
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1 ! autovideosink
推送/接收测试视频[外推]
# 树莓蒎推送 udp 流 gst-launch-1.0 videotestsrc pattern=ball ! x264enc ! rtph264pay ! udpsink host=192.168.0.100 port=7001 # mac 接收 udp 流 gst-launch-1.0 udpsrc port=7001 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! avdec_h264 ! autovideosink
推送/接收摄像头视频[内推, 自带硬解]
# 树莓蒎本地内推 udp 流 raspivid -t 0 -w 1080 -h 720 -fps 20 -b 2000000 -o - | gst-launch-1.0 -e -v fdsrc ! h264parse ! rtph264pay pt=96 config-interval=-1 ! udpsink host=127.0.0.1 port=7001 #
推送/接收摄像头视频[外推, 自带硬解]
# 树莓蒎外推 udp 流 raspivid -t 0 -w 1080 -h 720 -fps 20 -b 2000000 -o - | gst-launch-1.0 -e -v fdsrc ! h264parse ! rtph264pay pt=96 config-interval=-1 ! udpsink host=192.168.0.100 port=7001 # MAC 拉 udp 流 gst-launch-1.0 -v udpsrc port=7001 ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink sync=false
四 快速启动
添加 /home/user/.config/autostart/4g-car-server.desktop
[Desktop Entry]
Name=4g Car Server
Comment=4g Car Server Service
Exec=lxterminal -e sudo python3 /home/yanan/tool/4g_car/server.py
Terminal=true
MultipleArgs=false
Type=Application
Categories=Application;Development;
StartupNotify=true