使用Nginx配置mp4视频播放踩坑记录

crelaber

一、环境配置

Nginx : Tengine(2.1.1)/ Nginx(1.6.2)

二、安装步骤
1、下载/ngx_http_enhance_mp4_module
执行命令:

cd /data/wwwroot/server/nginx_module
git clone  https://github.com/whatvn/ngx_http_enhance_mp4_module
cd ngx_http_enhance_mp4_module

2、添加mp4模块

dso_tool --add-module=/data/wwwroot/server/nginx_module/ngx_http_enhance_mp4_module

(dso_tool命令是Tengine的动态加载模块工具)
通过上面的命令添加完毕之后,会在tengine的安装目录下的module文件夹下生成ngx_http_enhance_mp4_module文件

3、编辑nginx的nginx.conf文件
在dso节点中增加如下配置

dso {
        load ngx_http_enhance_mp4_module.so;
}

4、查看是否安装成功
使用nginx -V查看安装的模块,如果出现了这个图,则说明模块已经成功的安装,否则,请检查原因

clipboard.png

5、添加访问配置
配置一个host文件,比如www.a.com.conf,其内容如下

server {
    listen 80;
    listen 443 ssl;
    server_name www.a.com;

    #错误日志和访问日志的路径配置
    access_log /data/wwwlogs/nginx/access_log/www.a.com_nginx.log combined;
    error_log /data/wwwlogs/nginx/error_log/www.a.com_errr_log;

    #增加重写规则
    index index.html index.htm index.php;
    include /usr/local/tengine/conf/rewrite/other.conf;
    
    #项目的路径   
    root /data/wwwroot/resource/video;

    #https相关的配置
    ssl_certificate /data/wwwroot/ssl_file/www.a.com/v.chained.crt;
    ssl_certificate_key /data/wwwroot/ssl_file/www.a.com/www.a.com.key;
    # limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
    charset utf-8;

    #所有的mp4文件的自动解析
    location ~ \.mp4$ {
      enhance_mp4;
      fix_mp4 on;
      enhance_mp4_buffer_size 1m;
      enhance_mp4_max_buffer_size 50m;
   }
}

6、访问文件
比如服务器上有1.mp4文件,则访问http://www.a.com/1.mp4,如果视频能够正常播放,说明配置搭建成功

三、学到的知识点

1、使用Tengine的dso_tool来动态添加模块
2、视频文件的编码格式有h.264 h.265 vpc等,音频格式有aac pcm等格式
3、ngx_http_enhance_mp4_module无法解码高于h.264格式的编码

四、踩坑点

1、因为ngx_http_enhance_mp4_module无法解码高于h.264这种类型是mp4文件,所以在配置的过程中一直没办法正常的播放视频,解决的办法是将原始的视频使用格式工厂将视频文件转码为avc格式。

2、网上很多的解决办法是使用nginx_mod_h264_streaming-2.2.7.tar.gz这个压缩包来配置,但是在一直无法正常的进行编译,同时也无法正常的使用dso_tool命令添加到Tengin的目录下,同时大部分的说法是重新编译nginx,对于已经有线上业务的环境这种做法非常不靠谱,没办法平滑的迁移。

阅读 26.8k

crelaber的技术专栏
专注于java、nodejs、php、以及Linux等技术研究
1.1k 声望
22 粉丝
0 条评论
1.1k 声望
22 粉丝
文章目录
宣传栏