第二讲:win7下nginx-rtmp-module的编译方法

这是nginx-rtmp-module系列的第二讲,主要介绍在windows环境下编译与使用的方法。

章节目录:

  1. 准备工作
  2. nginx在win7下的编译过程
  3. nginx-rtmp-modul模块的编译方法
  4. 另一种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 Setup

MSYS的安装本来不会出什么问题,下一步点下去就安完了。但我们的主机环境是多种多样的,比如在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”脱节。我根据官网的步骤,整理出一份更符合我们国情的编译过程,编译的步骤是:

  1. clone nginx代码;
  2. 准备代码库;
  3. 编译配置
  4. 正式编译

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的编译步骤是:

  1. clone 代码;
  2. 编译配置
  3. 正式编译

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 查看扩展内容,您会看到:

add-module

一个支持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编译上一切顺利:)
如果有问题,可以给我留言,我们下一讲见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269