-
Notifications
You must be signed in to change notification settings - Fork 5
HTTP Streaming zh
pingo edited this page Mar 28, 2026
·
3 revisions
English | 中文
HTTP 流媒体模块通过单一 HTTP 监听器提供 HLS、DASH、HTTP-FLV、HTTP-TS 和 HTTP-FMP4 等多种流媒体分发方式。WebSocket 流媒体也共享此监听器。
http_stream:
enabled: true
listen: ":8080"
cors: true
# tls: null
hls:
segment_duration: 6
playlist_size: 5
dash:
segment_duration: 6
playlist_size: 30
llhls:
enabled: false
part_duration: 0.2
segment_count: 4
container: fmp4| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled |
bool | true |
是否启用 HTTP 流媒体模块 |
listen |
string | :8080 |
监听地址和端口 |
cors |
bool | true |
是否启用 CORS 跨域头 |
tls |
*bool | nil | TLS 覆盖(参见 服务器与 TLS 配置) |
| 格式 | URL 路径 | Content-Type |
|---|---|---|
| HLS 播放列表 | /live/stream1.m3u8 |
application/vnd.apple.mpegurl |
| HLS TS 分片 | /live/stream1/{N}.ts |
video/mp2t |
| LL-HLS 播放列表 | /live/stream1.m3u8 |
application/vnd.apple.mpegurl |
| LL-HLS 部分分片 | /live/stream1/{MSN}.{part}.m4s |
video/mp4 |
| LL-HLS 初始化分片 | /live/stream1/init.mp4 |
video/mp4 |
| DASH MPD | /live/stream1.mpd |
application/dash+xml |
| DASH 视频分片 | /live/stream1/v{N}.m4s |
video/mp4 |
| DASH 音频分片 | /live/stream1/a{N}.m4s |
video/mp4 |
| DASH 视频初始化 | /live/stream1/init.mp4 |
video/mp4 |
| DASH 音频初始化 | /live/stream1/audio_init.mp4 |
video/mp4 |
| HTTP-FLV | /live/stream1.flv |
video/x-flv |
| HTTP-TS | /live/stream1.ts |
video/mp2t |
| HTTP-FMP4 | /live/stream1.mp4 |
video/mp4 |
http://localhost:8080/live/stream1.m3u8
http://localhost:8080/live/stream1.mpd
http://localhost:8080/live/stream1.flv
http://localhost:8080/live/stream1.ts
http://localhost:8080/live/stream1.mp4
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
hls.segment_duration |
float | 6 |
每个 TS 分片的目标时长(秒) |
hls.playlist_size |
int | 5 |
m3u8 播放列表中保留的最大分片数 |
使用 FFplay 播放:
ffplay http://localhost:8080/live/stream1.m3u8- 兼容性最强,支持几乎所有浏览器和移动设备
- 适合大规模 CDN 分发
- 典型延迟:15-30 秒(取决于分片时长和播放列表大小)
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
llhls.enabled |
bool | false |
启用 LL-HLS 模式(替代普通 HLS 的 .m3u8 请求) |
llhls.part_duration |
float | 0.2 |
目标部分分片时长(秒),对应 PART-TARGET |
llhls.segment_count |
int | 4 |
滑动窗口中保留的完整分片数量 |
llhls.container |
string | fmp4 |
容器格式:fmp4(推荐)或 ts/mpegts
|
启用后,.m3u8 请求将返回 LL-HLS 播放列表(HLS 版本 9),包含部分分片、阻塞式播放列表重载、增量更新和预加载提示。普通 HLS 和 LL-HLS 互斥 — 设置 llhls.enabled: true 使用 LL-HLS,设置为 false 使用普通 HLS。
容器别名:
mpegts和mpeg-ts会自动规范化为ts。
LL-HLS 特性:
-
EXT-X-PART— 部分分片(约 200ms),实现亚秒级延迟 -
CAN-BLOCK-RELOAD— 服务端等待新内容可用后再返回响应 -
EXT-X-PRELOAD-HINT— 客户端预加载尚未生成的下一个部分分片 -
EXT-X-SKIP— 增量播放列表更新,减少带宽 - 目标延迟:默认设置下约 2 秒
支持的播放器: Safari(原生支持)、hls.js 1.0+(需启用 lowLatencyMode: true)
# 在配置中启用 LL-HLS 后:
ffplay http://localhost:8080/live/stream1.m3u8DASH 使用 SegmentTimeline 模式,为每个分片提供精确的时间信息。视频和音频分离为独立的 AdaptationSet,各自拥有初始化分片和媒体分片。
- 使用
SegmentTimeline和显式的每段时间信息实现精确播放 - 服务器等待至少 3 个分片就绪后才返回 MPD,以确保稳定的分片时长计算
- DASH 分片在 MPD 中使用 1 基序号,映射到内部 0 基序列号
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
dash.segment_duration |
float | 6 |
每个 fMP4 分片的目标时长(秒) |
dash.playlist_size |
int | 30 |
MPD 清单中保留的最大分片数 |
使用 FFplay 播放:
ffplay http://localhost:8080/live/stream1.mpd- 现代浏览器通过 MSE (Media Source Extensions) 原生播放
- 支持自适应比特率切换
- 典型延迟:10-20 秒
这三种格式使用 HTTP 分块传输编码(chunked transfer)实现持续流式传输,客户端建立 HTTP 长连接后持续接收数据。
| 格式 | 说明 |
|---|---|
| HTTP-FLV | FLV 容器格式,广泛用于国内直播平台,可配合 flv.js 在浏览器播放 |
| HTTP-TS | MPEG-TS 容器格式,直接输出 TS 流 |
| HTTP-FMP4 | 分片 MP4 格式,可配合 MSE 在浏览器播放,兼容性好 |
使用 FFplay 播放:
ffplay http://localhost:8080/live/stream1.flv
ffplay http://localhost:8080/live/stream1.ts
ffplay http://localhost:8080/live/stream1.mp4所有分块传输格式均受益于 GOP 缓存 -- 新订阅者立即收到最近的关键帧组,实现即时启动播放。
- HTTP-FLV:低延迟浏览器播放(配合 flv.js),延迟约 1-3 秒
- HTTP-TS:需要 TS 格式输出的场景
- HTTP-FMP4:现代浏览器通过 MSE 播放,延迟约 1-3 秒