虚拟化容器,大数据,DBA,中间件,监控。

ngx_http_mp4_module 模块

01 07月
作者:admin|分类:系统运维

ngx_http_mp4_module 模块

示例配置
指令
     mp4
     mp4_buffer_size
     mp4_max_buffer_size

模块ngx_http_mp4_module为H.264/AAC文件,主要是以.mp4.m4v、和.m4a为扩展名的文件,提供伪流媒体服务端支持。

伪流媒体是与Flash播放器一起配合使用的。播放器向服务端发送HTTP请求,请求中的查询串是以开始时间为参数的(以start简单命名),而服务端以流响应,这样流的开始位置就能于请求中的时间相对应。例如:

http://example.com/elephants_dream.mp4?start=238.88

这样就允许随意拖放,或者从节目的中途开始回放。

为了支持随机访问,H.264格式将元数据放到所谓的"moov atom"中。"moov atom"是文件的一部分,放有整个文件的索引信息。

为了开启回放,播放器首先需要读取元数据。这是通过发送一个特别的以start=0为参数请求来完成的。许多编码软件会将元数据插入到文件末尾,这样做对伪流媒体来说是不好的:元数据需要在文件开始时定位好,否则整个文件需要下载完才能开始播放。如果文件组织的很好(将元数据放到文件开头),那么nginx仅仅返回文件的内容,否则,nginx不得不读取文件并准备一个新的流,将元数据放在媒体数据前面,这将导致一些CPU,内存,磁盘I/O开销。所以一个比较好的主意是为伪流媒体准备文件,而不是让nginx处理请求时做。

对于匹配有非零start参数的请求,nginx从文件中读取元数据,从请求的偏移位置开始准备流数据发送给客户端。这与上面描述的情况有同样的开销。

如果匹配的请求没有包含start参数,就不会有额外开销,而文件仅仅是以静态资源被发送。一些播放器也支持字节范围请求,所以就根本不需要这个模块。

这个模块默认是不安装的,需要通过--with-http_mp4_module来配置开启。

假如你在使用第三方的mp4模块,一定要关闭该模块。

一个简单的支持FLV文件的伪流媒体由模块ngx_http_flv_module提供。

示例配置

location /video/ {
    mp4;
    mp4_buffer_size     1m;
    mp4_max_buffer_size 5m;
}

指令

语法: mp4;
默认值:
上下文: location

配置开启该模块处理当前路径。

语法: mp4_buffer_size size;
默认值:
mp4_buffer_size 512K;
上下文: http, server, location

设置处理MP4文件的初始内存大小。

语法: mp4_max_buffer_size size;
默认值:
mp4_max_buffer_size 10M;
上下文: http, server, location

在处理元数据时,可能必需较大的缓存。它的大小不能超过size指定的值,否则nginx将会返回服务器错误,500 (Internal Server Error),并记录如下日志:

"/some/movie/file.mp4" mp4 moov atom is too large:
12583268, you may want to increase mp4_max_buffer_size"

翻译: litia
浏览1866 评论0
返回
目录
返回
首页
CentOS Linux配置Squid 3.5代理与用户认证上网 NGINX HTTPS详细配置说明