模块 ngx_http_mp4_module
示例Directives mp4 mp4_buffer_size mp4_max_buffer_size mp4_limit_rate mp4_limit_rate_after mp4_start_key_frame |
该模块提供伪流式处理
对 MP4 文件的服务器端支持。
此类文件通常具有 、 、
或文件扩展名。ngx_http_mp4_module
.mp4
.m4v
.m4a
伪流式处理与兼容的媒体播放器协同工作。
播放器向服务器发送一个 HTTP 请求,其中包含开始时间
在查询字符串参数中指定(命名 simply 并以秒为单位指定),并且服务器使用流进行响应
使其起始位置对应于请求的时间,
例如:start
http://example.com/elephants_dream.mp4?start=238.88
这允许随时执行随机查找或开始播放 在时间线的中间。
为了支持查找,基于 H.264 的格式存储元数据 在所谓的“Moov Atom”中。 它是文件的一部分,用于保存 整个文件。
要开始播放,播放器首先需要读取元数据。
这是通过发送带有参数的特殊请求来完成的。
许多编码软件将元数据插入到
文件的结尾。
这对于伪流式处理来说是次优的,因为播放器
必须在开始播放之前下载整个文件。
如果元数据位于文件的开头,
nginx 只需开始发回文件内容就足够了。
如果元数据位于文件末尾,
nginx 必须读取整个文件并准备一个新的 stream,以便
元数据位于媒体数据之前。
这涉及一些 CPU、内存和磁盘 I/O 开销。
所以提前准备一个伪推流的原始文件是个好主意,
而不是让 nginx 对每个此类请求都执行此作。start=0
该模块还支持 HTTP 请求的参数
(1.5.13) 设置播放的结束点。
可以使用 argument 指定
或单独:end
end
start
http://example.com/elephants_dream.mp4?start=238.88&end=555.55
对于具有非零 or 参数的匹配请求,nginx 将从文件中读取元数据,准备
stream 的 SET 请求的时间范围,并将其发送到客户端。
这与上述开销相同。start
end
如果参数指向
非 key 视频帧,
此类视频的开头将被打破。
要解决此问题,可以在视频前面加上
Point 之前的关键帧
以及它们之间的所有中间帧。
这些帧将在播放中隐藏
使用编辑列表 (1.21.4)。start
start
如果匹配请求不包含 and 参数,则不会产生任何开销,并且文件仅作为 static 发送
资源。
一些播放器还支持字节范围请求,因此不需要
这个模块。start
end
默认情况下,此模块不是构建的,应使用 configuration 参数启用它。--with-http_mp4_module
如果以前使用过第三方 mp4 模块,则应将其禁用。
ngx_http_flv_module 模块提供了对 FLV 文件的类似伪流支持。
示例配置
location /video/ { mp4; mp4_buffer_size 1m; mp4_max_buffer_size 5m; mp4_limit_rate on; mp4_limit_rate_after 30s; }
Directives
语法: |
mp4; |
---|---|
默认值: | — |
上下文: |
location |
在周围位置打开模块处理。
语法: |
mp4_buffer_size |
---|---|
默认值: |
mp4_buffer_size 512K; |
上下文: |
http , ,server location |
设置用于
处理 MP4 文件。size
语法: |
mp4_max_buffer_size |
---|---|
默认值: |
mp4_max_buffer_size 10M; |
上下文: |
http , ,server location |
在元数据处理期间,可能需要更大的缓冲区。
其大小不能超过指定的 ,
否则 nginx 将返回
500 (Internal Server Error) 服务器错误,
并记录以下消息:size
"/some/movie/file.mp4" mp4 moov atom is too large: 12583268, you may want to increase mp4_max_buffer_size
语法: |
mp4_limit_rate
|
---|---|
默认值: |
mp4_limit_rate off; |
上下文: |
http , ,server location |
限制向客户端传输响应的速率。
该速率根据
MP4 文件已投放。
要计算速率,请将比特率乘以指定的 .
特殊值 “” 对应于系数 1.1。
特殊值 “” 禁用速率限制。
限制是按请求设置的,因此,如果客户端同时打开
两个连接,则总体速率将是 2 倍
指定为指定的限制。factor
on
off
该Directives作为我们商业订阅的一部分提供。
语法: |
mp4_limit_rate_after |
---|---|
默认值: |
mp4_limit_rate_after 60s; |
上下文: |
http , ,server location |
设置媒体数据的初始量(以播放时间为单位) 之后,将响应进一步传输给客户端 将受到速率限制。
该Directives作为我们商业订阅的一部分提供。
语法: |
mp4_start_key_frame |
---|---|
默认值: |
mp4_start_key_frame off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.21.4 中。
强制输出视频始终以关键视频帧开头。
如果参数不指向关键帧,则
使用 MP4 编辑列表隐藏初始帧。
编辑列表受主要参与者和浏览器支持,例如
Chrome、Safari、QuickTime 和 ffmpeg,
Firefox 部分支持。start