---
name: yangge521/rtmp-streaming
source: https://app.decimal.ai/s/yangge521-rtmp-streaming@1/SKILL.md
source_sha256: 0dd13e69816d
---

# RTMP 视频推流

## 概述

使用 FFmpeg 将 YOLO 推理结果帧编码推流到 SRS 流媒体服务器，实现实时视频分析结果分发。支持 GPU 硬件编码加速（NVENC/VA-API/摩尔线程 mtenc）。

## 使用场景

- 安防监控：推理标注画面实时推流到监控大屏
- 直播分析：直播流实时目标检测并推回平台
- 远程巡检：工地/机房视频增强后远程查看
- 多路汇聚：多路视频推理结果汇聚到一个流媒体平台
- 录像回放：推理结果推流同时录像存档
- 移动端查看：通过 HLS/FLV 在手机浏览器查看

## 操作指南

### 1. SRS 流媒体服务器部署

```bash
docker run -d --name srs -p 1935:1935 -p 8080:8080 ossrs/srs:latest
```

### 2. FFmpeg 推流（CPU 编码）

构建 ffmpeg 命令：输入 rawvideo/bgr24/1920x1080/60fps，输出 libx264/ultrafast/zerolatency/flv 到 rtmp://127.0.0.1:1935/live/stream_01。通过 subprocess.Popen 启动进程，用 proc.stdin.write 写入帧数据。

### 3. GPU 硬件编码推流

- NVIDIA: -c:v h264_nvenc -preset p1 -tune ull
- 摩尔线程: -c:v h264_mtenc
- Intel: -c:v h264_vaapi
- 通用: -c:v libx264 -preset ultrafast -tune zerolatency

### 4. 多路推流管理

使用 StreamManager 类管理多个推流进程：add_stream 创建进程，write_frame 写入帧，按 GPU 分配编码资源。

### 5. SRS 低延迟配置

修改 srs.conf: gop_cache off, queue_length 0, min_latency on, mr_latency 100。

## 延迟优化

| 优化项 | 效果 | 说明 |
|-------|------|------|
| preset ultrafast/p1 | 降低编码延迟 | 牺牲压缩率 |
| tune zerolatency/ull | 零延迟模式 | 禁用 B 帧 |
| GOP=1 或 2 | 降低延迟 | 增加码率 |
| 硬件编码 | 降低 CPU | NVENC/mtenc |
| SRS 低延迟 | 减少缓冲 | 修改 srs.conf |
| TCP nodelay | 减少网络延迟 | socket 选项 |

## 常见问题与排查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 推流卡顿 | CPU 编码过载 | 切换硬件编码 |
| 延迟过高 | GOP 过大 | 设置 GOP=1 |
| 画面花屏 | 码率不足 | 提高 bitrate |
| SRS 连接失败 | 端口未开放 | 检查 1935 端口 |
| FFmpeg 进程崩溃 | 帧格式不匹配 | 检查 pix_fmt/s |
| 多路推流 OOM | GPU 显存不足 | 限制并发路数 |

## 扩展方向

- **HLS 转 FLV**: SRS 自动转 HLS，支持移动端 H5 播放
- **WebRTC 超低延迟**: SRS 支持 WebRTC，延迟可降至 200ms
- **录制存档**: SRS dvr 插件录制 FLV/MP4
- **转码分发**: SRS 转码多分辨率（1080p/720p/480p）
- **鉴权认证**: SRS 推流/拉流 token 鉴权
- **CDN 分发**: 结合 Nginx-CDN 大规模分发

## 技能链路

- **yolo-video-inference**: 提供推理结果帧
- **hw-codec-adapt**: 自动选择硬件编码器
- **gpu-concurrent**: 多路推流的 GPU 分配
- **nginx-config**: Nginx 反向代理 SRS
- **perf-monitor**: 监控推流延迟和码率

## 检查清单

- [ ] SRS 服务器已部署并运行
- [ ] FFmpeg 推流命令正确
- [ ] GPU 硬件编码已启用（如可用）
- [ ] 推流延迟小于 500ms
- [ ] 断线自动重连已实现
- [ ] 多路推流资源分配合理