这是nginx-rtmp-module系列的第二讲,主要介绍在windows环境下编译与使用的方法。
章节目录:
- 准备工作
- nginx在win7下的编译过程
- nginx-rtmp-modul模块的编译方法
- 另一种nginx的获取方式
nginx在Linux和mac上的安装方法有很多,我通过这篇文档主要讲一下在windows下的应用方法,主要是介绍编译过程,以及编译过程中经常出现的问题。最后我会介绍一种直接安装的方法。
nginx-rtmp-module的编译过程主要就是nginx的编译,其依赖环境和编译步骤官网有说明,详细的内容可见:
Building nginx on the Win32 platform with Visual C
如果您的英文不好也没关系,可以通过以下链接了解。
http://tengine.taobao.org/nginx_docs/cn/docs/howto_build_on_win32.html
如果还嫌官方的麻烦,也可以跟着我的步骤来做,我这有最简单的实现方式和完整的依赖环境。
一、准备工作
在window下的编译过程并不复杂,由于依赖的安装包可能被墙,我把这些内容备份到百度网盘,如果有需要可以一并下载。
网盘地址
密码:hhni
在windows环境下编译nginx的条件是:
准备内容
代码库的使用方法我会在编译过程中介绍,除此之外的软件安装就不细说了,但我提几点注意事项,防止我们在编译的时候出各种不必要的问题。
1、MSYS安装后的多bash问题。
Installing MSYS MSYS SetupMSYS的安装本来不会出什么问题,下一步点下去就安完了。但我们的主机环境是多种多样的,比如在Git的bin目录,也有bash.exe。如果您只是简单地在path中增加msys/bin的路径,那真正运行的时候您注意下,当前启动的bash到底是哪个?
避免这种情况的方法也很简单,cd到msys/bin目录下,运行当前环境即可。我在安装包中附了一份MSYS绿色版,解压运行即可。
MSYS_MinGW-w64_GCC_710_x86-x64_Full.7z
问题就说到这,如果环境都准备妥当,就可以进入编译环节了。
二、nginx在win7下的编译过程
nginx的编译步骤官网已经说的很详细的,它是这么描述的:
nginx build steps
但为什么我们还是出各种各样的问题呢?我认为它主要出在环境切换上,确切地说是 “configure”与“build”脱节。我根据官网的步骤,整理出一份更符合我们国情的编译过程,编译的步骤是:
- clone nginx代码;
- 准备代码库;
- 编译配置
- 正式编译
1、clone nginx 代码
理论上不管用什么方法,把源码抓下来就行。官网主推的是Mercurial,我觉得还是Git更普遍一些。
git clone https://github.com/nginx/nginx.git
2、准备代码库
需要openssl、zlib和pcre三个库,您可以从官网上下载,也可以从我的网盘里抓。都可以,如果从官网下载需要注意的就是版本号,在configure的时候注意版本调整即可。
步骤简单,将三个tar包加压到新建的目录objs\lib 中。
目录层次关系
注意目录层次,openssl-1.1.0g、pcre-8.41和zlib-1.2.11均为最后一级,里边就是源码。
3、编译配置
到msys的bin目录中启动bash.exe。其他方法也行,不强求,但要保证exe启对了。
切换到nginx目录下,运行:
auto/configure --with-cc=cl --with-debug --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.exe --with-cc-opt=-DFD_SETSIZE=1024 --with-openssl-opt=no-asm --with-select_module --with-openssl=objs/lib/openssl-1.1.0g --with-openssl-opt=no-asm --with-zlib=objs/lib/zlib-1.2.11 --with-pcre=objs/lib/pcre-8.41
为了方便拷贝运行,这段脚本我就不做断行了,如果您想清晰地看到每一组参数,可以自行处理。当出现如下界面的时候,那恭喜你,你离编译成功只有一步之遥。
配置成功如果失败,尤其是sh崩溃,注意运行时sh.exe的位置,是不是我们安装的msys\bin目录!
注意Configure时的运行环境4、正式编译
关于build,官网只有一句话,就是nmake。确实只需要nmake,但在什么环境下make呢?它没说!
正确的nmake,是在Visual Studio 环境下,当前的bash是不行的。虽然当前bash也有make,但您运行之后会是这样。
bash下的make崩溃
好吧,启动你的Visual Studio Command ,切换到nginx目录,让nmake 跑起来。
经过漫长的等待,nginx的编译就这样成功了。
编译成功
三、nginx-rtmp-modul模块的编译方法
依托nginx搭建rtmp媒体服务器,nginx-rtmp-module模块是关键,如何能顺利编译这个模块?官方是这样介绍的:
build nginx-rtmp-modul没毛病!该有的都有了,但您要想编译成功,得琢磨!
我还是给大家整理一份更简单、准确的编译过程吧。通过第二章的了解,nginx的编译大家都熟悉了。一个完整的nginx是包含它组件和模块的,通过nginx -V 命令,可以方便的看到这些内容。
比如最新版nginx组件关系是这样的:
1.13.8版本
而一个非常丰富的版本,它的组件与模块也可以是这样的:
1.7.11.3
我把1.7.11.3版本中的信息整理一下,你能看到:
主要有两类:
- --with
- --add-module
我们称第一类为组件,第二类为模块。今天要编译的nginx-rtmp-module模块,就是其中一类。让大家明白这层关系,是为了能够一通百通,举一反三。当您掌握nginx-rtmp-module 的编译方法之后,其他nginx扩展就都不是事儿了!
好了,在nginx编译成功的基础上,nginx-rtmp-module的编译步骤是:
- clone 代码;
- 编译配置
- 正式编译
1、clone 代码
注意 clone 后代码的位置如图所示,在objs/lib目录下,clone nginx-rtmp-module代码。
https://github.com/arut/nginx-rtmp-module
2、编译配置
与nginx时完全相同,到msys的bin目录中启动bash.exe,切换到nginx目录下运行:
auto/configure --with-cc=cl --with-debug --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.exe --with-cc-opt=-DFD_SETSIZE=1024 --with-openssl-opt=no-asm --with-select_module --with-openssl=objs/lib/openssl-1.1.0g --with-openssl-opt=no-asm --with-zlib=objs/lib/zlib-1.2.11 --with-pcre=objs/lib/pcre-8.41 --add-module=objs/lib/nginx-rtmp-modu1
3、正式编译
启动Visual Studio Command ,切换到nginx目录,nmake again!
编译成功后,通过nginx -V 查看扩展内容,您会看到:
一个支持RTMP多媒体服务的nginx,就已经编译完成了。
四、另一种获取方法
您可以通过配置环境、编译,一步步的拿到自己输出,包含RTMP服务的nginx。除此之外,从网上下载一份现成的nginx,也是一种更快的方法。
不是自己编译的就一定比线上的好,把这个服务用好才是真的好!
从nginx官网上下载的版本是不带rtmp模块的,但您可以通过:
http://nginx-win.ecsds.eu/
注意version.txt中的内容,并不是所有的版本都有rtmp :)
http://nginx-win.ecsds.eu/download/Readme%20nginx-win%20version.txt
后记:
这篇博客到这就结束了,nginx和nginx-rtmp-module的编译过程还是非常顺利的,只要环境整明白了,配置和编译都不会出什么大障碍。这不像nginx-http-flv-module这种库,维护的人少,编译bug还超多!
好了,祝大家在nginx编译上一切顺利:)
如果有问题,可以给我留言,我们下一讲见。
网友评论