IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    nginx模块开发(45)—FLV模块分析

    cjhust发表于 2016-03-10 16:20:41
    love 0

    1、知识百科

    FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等问题。

        FLV是被众多新一代视频分享网站所采用,是目前增长最快、最为广泛的视频传播格式。是在sorenson公司的压缩算法的基础上开发出来的,FLV格式不仅可以轻松的导入Flash中,速度极快,并且能起到保护版权的作用,并且可以不通过本地的微软或者REAL播放器播放视频。

    nginx的FLV模块支持对FLV(flash)文件的拖动播放,nginx处理文件的过程为:

    (1)为请求的文件增加FLV头"FLV\x1\x5\0\0\0\x9\0\0\0\0";

    (2)根据请求参数中的start=XXX转发文件;

    FLV格式

    (1)Signature:    UI8 Signature byte always 'F' (0x46) 

    (2)Signature:   UI8 Signature byte always 'L' (0x4C) 

    (3)Signature:    UI8 Signature byte always 'V' (0x56) 

     备注:前3个字节是格式签名,一般是FLV。

    (4)Version:    UI8 File version (for example, 0x01 for FLV version 1) 

     备注:第4个字节是FLV版本。

     

    (5)TypeFlagsReserved:UB[5] Must be 0 

    (6)TypeFlagsAudio    UB[1] Audio tags are present 

    (7)TypeFlagsReserved UB[1] Must be 0 

    (8)TypeFlagsVideo    UB[1] Video tags are present 

    备注:第5个字节是流信息,最高5位必须是0,为保留位。

     

    FLV header:

    46 4c 56 (FLV)

    01 (version)

    05 (Flags)

    00 00 00 09 (header长度,一般是9)

     

    FLV body:

    00 00 00 00

     

    Audio tag数据区:

    00 dd

    2、示例配置

    #./configure –prefix=/root/macro --with-http_flv_module

    #make

    #make install

    server{
    location ~ \.flv${
                   flv;        #处理flv视频
    }
    }

    3、源码分析

    ngx_http_flv(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)

    函数功能:解析flv指令,设置handler为ngx_http_flv_handler。

    ngx_http_flv_handler(ngx_http_request_t *r)

    函数功能:处理flv视频需求,支持start=bytes参数。

    4、测试验证

    image

    备注:测试文件test.flv约27MB。

    #curl http://10.0.2.15/test.flv?start=28129554

    image

    5、参考资料

    FLV格式:

    http://noahgenius.iteye.com/blog/164782



沪ICP备19023445号-2号
友情链接