You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于GStreamer实现本地RTSP转公网RTMP及帧率转换的可靠方案咨询

解决OBS RTSP源不稳定问题:改用GStreamer推RTMP流

问题背景

在AMD64架构的Ubuntu机器上,用OBS通过RTSP连接本地摄像头推流至公网RTMP服务器时,OBS的RTSP源存在稳定性问题:运行数小时或数天后会出现画面丢失、冻结,最终推流黑屏,必须手动重启RTSP源。因此改用GStreamer实现更可靠的推流方案。

已验证基础RTSP拉流命令可正常运行:

gst-launch-1.0 -e rtspsrc location="rtsp://address" protocols=tcp latency=0 ! fakesink

需求与问题

需要将RTSP流转换为符合要求的RTMP流:

  • 源视频参数:1280x720/10fps
  • RTMP服务器要求:1280x720/25fps(需做帧率转换)
  • 不需要音频流

之前尝试的命令因未处理帧率转换、包含多余音频流等原因报错,以下是修正后的方案:

正确的GStreamer推流命令

无音频版本(推荐)

gst-launch-1.0 -e rtspsrc location="rtsp://你的摄像头RTSP地址" protocols=tcp latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=1280,height=720,framerate=25/1 ! x264enc tune=zerolatency bitrate=2000 ! h264parse ! flvmux streamable=true ! rtmpsink location='rtmp://你的RTMP服务器地址 live=true'

强制带静音音频版本(若服务器要求必须有音频)

gst-launch-1.0 -e rtspsrc location="rtsp://你的摄像头RTSP地址" protocols=tcp latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=1280,height=720,framerate=25/1 ! x264enc tune=zerolatency bitrate=2000 ! h264parse ! flvmux name=mux streamable=true ! rtmpsink location='rtmp://你的RTMP服务器地址 live=true' audiotestsrc is-live=true wave=silence ! queue ! audioconvert ! audioresample ! audio/x-raw,rate=48000 ! voaacenc bitrate=96000 ! aacparse ! mux.

命令各环节说明

  • rtspsrc:拉取RTSP流,指定TCP协议降低丢包风险,设置latency=0减少延迟
  • queue:添加缓冲队列,防止流阻塞提升稳定性
  • rtph264depay:从RTP封装中提取H.264裸流
  • h264parse:解析H.264流,生成标准NALU结构供后续元素处理
  • avdec_h264:解码H.264流为原始视频帧(帧率转换必须基于原始帧操作)
  • videoconvert:转换视频格式,确保跨元素兼容性
  • videoscale:适配分辨率(即使源分辨率匹配,也可应对源端偶尔的分辨率波动)
  • video/x-raw,width=1280,height=720,framerate=25/1:强制设置目标分辨率和帧率,触发GStreamer自动完成帧率转换(通过重复或插值帧实现)
  • x264enc tune=zerolatency:用x264编码器重新编码,zerolatency参数优化直播低延迟场景,bitrate可根据带宽调整(单位:kbps)
  • flvmux streamable=true:将视频流封装为FLV格式,streamable=true确保流适合实时推流
  • rtmpsink:将FLV流推送到指定RTMP服务器

原命令错误原因

  1. 包含多余音频流:用户明确不需要音频,但原命令添加了audiotestsrc相关环节,不仅冗余还可能导致封装不兼容
  2. 未做帧率转换:直接将10fps的原始H.264流推送到要求25fps的服务器,不符合服务器流参数要求
  3. 缺少解码重编码环节:帧率转换必须基于原始视频帧操作,原命令直接转发编码流无法完成帧率调整

内容的提问来源于stack exchange,提问作者foilandwater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:23:10