2023-11-06 Windows 编译 nginx-http
背景
项目中使用流媒体服务器,通过FFmpeg接入RTSP转码位flv在浏览器中播放,其中flv流媒体服务器是在Linux中使用nginx编译flv模块的,Linux中编译过程很容易,为了使用方便,想在Windows中使用,但是Windows中没有nginx-flv直接使用的软件包,需要自己编译,编译过程还挺麻烦的,在这里记录一下。
准备
软件 | 版本 | 下载地址 |
---|---|---|
nginx | 1.22.0 | |
nginx-http-flv-module | 1.2.10 | |
openssl | 1_1_1o | |
pcre | 2-10.42 | |
zlib | 1.3 | |
strawberry | 5.32.1.1 | |
nasm | 2.16.01 | |
mingw |
其中nginx、nginx-http-flv-module、openssl、pcre、zlib是需要编译到软件中的模块
strawberry、nasm、mingw是编译需要使用到的工具
还有一个就是执行编译命令时,命令行是不行的,需要在VS中开启命令行,说是要使用到很多系统环境变量,普通命令行引用不到,所以我觉得编译环境还是太大了,如果不是我的电脑已经有VS了,我估计都想放弃,毕竟VS太大了。
nginx不要在官网下载,官网下载的是编译好的运行文件,这里我们需要下载源码
nginx-http-flv-module请下载1.2.10版本,我试过1.2.11和1.2.8,都编译失败了,失败的错误都是在nginx-http-flv-module中,当然我也不确定是不是其它模块冲突,反正我就是更换了nginx-http-flv-module版本最后才能编译成功。
strawberry下载的时候请下载安装包,不要下载绿色的zip包,我下载的zip,在主机中解压使用,并且按照常规方式配置了环境变量,但是使用过程中还是会提示找不到strawberry的错误,寻思着也没错啊,最后实在看不出来啥问题,将解压的删掉,使用安装包安装就能通过编译,重新看了一下环境变量,看到里面安装strawberry软件时相关环境变量有3个。。。
其它的下载我这里使用的版本都没啥问题
过程
安装MinGW后需要执行一段脚本,可以写在一个.bat执行文件中
auto/configure --with-cc=cl --builddir=build/output --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx-flv.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=build/3rdlib/pcre2-10.42 --with-zlib=build/3rdlib/zlib-1.3 --with-openssl=build/3rdlib/openssl-OpenSSL_1_1_1o --with-select_module --with-http_ssl_module --add-module=build/3rdlib/nginx-http-flv-module-1.2.10
在MinGW执行.bat文件,会生成Makefile文件,然后在VS命令行中执行编译命令,我编译时失败了很多次,最后更换各软件版本,对照上述版本通过了编译。