背景介紹
本文使用的流媒體服務器的搭建是基於rtmp(Real Time Message Protocol)協議的,rtmp協議是應用層的協議,要依靠底層的傳輸層協議,比如tcp協議來保證信息傳輸的可靠性。最后提供了一個不錯的測試方案。
流媒體服務器依賴的服務,1.nginx 服務器;2.nginx服務器安裝需要依賴的服務 OpenSSL、pcre、zlib、 c++、gcc等。
服務器環境是Centos 7.3 64 位,本地操作系統 win7 旗艦版
注意事項
需要資源:1.一台雲服務器;2.一台能上網的電腦
需要注意的是本機搭建使用的是Centos 7.X的版本,iptables命令等使用方式有變動,如需修改參照3.I 中修改防火牆操作方式
由於本機上先安裝的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模塊的源碼下載下來
下載依賴模塊源碼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包源碼
/pre>
tar -zxvf 包名 #解壓各個包源碼
附一張目錄結構圖

找到nginx源碼包中 configure 所在的目錄,以下腳本就是基於configure來實現的,在本機上configure 命令就在auto 目錄下,當前目錄 /root/source/nginx 就在這個目錄下編寫腳本vi config.sh 加入以下內容
./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-rtmp-module/
保存后給文件賦予操作權限,再執行
chmod 777 config.sh #賦予權限
./config.sh #執行腳本
檢查配置沒有問題

yum -y install gcc #確保依賴的gcc安裝
yum -y install gcc-c++ #確保依賴的c++已經安裝
make #編譯
顯示如下則編譯成功

make install #安裝
安裝成功

同樣需要 1.雲服務器控制台對相應的端口開放;2.並且Linux機器對默認端口80開放(如果想修改默認端口自行百度),由於本機80端口被Apache 服務器占用了,所以將nginx默認端口改為8084
iptables -I INPUT -p tcp -m state --state NEW --dport 8084 -j ACCEPT #放行8084端口的 NEW狀態請求(本機的RELATED,ESTABLISHED狀態是默認放行的)
service iptables save #保存規則
service iptables restart #重啟防火牆保證新的規則加載進來

測試nginx是否安裝成功 ip:port 如果出現以下界面說明安裝成功

配置rtmp
在nginx配置文件中配置rtmp服務,記住rtmp服務是和http服務是平級的,所以我們需要在和http配置平級的位置另起rtmp服務
vi /usr/local/nginx/conf/nginx.conf #修改配置文件
在配置文件末尾加入以下內容(括號嵌套切記不要弄混)
# rtmp config
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
application live2 {
live on;
record off;
}
application vod {
play /var/flvs;
}
application vod_http {
play http://服務器的ip/vod;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
}
}
/usr/local/nginx/sbin/nginx -s reload #修改配置文件重啟nginx服務
測試rtmp端口是否通
端口放行需要有三個條件,1.雲服務的安全組放行;2.防火牆iptables放行;3.服務本身放行
安全組
登錄雲服務器控制台進行設置

防火牆
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 #URL填寫流的地址

設置完成我們就可以 開始推流了
拉流測試地址
推薦一個拉流的測試地址,里面針對各種協議都能測試拉流測試,需要注意圖中幾個地方,由於我們使用的rtmp協議,我們選擇這一欄,底下填寫我們推流的地址和我們在上面obs的設置里面配置的流的名稱,start, ok搞定!!!!

總結
本文用nginx作為服務器,使用rtmp協議簡述了的搭建了一個流媒體服務器的過程,並且描述了一個簡單的測試流程。其中調試端口的可用性,安裝過程服務的依賴處理,修改配置需要重啟服務,是常見的問題,需要特別注意。
筆者也是第一次搭建,不足之處,歡迎留言,一起交流!