windows下搭建nginx-rtmp伺服器

來源:互聯網
上載者:User

標籤:安裝   檢查   help   輸入   建議   下載失敗   expect   exp   stc   

windows下搭建nginx-rtmp伺服器

 

  • windows下搭建nginx-rtmp伺服器
    • 準備工作
      • 安裝MinGW
      • 安裝Mercurial
      • 安裝strawberryperl
      • 安裝nasm
      • 下載nginx相關的源碼包
    • 編譯nginx
    • nginx-rtmp環境搭建
    • 效果測試
    • 最後說明

 


最近因為接觸直播相關的技術工作,使用的也是基於高並發和高效能的nginx,首先需要做的當然是搭建一個nginx伺服器。 
對於linux上nginx伺服器的搭建此處就不再贅述,按照操作指引來的話一般都能順理成章搭建起來。 
對於linux操作不熟練的手殘黨來說,當然是希望能在windows下也能用上這一套。剛開始在windows下搭建環境的時候遇到了很多問題,後面逐個解決花費不少功夫,怕以後忘了,就把我在windows下編譯nginx和搭建RTMP直播伺服器的過程記錄下來,權當做個備忘。 

準備工作
  • 安裝MinGW

    在這些準備工作之前,你的電腦上至少安裝有一款IDE,我的是VS2008。 
    首先安裝MinGW,後面的nginx編譯需要先在msys環境下進行。 
    安裝方式可以有線上安裝和離線安裝兩種方式,離線安裝的話過程很繁瑣,需要自己下載各種包解壓、配置路徑等等操作,所以此處採用無腦式的線上安裝進行說明。 
    由於MinGW的很多資源套件都是在sourceforge上下載的,國內雖然能訪問,但是速度奇慢,線上安裝過程中經常會出現下載組件失敗,強烈建議FQ安裝。

    1. 到MinGW找到MinGW安裝引導程式mingw-get-setup.exe的連結地址並下載,下載的檔案不到100KB。執行安裝工具,開始選擇安裝路徑時要注意,不要將MinGW安裝到帶有空格或者中文路徑的目錄下!!。 

    2. 預設情況下,在下載完成後會在案頭產生一個MinGW Installer快捷表徵圖,如果沒有,也可以去MinGW安裝目錄中找到, $MinGW安裝目錄\libexec\mingw-get\guimain.exe。接下來運行安裝之後的快捷表徵圖,選擇要線上安裝的組件,此處只需選擇Basic Setup下msys及gcc相關組件就行了。 
      然後,選擇Installation菜單中Apply Changes進行線上下載和安裝,整個過程可能會持續十幾分鐘。 
      當然後續有需要可以再利用這個安裝介面進行組件的更改或者刪除 

      如果安裝過程中出現組件下載失敗的情況,直接確定繼續往下,安裝程式會在所有的依賴包下載完成之後進行解壓安裝,執行完成後,在不關閉安裝介面的前提下,回到上面的第二個步驟再來一遍,一直到沒有安裝錯誤。

    3. 至此,MinGW的成功安裝後,勾選的項目會變成淺綠色填充。 

      MinGW的安裝目錄下也會有msys的目錄,進入該目錄裡面,會看到有個批次檔 msys.bat,可以把它建立到案頭作為捷徑,雙擊進去就進入msys環境了。使用上和linux終端類似,不過是個精簡版的,命令沒有linux下的全,可以使用mingw-get命令進行線上安裝某些包,比如,要安裝gdb,直接輸入命令 mingw-get install gdb。 

      MinGW正常安裝的話,一般會自動將路徑加入到環境變數。如果在使用中出現問題,檢查下是不是因為路徑設定的原因,手動將 $MinGW安裝目錄\bin 和 $MinGW安裝目錄\msys\1.0\bin 加入到windows的PATH環境變數。

  • 安裝Mercurial

    Mercurial是一個版本管理工具,後面我們需要用它下載windows下的nginx源碼。

    1. 到Mercurial下載windows版並安裝。 

    2. 安裝時最好將安裝目錄選擇在沒有空格和中文目錄的路徑下。安裝完成後,在cmd中執行命令 hg,如果有以下顯示則表示安裝成功了。 

  • 安裝strawberryperl

    Strawberry Perl是Windows環境的Perl環境,包含了運行和開發Perl應用程式所需的全部內容,它的目的是儘可能接近UNIX系統上的Perl環境,後面在編譯nginx及其依賴庫的時候需要用到。

    1. 到Strawberry Perl下載並安裝windows下的安裝程式,選擇安裝路徑時最好選擇在沒有空格和中文目錄的路徑下。
  • 安裝nasm

    NASM全稱The Netwide Assembler,是一款基於80x86和x86-64平台的組合語言編譯器,其設計初衷是為了實現編譯器程式跨平台和模組化的特性,至於為什麼要安裝這貨,後面再說。

    1. 到NASM下載安裝程式安裝即可。
    2. 安裝完成後,將其安裝路徑加入到PATH環境變數。
  • 下載nginx相關的源碼包

    搭建nginx-rtmp伺服器需要下載nginx源碼和nginx-rtmp-module源碼。以及nginx依賴的組件。 後面將要在msys下進行配置,不像linux下直接可以使用yum install xxx-devel的形式安裝依賴的組件包頭。所以需要將nginx相關的源碼包悉數下載好,注意是源碼包,因為nginx編譯時間需要引用這些依賴庫的開發標題。

    • nginx 
      linux下的nginx源碼包可以直接去nginx網站下載,但是上面的源碼包只有linux的,源碼的os檔案夾下僅有unix平台的。而windows只有編譯好的檔案。這裡就需要使用Mercurial下載帶有win32平台的nginx源碼包。 
      在cmd中執行命令 hg clone http://hg.nginx.org/nginx nginx-win32-src 下載最新的nginx代碼,耐心等待源碼down到本地,也可以下載指定的版本,具體參考 hg help 。
    • nginx-rtmp-module 
      作為nginx外接的擴充模組,將用作後面搭建RTMP直播環境的一部分 
      使用Git或者SVN等工具或者直接去GitHub上下載nginx-rtmp-module
    • pcre
    • zlib
    • openssl

    以下是我使用的幾個源碼包的版本: 
    nginx-release-1.31.1 tag 
    nginx-rtmp-module-1.1.11.tar.gz 
    pcre-8.40.tar.gz 
    zlib-1.2.11.tar.gz 
    openssl-1.0.2l.tar.gz 

編譯nginx
  1. 將上述下載好的五個源碼包拷貝到msys目錄下 $MinGW安裝目錄\msys\1.0\home\$USERNAME\

  2. 開啟msys批次檔,分別解壓之前下載的源碼包。

  3. 進入nginx源碼目錄。建立一個configuration-nginx.bat檔案,裡面內容如下,後面的將幾個依賴包加入的配置代碼根據實際情況填寫不同路徑。 

    auto/configure --with-cc=cl --builddir=objs --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 --http-client-body-temp-path=temp/client_body_temp \ 
    --http-proxy-temp-path=temp/proxy_temp \ 
    --http-fastcgi-temp-path=temp/fastcgi_temp \ 
    --with-cc-opt=-DFD_SETSIZE=1024 \ 
    --with-select_module \ 
    --with-debug \ 
    --with-http_ssl_module \ 
    --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2l \ 
    --add-module=../nginx-rtmp-module-1.1.11 

  4. 此時執行該批次檔,稍稍等待幾秒鐘,會出現nginx配置完成的資訊。 
     
    這裡會發現有一個異樣的提示,auto/cc/msvc: line 117: [: : integer expression expected ,只要修改檔案 $nginx源碼目錄\auto\cc\msvc 即可,在 echo " + cl version: $NGX_MSVC_VER" 的前面加入一行 NGX_MSVC_VER=15.00 ,當然不修改也不會影響後續的編譯。 
    如果需要指定後續編譯nginx時禁用最佳化,則將其中的 CFLAGS="$CFLAGS -O2"修改為 CFLAGS="$CFLAGS -Od" 。 

    到這裡為止,msys的使命就完成了。

  5. 開啟Visual Studio 2008 命令提示,在命令提示字元中進入到nginx源碼目錄,執行命令 nmake /f objs\MakeFile ,會發現編譯報錯。 

    此時,之前安裝的NASM就該登場了。 
    開啟檔案 $nginx源碼目錄\auto\lib\openssl\makefile.msvc,將其中的 
    ms\do_ms 
    修改為 
    ms\do_nasm 
    然後,刪除openssl源碼目錄中的out32和tmp32兩個臨時目錄,重新啟動Visual Studio 2008 命令提示,再次執行前面的第五步就可以了。

  6. 成功編譯之後,最終會有以下列印資訊,並且在nginx源碼目錄的objs目錄中可以看到最終產生的nginx.exe檔案。 

nginx-rtmp環境搭建
  1. 可以在msys的根目錄 / 下建立一個nginx目錄,然後將產生的nginx.exe,nginx源碼目錄下的conf目錄以及docs目錄下的html目錄都拷貝到目前的目錄,並手動建立logs和temp兩個目錄,形成最終的目錄結構。 

  2. 隨後修改conf/nginx.conf,關於如何配置和修改不在本文範疇內,so,略過~。 
    在當前nginx目錄中,啟動windows命令列,運行 start /b nginx.exe -c conf\nginx.conf 這樣nginx服務就在後台啟動了。在瀏覽器中輸入地址進入到nginx服務的首頁,如果可以看到如下內容,說明整個環境已經OK,接下來可以使用推流和拉流看看實際效果了。最後使用命令 nginx.exe -s stop 優雅地終止nginx服務。 

效果測試

接下來的效果測試,對環境稍微做了一點點改動,使用nginx-rtmp-module中提供的JWPlayer的Play頁面進行拉流或者Record頁面進行推流。

  1. 首先是在nginx/html/目錄下建立一個檔案夾 nginx-rtmp-module,將之前解壓的nginx-rtmp-module-1.1.11目錄下的stat.xsl檔案以及test檔案夾拷貝到建立的目錄nginx-rtmp-module下。

  2. 修改nginx/html/nginx-rtmp-module/test/nginx.conf檔案,關閉nginx的守護和master-worker模式,由於本機有SVN佔據了80連接埠,所以修改http的服務連接埠為8080,同時將nginx服務的訪問目錄修改為剛才nginx-rtmp-module中指向的index檔案。再加入RTMP模組的配置,最終的設定檔內容如下:

    worker_processes  1;daemon off;master_process off;error_log  logs/error.log info;events {    worker_connections  1024;}rtmp {    server {        listen 1935;        application live {            live on;        }    }}http {    server {        listen      8080;        location /stat {            rtmp_stat all;            rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl {            root html/nginx-rtmp-module/;        }        location /control {            rtmp_control all;        }        location /rtmp-publisher {            root html/nginx-rtmp-module/test;        }        location / {            root html/nginx-rtmp-module/test/www;        }    }}
  3. 配置拉流名字,修改nginx/html/nginx-rtmp-module/test/www/index.html檔案,將 
    file: "rtmp://localhost/myapp?carg=1/mystream?sarg=2" 修改為 
    file: "rtmp://localhost/live?carg=1/test?sarg=2" 以保持和上面的設定檔一致。

  4. 配置推流名稱,修改nginx/html/nginx-rtmp-module/test/www/record.html檔案,將開始的 
    ‘streamer‘: ‘rtmp://localhost/myapp‘, 修改為 
    ‘streamer‘: ‘rtmp://localhost/live‘ 以保持和上面的設定檔一致。

  5. 在msys下進入nginx目錄,執行 nginx.exe -c html/nginx-rtmp-module/test/nginx.conf & nginx服務會在後台運行。 

  6. 推流,推流的手段有很多,此處使用ffmpeg將本地的檔案流化並推到nginx服務。 
    ffmpeg -re -i "F:\TDDownload\BBC記錄片\BBC理查德哈蒙德:看不見的世界BD中字-cd1.mkv" -vcodec copy -f flv rtmp://192.168.100.2/live/test 

  7. 拉流,拉流方式也很多,瀏覽器中開啟nginx服務的首頁面192.168.100.2:8080,可以看到出現的視頻播放視窗,點擊Play即可拉流,此時的流地址就是上面配置好的rtmp://192.168.100.2/live/test ,也可在SRS播放器頁面 
    輸入資料流地址rtmp://192.168.100.2/live/test 拉流,還可利用 ffplay rtmp://192.168.100.2/live/test 拉流。 

  8. 開啟nginx服務的統計頁面192.168.100.2:8080/stat也可以看到當前的服務運行狀態。 

  9. 使用JWPlayer的Record頁面採集網路攝影機和麥的資料推流到nginx服務,在SRS播放器頁面拉流,由於前面配置的Record頁面推流的名字是mystream,所以此處輸入 rtmp://192.168.100.2/live/mystream。 

最後說明

本來還試著在移動端試試播放效果,不過JWPlayer貌似是不支援直接在html頁面進行rtmp直播,不過可以下載一個app(易推流)進行rtmp的直播測試。

有關nginx-rtmp伺服器的搭建過程到此就算全部完成了,在此過程中當然也不全是靠我自己的摸索,也參考了前輩或同行的經驗,在此感謝那些曾經的貢獻者,參考資料如下:

http://blog.csdn.net/felixking/article/details/51981794 
http://nginx.org/en/docs/howto_build_on_win32.html

windows下搭建nginx-rtmp伺服器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.