SRS 入门:HTTP-FLV 框架、配置与拉流
对应视频:
142--07-SRS流媒体服务器-HTTP-FLV框架分析.mp4143--08-1-SRS流媒体服务器-HTTP-FLV-配置文件.mp4144--08-2-SRS流媒体服务器-HTTP-FLV拉流.mp4这篇讲 HTTP-FLV 是什么、它和 RTMP 的关系、SRS 如何配置和处理 HTTP-FLV 拉流。
1. HTTP-FLV 是什么
HTTP-FLV 是通过 HTTP 连接传输 FLV 数据的一种直播方式。
它的 URL 通常长这样:
http://server-ip:8080/live/livestream.flv
和 RTMP 相比:
| 项目 | RTMP | HTTP-FLV |
|---|---|---|
| 传输协议 | RTMP over TCP | HTTP over TCP |
| 浏览器友好度 | 原生不友好 | 更容易被 Web 播放器接入 |
| 延迟 | 较低 | 较低,通常也适合直播 |
| 数据封装 | RTMP message/chunk | FLV tag 持续输出 |

2. HTTP-FLV 的关键原理
普通 HTTP 响应通常有明确长度,例如 Content-Length。浏览器收到指定长度的数据后,请求就结束。
直播不一样:服务端不知道直播什么时候结束,所以 HTTP-FLV 会保持 HTTP 连接,不断往响应体里写 FLV 数据。
课程里强调的点:
HTTP 响应头先返回
不固定 Content-Length
后面持续发送 FLV tag
客户端边收边播
连接断开才结束

典型响应头:
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: video/x-flv
Transfer-Encoding: chunked
3. HTTP-FLV 和 RTMP 的关系
HTTP-FLV 不一定需要新的推流协议。常见场景是:
推流端 --RTMP--> SRS --HTTP-FLV--> 播放器
也就是说,推流仍然可以是 RTMP。SRS 收到音视频数据后,把同一路 SrsSource 转换成 FLV tag,通过 HTTP 发给客户端。
简化流程:
RTMP 推流进入 SrsSource
HTTP 客户端请求 .flv
SRS 创建 HTTP-FLV consumer
发送 FLV header
发送 metadata
发送 audio/video FLV tag

4. SRS 配置文件
要使用 HTTP-FLV,需要关注两类配置:
- HTTP server 是否开启。
- HTTP-FLV live stream 是否开启、挂载路径是什么。

入门可以先理解成:
http_server:
enabled on
listen 8080
http_remux:
enabled on
mount [vhost]/[app]/[stream].flv
具体配置以课程使用的 SRS 版本为准,但核心意思不变:
listen决定 HTTP 服务端口。mount决定 HTTP-FLV URL 路径如何映射到vhost/app/stream。
5. HTTP-FLV URL
如果 RTMP 推流 URL 是:
rtmp://192.168.1.10/live/livestream
HTTP-FLV 拉流 URL 可能是:
http://192.168.1.10:8080/live/livestream.flv

新手最容易错的地方:
- HTTP 端口写错。
- app/stream 和推流不一致。
- 忘了
.flv后缀。 - SRS 配置没有开启
http_server或http_remux。 - 防火墙或云服务器安全组没放行 HTTP 端口。
6. HTTP-FLV 拉流源码流程
HTTP-FLV 拉流本质上是 HTTP 请求进入 SRS 后,找到对应流,然后持续写 FLV 数据。
简化源码路径:
HTTP client 请求 /live/livestream.flv
SRS HTTP server 接收请求
匹配 HTTP-FLV handler
解析 app/stream
找到 SrsSource
创建 consumer
发送 FLV header
循环读取 consumer 消息
转换成 FLV tag
写入 HTTP response


7. FLV Tag 入门
FLV 文件或流由 FLV header 和一系列 tag 组成。
FLV Header
PreviousTagSize0
Tag1
PreviousTagSize1
Tag2
PreviousTagSize2
...
常见 tag 类型:
| Tag | 含义 |
|---|---|
| Script Tag | 元数据,例如宽高、编码、帧率 |
| Video Tag | 视频数据,例如 H.264 |
| Audio Tag | 音频数据,例如 AAC |
HTTP-FLV 直播就是把这些 tag 源源不断写到 HTTP 响应体里。

8. 调试顺序
如果 HTTP-FLV 拉不到流,按这个顺序排查:
1. RTMP 推流是否成功
2. SRS 是否创建了对应 SrsSource
3. HTTP server 端口是否开启
4. HTTP-FLV/remux 是否开启
5. URL 的 app/stream 是否和推流一致
6. 浏览器或播放器是否收到 HTTP 200
7. 响应 Content-Type 是否是 video/x-flv
8. 后续是否持续有 FLV tag 输出
如果能打开 HTTP 连接但不播放,重点查:
- 是否先发送了 FLV header。
- 是否发送了 metadata。
- H.264 SPS/PPS、AAC sequence header 是否先到达。
- 播放器是否支持当前编码。
最后记住:
HTTP-FLV = HTTP 长连接 + FLV header + 持续输出 FLV tag。
评论
...正在读取评论。