【开源】零延迟 RTSP 视频流服务器 – 让 AI 检测画面实时呈现
零延迟不是奢侈品,而是触手可及——让每一帧都实时呈现。🌹 低延迟推流不该被商业SDK绑架,而是应该开源共享,让更多开发者受益。🌹 坚信互联网本就是分享精神 💪💪💪
📌 项目地址
- GitHub: https://github.com/xiabie666/rtsp_server
- Gitee: https://gitee.com/xiabieyo/rtsp-server
📌 技术栈
、自动注册ZLMediaKit实现WebRTC播放、AI检测结果实时推流、Python绑定、4K分辨率 
💡 项目由来
做 AI 安防项目时,我遇到了一个让人抓狂的问题:AI 检测画面延迟太高了!
传统方案是把 AI 推理后的视频流以 RTMP 推送给 ZLMediaKit,再转 WebRTC 播放。但无论怎么调参数,延迟始终在 2-5 秒徘徊。人都走出画面了,报警才姗姗来迟,这在安防场景简直是灾难。
直到有一天,我突然想到:ZLMediaKit 天生支持 WebRTC,而且我之前用 RTSP 连接摄像头时,ZLM 的 WebRTC 播放是实时的!
那么问题来了:如果我把 AI 推理后的视频流也封装成 RTSP 流,让 ZLM 以拉流的方式来获取,是不是就能实现近乎零延迟?
说干就干!我基于 live555 编写了这个 RTSP 服务器,配合 NVENC 硬件编码,最终实现了 50-100ms 的端到端延迟。
从 2-5 秒到 50-100ms,这不是优化,这是质变!
🎯 为什么需要它?
你是否遇到过这些问题:
- 😤 AI 检测画面延迟 3-5 秒,人都走出画面了才报警
- 😤 RTMP 推流卡顿,WebRTC 播放体验极差
- 😤 想要实时预览 AI 推理结果,却总是慢半拍
这个项目就是为了解决这些痛点!
⚡ 延迟对比
| 传统 RTMP 推流 | 2-5 秒 | 😫 人都走了才看到 |
| 本方案 RTSP Server | 50-100ms | 🚀 几乎实时同步! |
传统方案:AI程序 → RTMP推流 → ZLM → WebRTC 延迟 2-5秒 ❌
本方案: AI程序 → RTSP服务器 → ZLM拉流 → WebRTC 延迟 50-100ms ✅
✨ 特性一览
| 🎮 NVENC 硬件编码 | NVIDIA GPU 加速,编码延迟 <5ms |
| ⚡ 极致低延迟 | 单帧缓冲,来一帧编一帧 |
| 🔗 ZLM 自动注册 | 启动即可 WebRTC 播放,无需手动配置 |
| 📹 多摄像头支持 | 每路视频独立实例,轻松扩展 |
| 🐍 多语言支持 | C++ 库 + Python 绑定,随你选择 |
| 🔄 断线重连 | 网络抖动?自动恢复! |
🏗️ 架构
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 摄像头/视频 │────>│ AI 推理程序 │────>│ RTSP Server │────>│ ZLMediaKit │
│ │ │ (检测+画框) │ │ (NVENC编码) │ │ (WebRTC转发) │
└─────────────────┘ └──────────────────┘ └─────────────────┘ └─────────────────┘
为什么延迟更低?
| 数据流向 | ZLM 主动拉取 | AI程序 主动推送 |
| 缓冲策略 | 单帧缓冲 | 多帧缓冲 |
| 编码模式 | NVENC 零延迟 | 标准编码 |
| 端到端延迟 | 50-100ms ✅ | 2-5秒 ❌ |
🚀 快速开始
1. 编译
cd rtsp_server
build.bat
2. 运行
RTSPServer.exe rtsp://admin:password@192.168.1.64:554/stream –zlm-secret 你的密钥
3. 播放
http://localhost:8088/index/api/webrtc?app=live&stream=ai_stream
🔧 集成到你的 AI 项目
C++ 集成
#include "RTSPServer.h"
RTSPServerWrapper server;
server.init(8554, "ai_stream", 704, 576, 25);
server.start();
while (running) {
cv::Mat frame = camera.read();
auto results = yolo.detect(frame);
drawBoxes(frame, results);
server.pushFrame(frame); // 就这一行!
}
server.stop();
Python 集成
import rtsp_server
server = rtsp_server.RTSPServer(8554, "ai_stream", 704, 576, 25)
server.start()
while True:
frame = cap.read()
results = yolo.detect(frame)
frame = draw_boxes(frame, results)
server.push_frame(frame) # 就这一行!
server.stop()
📹 多摄像头支持
每个摄像头创建独立的 RTSP Server 实例:
// 方式1:不同端口
RTSPServerWrapper server1, server2;
server1.init(8554, "camera1", 704, 576, 25); // rtsp://localhost:8554/camera1
server2.init(8555, "camera2", 704, 576, 25); // rtsp://localhost:8555/camera2
// 方式2:同端口不同流名(推荐)
server1.init(8554, "camera1", 704, 576, 25); // rtsp://localhost:8554/camera1
server2.init(8554, "camera2", 704, 576, 25); // rtsp://localhost:8554/camera2
⚡ 性能指标
| 编码延迟 | <5ms (NVENC) |
| 端到端延迟 | 50-100ms |
| 支持分辨率 | 最高 4K |
| 默认码率 | 4Mbps |
📋 系统要求
- Windows 10/11
- Visual Studio 2022
- CMake 3.15+
- vcpkg: opencv4, glog, ffmpeg
- NVIDIA GPU (可选,用于 NVENC 硬件编码)
- ZLMediaKit (用于 WebRTC 转发)
🐛 常见问题
ZLM 拉流失败
NVENC 不可用
程序会自动切换到 x264 软件编码,延迟会稍高但仍可正常工作。
画面卡顿
🙏 致谢
- ZLMediaKit – 夏楚大佬开源的流媒体服务器
- live555 – 经典的 RTSP/RTP 开源库
- FFmpeg – 强大的音视频处理库
👨💻 作者
夏别 – 一个热爱折腾的开发者
如果这个项目对你有帮助,欢迎 Star ⭐ 和 Fork!
有问题或建议?欢迎提 Issue!
⭐ 如果有帮助,请 Star!
网硕互联帮助中心





评论前必须登录!
注册