使用Nginx配置mp4视频播放踩坑记录
一、环境配置
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查看安装的模块,如果出现了这个图,则说明模块已经成功的安装,否则,请检查原因
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,对于已经有线上业务的环境这种做法非常不靠谱,没办法平滑的迁移。