美文网首页rtmp直播
第二讲:win7下nginx-rtmp-module的编译方法

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

作者: 北塔资讯 | 来源:发表于2018-01-18 13:15 被阅读105次

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

    相关文章

      网友评论

      本文标题:第二讲:win7下nginx-rtmp-module的编译方法

      本文链接:https://www.haomeiwen.com/subject/eboioxtx.html