linux下启用nginx的flv和mp4流媒体功能需源码编译时显式添加--with-http_flv_module和--with-http_mp4_module,并在配置中分别使用flv和mp4指令启用对应处理规则。

Linux 下启用 Nginx 的 FLV 和 MP4 流媒体播放功能,核心是确保编译时已包含 ngx_http_flv_module 和 ngx_http_mp4_module 两个内置模块,并在配置中正确启用对应指令。这两个模块从较新版本的 Nginx(1.1.3+)起已默认集成,无需额外下载第三方代码,但必须在 ./configure 阶段显式启用,否则不会编译进二进制。
确认当前 Nginx 是否已支持 flv/mp4 模块
运行以下命令查看编译参数:
nginx -V 2>&1 | grep -o "--with-http_\w*_module"
若输出中包含 --with-http_flv_module 和 --with-http_mp4_module,说明已支持;若缺失,则需重新编译。
常见情况:通过 apt install nginx 或 yum install nginx 安装的官方包通常**不启用这两个模块**,尤其是 Debian/Ubuntu 的默认包。必须源码编译才能开启。
重新编译 Nginx 并启用 flv 和 mp4 模块
进入 Nginx 源码目录后,执行 ./configure 时务必加入以下两项:
-
--with-http_flv_module—— 支持 FLV 格式流式传输与拖拽(依赖关键帧) -
--with-http_mp4_module—— 支持 MP4 格式按时间范围(Range)精准切片,实现秒开和进度条跳转
建议保留原有参数(可用 nginx -V 查看),再追加上述两项。例如:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module
之后执行 make && sudo make install。注意:无需安装额外依赖(如 yamdi),这两个模块纯靠 Nginx 自身逻辑处理,但 MP4 文件需含 moov 头且最好前置(可用 ffmpeg -i in.mp4 -c copy -movflags +faststart out.mp4 优化)。
配置文件中启用 flv 和 mp4 处理规则
在 nginx.conf 的 http 块内添加如下 location 匹配段:
location ~ \.flv$ {<br> flv;<br> root /var/www/videos;<br>}
location ~ \.mp4$ {<br> mp4;<br> mp4_buffer_size 1m;<br> mp4_max_buffer_size 5m;<br> root /var/www/videos;<br>}
关键点:
-
flv指令必须单独成行,不能写成add_header或其他形式 -
mp4指令启用后,Nginx 会解析 MP4 的索引结构,响应Range请求返回对应时间段数据 -
root路径要指向视频文件所在目录,且 Nginx 进程对该目录有读取权限 - FLV 文件建议预先用
yamdi或flvtool2注入关键帧,否则拖拽可能卡顿或失败
验证是否生效
启动或重载 Nginx 后,用 curl 测试 HTTP Range 请求:
curl -I -H "Range: bytes=0-1023" http://your-server/test.mp4
正常应返回 HTTP/1.1 206 Partial Content 及 Content-Range 头。用浏览器打开 MP4/FLV 链接,检查能否拖动进度条、快进到任意位置并立即播放——这才是真正启用成功的标志。











