下面是基于 FFmpeg + H.264 + RTSP + GStreamer 的低延时视频传输方案的详细搭建指南。此方案可将延迟控制在 <100ms,适合远程驾驶、监控等实时性要求较高的应用场景。
📦 方案架构
摄像头(OpenCV)→ FFmpeg(H.264编码+RTSP推流)→ RTSP服务端 → GStreamer(客户端接收+播放)
✅ 1. 准备工作
✅ 安装依赖
Ubuntu 系统:
sudo apt update
sudo apt install ffmpeg gstreamer1.0-tools gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly gstreamer1.0-libav \
libgstrtspserver-1.0-dev v4l-utils
✅ 2. RTSP 服务器搭建方案
RTSP 服务器推荐使用轻量级的 RTSPServer
或 GStreamer RTSP Server
(支持自定义管道)。
方式一:使用 ffmpeg
自带推流到 RTSP Simple Server
(最简单)
安装 RTSP Simple Server(github.com/aler9/rtsp-simple-server)
wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_amd64.tar.gz
tar -xvzf mediamtx_v1.12.2_linux_amd64.tar.gz
./rtsp-simple-server &
默认 RTSP 地址为:
rtsp://localhost:8554/mystream
✅ 3. 摄像头 H.264 推流(使用 OpenCV + FFmpeg)
你可以用 FFmpeg 从摄像头采集并直接推送 RTSP:
示例脚本 push_rtsp.py
:
import cv2
import subprocess
width, height, fps = 640, 480, 25
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
cap.set(cv2.CAP_PROP_FPS, fps)
# FFmpeg 推流命令:推送到本地 RTSP Server(H.264)
rtsp_url = 'rtsp://127.0.0.1:8554/mystream'
ffmpeg_cmd = [
'ffmpeg',
'-f', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', f'{width}x{height}',
'-r', str(fps),
'-i', '-', # 从stdin接收
'-c:v', 'libx264',
'-preset', 'ultrafast',
'-tune', 'zerolatency',
'-f', 'rtsp',
'-rtsp_transport', 'tcp',
rtsp_url
]
process = subprocess.Popen(ffmpeg_cmd, stdin=subprocess.PIPE)
while True:
ret, frame = cap.read()
if not ret:
break
process.stdin.write(frame.tobytes())
运行此脚本后,会实时把视频数据推送到 RTSP 服务端。
✅ 4. 客户端使用 GStreamer 接收播放
推荐命令(延时极低):
gst-launch-1.0 rtspsrc location=rtsp://192.168.31.100:8554/mystream latency=0 ! \
rtph264depay ! avdec_h264 ! autovideosink sync=false
说明:
latency=0
: 表示极低缓冲sync=false
: 不等待系统时间戳,直接渲染可替换为其他渲染后端如
xvimagesink
,glimagesink
等
✅ 5. 多摄像头支持
你可以运行多个脚本,推送到不同 RTSP 路径:
摄像头 | 地址 |
---|---|
/dev/video0 |
rtsp://localhost:8554/cam0 |
/dev/video2 |
rtsp://localhost:8554/cam2 |
订阅方式:
gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/cam0 latency=0 ! rtph264depay ! avdec_h264 ! autovideosink sync=false
gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/cam2 latency=0 ! rtph264depay ! avdec_h264 ! autovideosink sync=false
🚀 延迟优化建议
优化项 | 建议设置 |
---|---|
编码参数 | -preset ultrafast -tune zerolatency |
GStreamer | latency=0 sync=false |
分辨率 | 480p 推荐,控制带宽 |
传输协议 | 使用 -rtsp_transport tcp ,更稳定 |
✅ 总结
模块 | 工具 |
---|---|
采集与推流 | Python + OpenCV + FFmpeg |
服务端 | RTSP Simple Server |
播放端 | GStreamer(gst-launch-1.0 ) |