SRS + FFmpeg 直播机 拉流推给本机 SRS 的 RTMP
cat /evideoktv/bin/servicemanager/opu.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__
{
ingest id1
{
enabled on;
input
{
type stream;
url http://10.22.26.59/hdmi;
}
ffmpeg ./ffmpeg;
engine
{
enabled on;
vcodec copy;
acodec copy;
aparams
{
bsf:a aac_adtstoasc;
}
output rtmp://127.0.0.1:1935/live/10.22.26.59_hdmi;
}
}
}
Response:
我按 SRS 配置层级 从外到内,逐行给你讲清楚这个 conf 在干什么(这是一个用 SRS + FFmpeg 做流拉取转推的典型配置)。
🌐 全局配置
listen 1935;
👉 SRS 监听端口
也就是:
SRS 会在本机开启 RTMP 服务端口 1935
客户端可以这样推/拉流:
rtmp://服务器IP:1935/应用名/流名
max_connections 1000;
👉 最大并发连接数
表示:
SRS 最多允许 1000 个客户端连接
包括:
- 推流
- 拉流
- 内部 ingest
🏠 vhost 虚拟主机
vhost __defaultVhost__
{
👉 默认虚拟主机(类似 nginx 的 default server)
意思是:
如果客户端没指定 vhost,就用这个配置。
通常不用改。
📥 ingest 模块(拉外部流)
ingest id1
{
enabled on;
👉 开启一个 ingest 任务
id1 是任务名(随便取)
作用:
👉 让 SRS 自动去拉一个外部流,并转成 RTMP 推给自己
🎥 输入流源
input
{
type stream;
url http://10.22.26.59/hdmi;
}
含义:
| 项 | 说明 |
|---|---|
| type stream | 表示输入是一个实时流 |
| url | 外部流地址 |
也就是说:
👉 SRS 会通过 FFmpeg 拉这个 HTTP 流:
http://10.22.26.59/hdmi
通常可能是:
- 摄像头
- 编码器
- 拉流服务器
⚙️ 指定 FFmpeg
ffmpeg ./ffmpeg;
👉 使用当前目录下的 ffmpeg 可执行文件
如果写:
ffmpeg /usr/bin/ffmpeg;
就是系统自带的。
🚀 engine 转码/转封装引擎
engine
{
enabled on;
👉 开启处理引擎
下面是对流的处理方式。
📦 视频处理
vcodec copy;
👉 视频不重新编码
直接复制码流(省 CPU)
✔ 快
✔ 质量无损
✔ 前提:格式本来就支持 RTMP/FLV
🔊 音频处理
acodec copy;
👉 音频也不重新编码
同样是 直拷贝
🔧 aparams(音频参数处理)
aparams
{
bsf:a aac_adtstoasc;
}
这句很重要 👍
👉 给音频加一个 bitstream filter
bsf:a aac_adtstoasc 是干嘛的?
作用:
把 AAC 音频从:
👉 ADTS 封装格式
转换成:
👉 ASC(RTMP/MP4 需要的格式)
简单说:
⚠ 有些 HTTP 流是 AAC-ADTS(常见于 TS 流)
RTMP 需要 AAC-ASC
这个参数就是 格式修正
否则经常会:
❌ 没声音
❌ 推流失败
📤 输出流
output rtmp://127.0.0.1:1935/live/10.22.26.59_hdmi;
意思:
👉 把处理后的流 推给本机 SRS 的 RTMP 服务
地址拆开看:
| 部分 | 含义 |
|---|---|
| 127.0.0.1 | 本机 |
| 1935 | SRS 监听端口 |
| live | 应用名 |
| 10.22.26.59_hdmi | 流名 |
最终 RTMP 地址:
rtmp://127.0.0.1:1935/live/10.22.26.59_hdmi
📌 整体工作流程(非常重要)
这套配置干的是:
HTTP流
↓
FFmpeg 拉取
↓
不转码(只封装)
↓
修正AAC格式
↓
推成本地 RTMP
↓
客户端再从 SRS 拉流
画成图:
http://10.22.26.59/hdmi
↓
FFmpeg
↓
SRS ingest
↓
rtmp://127.0.0.1/live/10.22.26.59_hdmi
↓
播放器 / 推 CDN
✅ 这个配置的用途总结
✔ 把 HTTP 实时流 转成 RTMP
✔ 几乎不占 CPU(copy 模式)
✔ 适合监控流、采集卡、编码器
常见场景:
- 摄像头 HTTP 流 → RTMP直播
- 拉 TS/HLS → RTMP
- 内网采集 → 直播平台
⚠️ 你之前 FFmpeg 报 DTS 错误的关系
你之前的:
Non-monotonous DTS
👉 很可能是输入流时间戳混乱
SRS ingest + ffmpeg copy 时容易出现:
- 源流时间戳不规范
- RTMP 对 DTS 要求严格
有时需要加:
vcodec copy;
acodec copy;
不够,还得在 ffmpeg 参数里加重排时间戳:
例如(高级用法):
engine {
enabled on;
vcodec copy;
acodec copy;
iformat flv;
}
或者在 SRS 里启用 genpts(看版本支持)
🧠 一句话总结这个配置
👉 SRS 用 FFmpeg 拉一个 HTTP 流
👉 不转码直接封装
👉 修复 AAC 音频格式
👉 推成本地 RTMP 服务供播放

浙公网安备 33010602011771号