一、模块概述
ngx_http_f4f_module
是 NGINX 的商业订阅模块,专为 Adobe HDS(HTTP Dynamic Streaming)设计。
- HDS 流程:视频内容先由
f4fpackager
切片生成对应的.f4f
片段文件和.f4x
索引文件; - 模块职责:解析客户端对
/videoSeg1-Frag1
之类 URI 的请求,读取相关.f4x
索引,定位并返回.f4f
中对应的字节范围。
与传统将整个片段先传回再剪裁的方式不同,ngx_http_f4f_module
可在服务端实时“零拷贝”读取切片,极大降低延迟与带宽浪费。
二、模块编译与启用
该模块 默认未编译,需在 NGINX 源码编译时加上:
./configure --with-http_dav_module \
--with-http_f4f_module \
[其他参数…]
make && sudo make install
安装完成后,重启 NGINX 即可在 location
中使用 f4f
指令。
三、核心指令
1. f4f
location /video/ {
f4f;
# …其他 proxy_pass / 缓存 / 访问控制等
}
- 作用:开启该
location
的 HDS 支持; - 上下文:仅限
location
; - 工作原理:将 URI
…/videoSegX-FragY
映射到磁盘…/videoSegX.f4f
与…/videoSegX.f4x
,并返回对应片段。
2. f4f_buffer_size
f4f_buffer_size 512k;
-
默认:
512k
; -
作用:设置用于读取
.f4x
索引文件的缓冲区大小; -
上下文:
http, server, location
; -
调整建议:
- 大文件索引或高并发场景可适当增大(如
1m
、2m
),减少 IO 调用; - 缓冲过大可能浪费内存,应结合实际负载和索引文件大小进行调优。
- 大文件索引或高并发场景可适当增大(如
四、示例配置
http {
# 静态文件根目录
root /data/hds;
# HDS 支持位置
location /video/ {
f4f; # 启用 HDS
f4f_buffer_size 1m; # 提升索引读取缓冲到 1 MiB
# 可选:为片段服务器配置缓存或访问控制
proxy_cache hds_cache;
proxy_cache_valid 200 10m;
limit_rate 1m; # 针对客户端限速
}
}
- 客户端访问
/video/movieSeg3-Frag5
时,NGINX 内部读取/data/hds/movieSeg3.f4x
,定位偏移,再从/data/hds/movieSeg3.f4f
中读取对应字节并返回。
五、运行机制与注意事项
-
预处理依赖
- 必须先用
f4fpackager
生成配套的.f4f
+.f4x
文件; - 未生成或索引丢失时会返回 404。
- 必须先用
-
文件系统
- 建议将
.f4f
/.f4x
放在高性能本地磁盘或 SSD 上; - 涉及大量随机 IO 的场景,配合操作系统页缓存或开启
open_file_cache
提升性能。
- 建议将
-
内存与并发
- 索引缓冲区与并发请求数成正比;
- 可结合
worker_processes
、worker_connections
和f4f_buffer_size
做压力测试和容量规划。
-
缓存策略
- HDS 片段通常可被 CDN 缓存;
- NGINX 自身的
proxy_cache
可用于二级缓存,减轻后端磁盘压力。
六、优化与高级用法
- 动态路径映射
利用alias
或root
+rewrite
,将请求定向到不同存储节点或多机房布局。 - 安全控制
在location /video/
中加入limit_except GET
或auth_jwt
,保护付费或内部流量。 - 日志分离
针对/video/
请求单独设定access_log hds.log
,便于监控流量与错误片段。
七、总结
ngx_http_f4f_module
让 NGINX 能原生支持 Adobe HDS,按需切片、低延迟传输,并可结合缓存、限速和安全控制构建高效、稳健的流媒体服务。通过合理配置 f4f
与 f4f_buffer_size
,并与 CDN 或 NGINX 缓存层配合,可满足海量并发点播和直播分发场景需求。掌握本模块,轻松为你的 NGINX 加上一把流媒体“利器”!