背景介紹
本文使用的流媒體服務器的搭建是基于rtmp(Real Time Message Protocol)協議的,rtmp協議是應用層的協議,要依靠底層的傳輸層協議,比如tcp協議來保證信息傳輸的可靠性。最后提供了一個不錯的測試方案。流媒體服務器依賴的服務。
1,nginx 服務器;
2,nginx服務器安裝需要依賴的服務 OpenSSL、pcre、zlib、 c++、gcc等。服務器環境是Centos7.2 64 位,本地操作系統 win7 旗艦版。
注意事項
需要資源:
1,一臺云服務器;
2,一臺能上網的電腦需要注意的是本機搭建使用的是Centos 7.X的版本,iptables命令等使用方式有變動,如需修改參照。
3,修改防火墻操作方式由于本機上先安裝的Apache,而nginx和Apache都是默認的80端口,所以防止沖突本文修改了nginx的默認端口。
安裝nginx
首先需要注意的是雖然nginx可以使用yum安裝,但是yum安裝使用的都是編譯后的文件進行安裝,并且后面所需要的rtmp模塊一般在yum源里面是找不到的,所以要想將rtmp也安裝進來,我們選擇源碼安裝,經過步驟配置,編譯,安裝。本文是使用nginx源碼,自行編譯安裝。首先是下載源碼,由于nginx的代碼是開源托管在github上,我們先用yum 將git下載下來,然后使用git將源碼從github上clone下來
開始
cd
mkdir source #創建源碼目錄 后面的源碼都放在這個目錄
cd source
yum -y install git #安裝git
git clone https://github.com/nginx/nginx.git????#從github服務器上將nginx的源代碼下載下來
git clone https://github.com/arut/nginx-rtmp-module.git????#將rtmp模塊的源碼下載下來,我采用的是nginx-http-flv-module-master模塊,里面包含nginx-rtmp-module的所有功能。
下載依賴模塊源碼pcre、OpenSSL、zlib 如果機器上已經安裝了這些模塊就不需要了。
rpm -qa|grep 模塊名字 #查詢安裝的模塊的包信息
wget https://www.openssl.org/source/openssl-1.1.0.tar.gz #下載OpenSSL源碼包
wget https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz #下載pcre源碼包
wget http://www.zlib.net/zlib-1.2.11.tar.gz #下載zlib包源碼
tar -zxvf 包名 #解壓各個包源碼。
找到nginx源碼包中 configure 所在的目錄,以下腳本就是基于configure來實現的,在本機上configure 命令就在auto 目錄下,當前目錄 /root/source/nginx 就在這個目錄下編寫腳本vi config.sh 加入以下內容。
新建文件 touch config.sh? ?然后vim 編輯內容。
./auto/configure --prefix=/usr/local/nginx \
? ? ? ? --with-pcre=../pcre-8.39 \
? ? ? ? --with-openssl=../openssl-1.1.0 \
? ? ? ? --with-zlib=../zlib-1.2.11 \
? ? ? ? --with-http_v2_module \
? ? ? ? --with-http_flv_module \
? ? ? ? --with-http_mp4_module \
? ? ? ? --add-module=../nginx-http-flv-module-master/? ? ?#這里如果你是用的另個模塊,請填寫另一個模塊文件夾名稱
chmod 777 config.sh 賦予最高權限。
chmod u+x config.sh 添加執行權限。
./config.sh #執行腳本?這里操作了切記 cd 到根目錄,重新進入,否則可能找不到這個文件。
檢查配置沒有問題
yum -y install gcc #確保依賴的gcc安裝
yum -y install gcc-c++ #確保依賴的c++已經安裝make #編譯
顯示如下則編譯成功
make install #安裝
同樣需要?
1,云服務器控制臺對相應的端口開放;
2,并且Linux機器對默認端口80開放(如果想修改默認端口自行百度),由于本機80端口被Apache 服務器占用了,所以將nginx默認端口改為8084。
3,這里有個前提:關閉防火墻。
? ??systemctl stop firewalld 關閉防火墻
????yum install iptables-services 安裝或更新服務
? ??再使用 systemctl enable iptables 設置開機啟動
? ? 打開 systemctl start iptables
? ??iptables -L 查看端口
4,回到第二步驟,接著
? ??iptables -I INPUT -p tcp -m state --state NEW --dport 8084 -j ACCEPT #放行8084端口的 NEW狀態請求(本機的RELATED,ESTABLISHED狀態是默認放行的)
service iptables save #保存規則
service iptables restart #重啟防火墻保證新的規則加載進來
配置信息NGINX
在nginx配置文件中配置rtmp服務,記住rtmp服務是和http服務是平級的,所以我們需要在和http配置平級的位置另起rtmp服務。
vi /usr/local/nginx/conf/nginx.conf #修改配置文件
重啟nginx?
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
如遇到報錯:nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
先執行?/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 再執行上面步驟。
瀏覽器訪問 http://ip:8084
設置推流端口
iptables -I INPUT -p tcp -m state --state NEW --dport 1935 -j ACCEPT #放行1935端口的 NEW狀態請求
service iptables save #保存規則
service iptables restart #重啟防火墻保證新的規則加載進來
由于nginx服務我們已經配置過1935端口,所以是放行狀態的,我們可以在windows本地使用telnet 命令測試端口是否通
如果出現一下界面說明端口已經通了?
使OBS推流
OBS(Open Broadcaster Software) 是以互聯網流媒體直播內容為目的免費和開放源碼軟件。需要下載這個軟件,借助這個軟件進行推流,自行百度。
打開后我們需要有一個場景,并且在這個場景下有一個流的來源(可以是窗口,如果選的是視頻則會自動識別攝像頭),接下來就是設置了。
rtmp://你的服務器ip:端口(1935)/live_n?#URL填寫流的地址。
設置完成我們就可以 開始推流了,點擊開始串流。
拉流測試地址:
我這邊是采用的播放器(中級解碼,可以播放)。
本文用nginx作為服務器,使用rtmp協議簡述了的搭建了一個流媒體服務器的過程,并且描述了一個簡單的測試流程。其中調試端口的可用性,安裝過程服務的依賴處理,修改配置需要重啟服務,是常見的問題,需要特別注意。
對于新手來說,自己首次配置的時候也遇到了不少坑,自己摸索出來的。現在的問題是,個人配置了一臺帶寬10M的服務器,但是怎么配置都會出現20S左右的延遲,不知道到家是怎么解決這個問題的。
說明:本文是借用網絡上現有的技術文檔,在實際操作中增加了一部分自己遇到的問題的總結!不足之處留言一起交流。