Gstreamer 推拉流

Nan (/)
2023-12-10T12:18:00+08:00

命令

# 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

三 推/拉流

1. 本地播放視頻

# 测试窗口
gst-launch-1.0 videotestsrc ! autovideosink
# 播发视频
gst-launch-1.0 filesrc location=/home/yanan/movie.mp4 ! decodebin ! autovideosink

2. 本地播放usb/web攝像頭

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1 ! autovideosink

3. 推送/接收測試視頻[外推]

# 树莓蒎推送 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

4. 推送/接收摄像头视频[内推, 自带硬解]

# 树莓蒎本地内推 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
#

5. 推送/接收摄像头视频[外推, 自带硬解]

# 树莓蒎外推 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