這是nginx-rtmp-module系列的第二講层坠,主要介紹在windows環(huán)境下編譯與使用的方法。
章節(jié)目錄:
- 準備工作
- nginx在win7下的編譯過程
- nginx-rtmp-modul模塊的編譯方法
- 另一種nginx的獲取方式
nginx在Linux和mac上的安裝方法有很多刁笙,我通過這篇文檔主要講一下在windows下的應用方法破花,主要是介紹編譯過程,以及編譯過程中經常出現(xiàn)的問題采盒。最后我會介紹一種直接安裝的方法旧乞。
nginx-rtmp-module的編譯過程主要就是nginx的編譯,其依賴環(huán)境和編譯步驟官網有說明,詳細的內容可見:
Building nginx on the Win32 platform with Visual C
如果您的英文不好也沒關系,可以通過以下鏈接了解稍坯。
http://tengine.taobao.org/nginx_docs/cn/docs/howto_build_on_win32.html
如果還嫌官方的麻煩恩静,也可以跟著我的步驟來做从媚,我這有最簡單的實現(xiàn)方式和完整的依賴環(huán)境蝌蹂。
一款慨、準備工作
在window下的編譯過程并不復雜胖烛,由于依賴的安裝包可能被墻挫以,我把這些內容備份到百度網盤者蠕,如果有需要可以一并下載。
網盤地址
密碼:hhni
在windows環(huán)境下編譯nginx的條件是:
代碼庫的使用方法我會在編譯過程中介紹掐松,除此之外的軟件安裝就不細說了踱侣,但我提幾點注意事項,防止我們在編譯的時候出各種不必要的問題大磺。
1抡句、MSYS安裝后的多bash問題。
MSYS的安裝本來不會出什么問題杠愧,下一步點下去就安完了待榔。但我們的主機環(huán)境是多種多樣的,比如在Git的bin目錄流济,也有bash.exe锐锣。如果您只是簡單地在path中增加msys/bin的路徑,那真正運行的時候您注意下绳瘟,當前啟動的bash到底是哪個雕憔?
避免這種情況的方法也很簡單,cd到msys/bin目錄下稽荧,運行當前環(huán)境即可橘茉。我在安裝包中附了一份MSYS綠色版,解壓運行即可姨丈。
MSYS_MinGW-w64_GCC_710_x86-x64_Full.7z
問題就說到這,如果環(huán)境都準備妥當擅腰,就可以進入編譯環(huán)節(jié)了蟋恬。
二、nginx在win7下的編譯過程
nginx的編譯步驟官網已經說的很詳細的趁冈,它是這么描述的:
但為什么我們還是出各種各樣的問題呢歼争?我認為它主要出在環(huán)境切換上,確切地說是 “configure”與“build”脫節(jié)渗勘。我根據官網的步驟沐绒,整理出一份更符合我們國情的編譯過程,編譯的步驟是:
- 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ù)践惑,可以自行處理。當出現(xiàn)如下界面的時候嘶卧,那恭喜你尔觉,你離編譯成功只有一步之遙。
如果失敗芥吟,尤其是sh崩潰侦铜,注意運行時sh.exe的位置,是不是我們安裝的msys\bin目錄钟鸵!
4钉稍、正式編譯
關于build,官網只有一句話棺耍,就是nmake贡未。確實只需要nmake,但在什么環(huán)境下make呢?它沒說羞秤!
正確的nmake缸托,是在Visual Studio 環(huán)境下,當前的bash是不行的瘾蛋。雖然當前bash也有make俐镐,但您運行之后會是這樣。
好吧哺哼,啟動你的Visual Studio Command 佩抹,切換到nginx目錄,讓nmake 跑起來取董。
經過漫長的等待棍苹,nginx的編譯就這樣成功了。
三茵汰、nginx-rtmp-modul模塊的編譯方法
依托nginx搭建rtmp媒體服務器枢里,nginx-rtmp-module模塊是關鍵,如何能順利編譯這個模塊蹂午?官方是這樣介紹的:
沒毛怖覆颉!該有的都有了豆胸,但您要想編譯成功奥洼,得琢磨!
我還是給大家整理一份更簡單晚胡、準確的編譯過程吧灵奖。通過第二章的了解,nginx的編譯大家都熟悉了估盘。一個完整的nginx是包含它組件和模塊的瓷患,通過nginx -V 命令,可以方便的看到這些內容忿檩。
比如最新版nginx組件關系是這樣的:
而一個非常豐富的版本尉尾,它的組件與模塊也可以是這樣的:
我把1.7.11.3版本中的信息整理一下,你能看到:
主要有兩類:
- --with
- --add-module
我們稱第一類為組件燥透,第二類為模塊。今天要編譯的nginx-rtmp-module模塊辨图,就是其中一類班套。讓大家明白這層關系,是為了能夠一通百通故河,舉一反三吱韭。當您掌握nginx-rtmp-module 的編譯方法之后,其他nginx擴展就都不是事兒了!
好了理盆,在nginx編譯成功的基礎上痘煤,nginx-rtmp-module的編譯步驟是:
- clone 代碼;
- 編譯配置
- 正式編譯
1猿规、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缔恳,就已經編譯完成了。
四的烁、另一種獲取方法
您可以通過配置環(huán)境褐耳、編譯,一步步的拿到自己輸出渴庆,包含RTMP服務的nginx铃芦。除此之外,從網上下載一份現(xiàn)成的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的編譯過程還是非常順利的砰诵,只要環(huán)境整明白了,配置和編譯都不會出什么大障礙捌显。這不像nginx-http-flv-module這種庫茁彭,維護的人少,編譯bug還超多扶歪!
好了理肺,祝大家在nginx編譯上一切順利:)
如果有問題,可以給我留言,我們下一講見妹萨。