mac搭配Nginx服務器常見問題


推流服務器主要是使用了開源的nginx和rtmp模塊,網上也有很多資料,不過對有些可能出現的問題沒有很好的總結。

安裝brew

使用Mac進行開發很久的老司機應該對這個工具很熟悉了。brew是一個第三方的軟件的管理工具。基於Ruby語言。若你的Mac已經安裝,則跳過該步驟吧。 
具體安裝如下

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 1

安裝nginx模塊

執行如下命令

brew tap homebrew/nginx
  • 1

好的,麻煩來了,如果不是root用戶的話。肯定會出現權限錯誤的問題 
錯誤如下

fatal: could not create work tree dir '/usr/local/Library/Taps/homebrew/homebrew-nginx'.: Permission denied Error: Failure while executing: git clone https://github.com/Homebrew/homebrew-nginx /usr/local/Library/Taps/homebrew/homebrew-nginx --depth=1
  • 1
  • 2

這個時候可能覺得加一個sudo就好了。有的電腦確實可以,不過這個似乎是brew的一個bug。對文件夾的的權限做一下修改就好。讓當前用戶對/usr/local有讀寫權限。

sudo chown -R $USER /usr/local
  • 1

安裝rtmp模塊

安裝rtmp也是只需要使用如下命令就好了

brew install nginx-full --with-rtmp-module
  • 1

如果不幸的話,到這一步錯誤又來了。看log同樣是權限的問題

==> Installing nginx-full from homebrew/nginx Error: Permission denied - /Library/Caches/Homebrew/Formula/nginx-full.brewing
  • 1
  • 2

同樣是文件夾權限的問題。修改文件夾的權限就可以

sudo chown -R ${USER} /Library/Caches/Homebrew/
  • 1

好的,權限問題解決了,繼續執行一下安裝的命令。不幸運的話錯誤又來了,錯誤的log如下:

curl: (35) Server aborted the SSL handshake Error: Failed to download resource "rtmp-nginx-module" Download failed: https://codeload.github.com/sergey-dryabzhinsky/nginx-rtmp-module/tar.gz/v1.1.7.10
  • 1
  • 2
  • 3

還好這個問題不常見,引起的原因是brew版本太低的原因,所以不支持https協議,所以需要升級一下brew。升級的命令如下

brew update
  • 1

好的,然后繼續執行安裝命令,開始安裝了,可是過了一會又不行了。錯誤如下:

curl: (7) Failed to connect to codeload.github.com port 443: Operation timed out Error: Failed to download resource "rtmp-nginx-module" Download failed: https://codeload.github.com/sergey-dryabzhinsky/nginx-rtmp-module/tar.gz/v1.1.7.10
  • 1
  • 2
  • 3

引起的原因是使用了一個PHP的依賴庫,然后被牆了,真是有意思。具體怎么解決,大家都知道了。

nginx配置

查看nginx相關信息

在啟動之前我們需要知道nginx安裝的目錄和目錄。 
執行如下命令

brew info nginx-full
  • 1

可能會輸出很多無用的信息,不過對我們真正比較有用的是==> Caveats后面的這一部分

Docroot is: /usr/local/var/www The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that nginx can run without sudo. nginx will load all files in /usr/local/etc/nginx/servers/. - Tips - Run port 80: $ sudo chown root:wheel /usr/local/Cellar/nginx-full/1.10.1/bin/nginx $ sudo chmod u+s /usr/local/Cellar/nginx-full/1.10.1/bin/nginx Reload config: $ nginx -s reload Reopen Logfile: $ nginx -s reopen Stop process: $ nginx -s stop Waiting on exit process $ nginx -s quit To have launchd start homebrew/nginx/nginx-full now and restart at login: brew services start homebrew/nginx/nginx-full Or, if you don't want/need a background service you can just run: nginx 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

從信息可以看到。nginx安裝的目錄為/usr/local/Cellar/nginx-full,nginx配置文件為/usr/local/etc/nginx/nginx.conf,nginx服務器根目錄所在位置為/usr/local/var/www

啟動nginx

執行如下命令即可啟動nginx

/usr/local/Cellar/nginx-full/1.10.1/bin/nginx
  • 1

打開瀏覽器輸入http://localhost:8080,如果顯示如下界面則說明安裝成功了。

配置nginx.conf文件

打開nginx.conf文件。在http節點后面配置:

rtmp {
    server {
        listen 1935; application joyseedog{ live on; record off; } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

application后面的名字自己可以做修改。 
然后重新加載一下nginx。如果沒有啟動nginx則可能會報錯,系統可能找不到進程。

/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload
  • 1

進行電腦端本地推流測試

電腦端我們使用推流我們可以通過ffmepg來進行。

安裝ffmepg

通過一個命令就可以安裝了,最好是提前准備好梯子。似乎有些組件也是下載不下來。

brew install ffmpeg
  • 1

通過ffmepg命令進行推流

推流的命令如下


ffmpeg -re -i /Users/jianquan/Movies/IMG_1111.MOV -vcodec copy -f flv rtmp://localhost:1935/joyseedog/room1
  • 1
  • 2

-i后面是自己視頻的地址,room1可以修改,joyseedog可以修改,不過需要和nginx.conf里面配置的一樣

查看推流結果

需要使用一個支持rtmp協議的播放軟件,在Mac上我們可以使用Vlc。google一下就可以找到安裝包。安裝結束后,打開vlc,點擊File—->Open Network 在彈出來的框中選擇Network然后輸入URL: 
然后就可以播放推出來的視頻了。 
效果如下: 
推流測試

手機端進行推流

手機端推流使用的是LiveVideoCoreSDK,github地址如下LiveVideoCoreSDK。 
我們只需要修改ViewController.m里面的rtmp地址為自己發Mac的推流地址即可實現推流

- (void)viewDidLoad { [super viewDidLoad]; [self UIInit]; _RtmpUrlTextField.text = @"rtmp://124.193.167.51:1935/joyseedog/room1"; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

必須使用真機進行測試,當手機端連接后,RTMP轉態變為已連接 
如圖 
手機連接成功 
我們可以打開終端,看看連接的情況,連接使用的是1935端口 
使用lsof -i:1935命令查看端口的具體連接情況;

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 17252 jianquan 7u IPv4 0xc5066a9dfda55bdb 0t0 TCP *:macromedia-fcs (LISTEN) nginx 17259 jianquan 3u IPv4 0xc5066a9e054077bb 0t0 TCP 10.2.48.21:macromedia-fcs->192.168.2.86:51553 (ESTABLISHED) nginx 17259 jianquan 7u IPv4 0xc5066a9dfda55bdb 0t0 TCP *:macromedia-fcs (LISTEN)
  • 1
  • 2
  • 3
  • 4

可以看到,10.2.48.21是服務器地址,192.168.2.86:51553手機的地址已經建立了TCP連接。同時還要兩個進程在監聽等待連接。 
同樣,我們可以使用VLC對推流視頻進行播放,需要注意的是,LiveVideoCoreSDK里面的IP地址不能寫localhost,但是在Mac上的rtmp進行播放測試時候,寫IP地址或是localhost都是可以的。

會有3秒左右的延遲,具體效果如下: 
手機推流

點擊退出后再次查看端口:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 17252 jianquan 7u IPv4 0xc5066a9dfda55bdb 0t0 TCP *:macromedia-fcs (LISTEN) nginx 17259 jianquan 7u IPv4 0xc5066a9dfda55bdb 0t0 TCP *:macromedia-fcs (LISTEN)
  • 1
  • 2
  • 3

可以看到建立的TCP連接已經斷開,剛才的連接已經不在了。

總結

本文在前人的基礎上,實踐並總結了Mac搭建推流服務器,並使用本地推流和第三方框架LiveVideoCoreSDK在iOS設備上對推流服務器進行了測試。該推流服務器不可直接用於工業生產中,不過對於iOS程序員自己測試推流功能會有一定幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM