整體步驟如下:
1. 安裝nginx-rtmp-module鞍历。
2. 修改nginx配置肄渗,普通推拉流設置和權限驗證推拉流設置
3. 使用ffmpeg測試推流擎颖,使用vlc測試拉流
整個過程中,我會把遇到的坑都重點說一下偎肃。因為我自己是從零搭建起科吭,遇到了不少坑昏滴。
第一步,安裝nginx-rtmp-module
這里我主要講macos環(huán)境配置对人,其他Linux和Windows環(huán)境大家各自百度谣殊。在macos遇到的坑,可以借鑒下牺弄。
建議全程開啟VPN安裝姻几。否則安裝會非常慢
1.先安裝brew,如果本機已安裝,則跳過本步驟.安裝教程詳見官網https://brew.sh/蛇捌。
2.使用brew安裝nginx-rtmp-module抚恒,過程如下:
開始我百度的是舊版安裝nginx教程,是使用brew在命令行敲入 brew install nginx, 但是這樣是不對的络拌。又找了較新的安裝教程俭驮,安裝完發(fā)現不兼容。需要把剛才錯誤的方式安裝的nginx給卸載春贸。當然最好還是第一遍直接安裝對了混萝。如果本機之前使用老的安裝方式,請先卸載祥诽。
打開終端譬圣,挨個輸入如下命令:
命令1:brew tap denji/nginx
命令2:brew install nginx-full --with-rtmp-module
第二步,修改nginx配置雄坪。實現簡單推流或拉流的驗證
macos系統(tǒng)nginx配置路徑為:/usr/local/etc/nginx/nginx.conf
建議定位到這個路徑,直接使用vscode打開編輯屯蹦,或者其他文本編輯軟件维哈,當然也可以使用vi直接在命令行里面編輯。
1.普通推拉流配置如下:
在配置文件最后面登澜,注意不要放在在http的括號里阔挠,黏貼如下配置:
rtmp {
server {
listen 1935;
application live {
live on;
}
}
}
2.權限驗證推拉流配置如下:
nginx-rtmp-module默認不限制推流權限、播放權限脑蠕。如果想加入權限驗證购撼,有很多種方法。
下面先說一個最簡單的配置方法谴仙。
主要是利用on_play或on_publish跳轉到當前配置的一個“l(fā)ocation”迂求,在這里進行驗證。關鍵點在于rtmp application節(jié)點下面要配置“notify_method get;”為什么呢晃跺?因為跳轉的時候揩局,默認以POST方式傳輸參數,修改成GET方式掀虎,nginx配置里就可以輕松處理了凌盯。(當然nginx通過配置文件也可以處理post,只是復雜一些)烹玉。
在配置文件最后面驰怎,注意不要放在在http的括號里,復制粘貼如下配置:
rtmp {
server {
listen 1935;
notify_method get;
application live {
live on;
on_play http://127.0.0.1:8082/auth; #拉流驗證
on_publish http://127.0.0.1:8082/auth; #推流驗證
}
}
}
注意此處我是遇到了坑6颉县忌!
就是127.0.0.1不能寫成localhost, 否則使用ffmpeg推流會失敗!我各種百度都沒找到為啥芹枷,最后就隨便試了試改成ip了就好用了P聘怼!鸳慈!
另外還要在http的括號范圍內的最后下面饱溢,添加配置如下:
server {
listen 8082;
location /auth {
if ($arg_pwd = "123456") {
return 200;
}
return 404;
}
}
對于nginx也不了解的人,比如我自己走芋,一開始我都不知道其中arg_pwd的用法是啥绩郎,百度了才知道。
$arg_參數名翁逞,下劃線后面的參數名是表示url問號后面的參數名字肋杖。這么寫就能直接解析拿到參數,從而進行判斷挖函。
此處原理就是使用nginx相應處理on_play和on_publish配置的方法状植,只要處理成功返回2xx系列的狀態(tài)即可。一般返回200即可怨喘。如果驗證錯誤則直接返回404錯誤碼即可津畸。另外這是直接完全通過nginx處理,也可以指向別的服務器接口地址必怜,只要能夠正確驗證處理即可肉拓。
另外還有其他的兩種方法如下:
方法一:修改源碼如:
如何給 nginx rtmp 服務加入鑒權機制
http://blog.csdn.net/cui918/article/details/53540397
方法二:修改nginx配置如:
nginx-rtmp-module 權限控制
http://blog.csdn.net/iam_shuaidaile/article/details/50599943
配置好之后,可以啟動nginx看一下梳庆,啟動nginx也可能會遇到錯誤暖途,一般錯誤如下:
invalid number of arguments
nginx出現以下的錯誤,基本上錯誤的原因就是當前行少了后面的分號導致膏执,一定要寫分號驻售。
啟動nginx命令很簡單,直接在終端輸入:nginx 然后回車就好了胧后。
另外如果修改了配置表芋浮,重啟nginx命令如下:nginx -s reload
可以用瀏覽器輸入地址:http://localhost:8080/ 測試一下nginx是否啟動。
查看rtmp端口是否啟動壳快,終端輸入命令:netstat -an |grep 1935
第三步纸巷,配置FFmpeg實現推流。然后使用VLC播放器拉流連接眶痰。
1.安裝ffmpeg
直接在終端輸入命令:brew install ffmpeg
注意ffmpeg安裝依賴包不少瘤旨,如果設置了brew國內鏡像,不用開vpn也能比較快竖伯,沒有設置存哲,還是建議開啟vpn安裝因宇,能節(jié)約不少時間。
首先是ffmpeg普通推流命令祟偷,需要配置nginx為普通推拉流配置, 更改配置后請重啟nginx
推流一次命令:
ffmpeg -re -i /Users/wz/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/test
其中-i后面跟著的是要推流的視頻資源路徑察滑,flv后面跟著是nginx搭建的rtmp推流地址。地址最后的test名字隨便寫就好修肠。live就是剛才配置nginx的application后面的名字贺辰,注意這個命令是只把指定視頻資源推流一次。
循環(huán)推流命令:
ffmpeg -re -stream_loop -1 -i /Users/wz/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/test
相比推流一次嵌施,其實就是多了一個參數-stream_loop -1饲化,-1表示循環(huán)無限次,當然你可以指定循環(huán)自幾次吗伤,比如設置2吃靠,就是循環(huán)兩次。
其次是ffmpeg權限驗證推流命令足淆,需要nginx為權限驗證配置巢块,更改配置后請重啟nginx。
推流一次命令:
ffmpeg -re -i /Users/wz/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/test?pwd=123456
循環(huán)推流命令:
ffmpeg -re -stream_loop -1 -i /Users/wz/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/test?pwd=123456
可以看到rtmp連接相比普通推流只增加問號后的一些參數缸浦,和普通http連接參數一樣夕冲。多個參數用&隔開就好。
不過這里注意有個坑是:加上了問號裂逐,發(fā)現執(zhí)行命令報錯了!泣栈!出現了:"zsh: no matches found"的報錯卜高,遇到該錯誤我也是各種百度,最后找到解決方案如下:
1.找到~/.zshrc文件南片,在其中中加入:setopt no_nomatch
2.執(zhí)行 source ~/.zshrc
完全關閉終端掺涛,再打開重新輸入帶權限驗證的推流命令就可以成功了!
在輸入ffmpeg命令遇到上面提到的一個坑是nginx配置里疼进,on_play或on_publish配置地址的時候不能寫localhost薪缆,要寫成127.0.0.1的ip。否則會報錯如下:
RTMP_ReadPacket, failed to read RTMP packet header rtmp://localhost:1935/live/test?pwd=123456: Unknown error occurred
另外沒有嘗試過伞广,域名會不會有問題拣帽。如果有問題,建議直接換成對應域名的ip地址嚼锄。
到此為止搭建nginx-rtmp服務和使用ffmpeg推流已經完成减拭。
接下來可以使用VLC播放器播放一下rtmp的流地址了。如果電腦有其他播放器也可以使用別的播放器区丑。
VLC的官網地址是:https://www.videolan.org/
加了權限驗證的鏈接可以嘗試下不加密碼參數拧粪,應該會提示播放失敗修陡。
普通拉流地址:rtmp://127.0.0.1:1935/live/test
權限驗證拉流地址: rtmp://127.0.0.1:1935/live/test?pwd=123456