注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

nginx下的流媒体识别与处理功能  

2013-10-26 07:34:12|  分类: nginx缓存加速 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

mp4

模块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"

********************************
flv
********************************

模块ngx_http_flv_module 为Flash Video(FLV)文件 提供服务端伪流媒体支持;

通过返回以请求偏移位置开始的文件内容,该模块专门处理 在查询串中有start参数的请求, 和有预先设置到FLV头部的请求。

这个模块并不是默认构建的,必须通过配置参数 --with-http_flv_module 来启用。

配置范例

location ~ \.flv$ {
    flv;
}

指令

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

在当前location里使用这个模块处理请求。

 
  评论这张
 
阅读(150)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017