介紹
本文使用阿里雲服務器搭建,基於rtmp(Real Time Message Protocol)協議的,以OBS爲推流載體,在VLC播放器上實現直播功能。初步實踐,如有遺漏或錯誤請留言。
流媒體服務器依賴的服務,1.nginx 服務器;2.nginx服務器安裝需要依賴的服務 OpenSSL、pcre、zlib、 c++、gcc等。
服務器環境是Centos 7.3 64 位,本地操作系統 win10 旗艦版
注意事項
需要資源:1.一臺雲服務器;2.一臺能上網的電腦
需要注意的是本機搭建使用的是Centos 7.X的版本,iptables命令等使用方式有變動,如需修改參照下面的方法修改防火牆操作方式
由於本機上先安裝的Apache,而nginx和Apache都是默認的80端口,所以防止衝突本文修改了nginx的默認端口
安裝nginx
首先需要注意的是雖然nginx可以使用yum安裝,但是yum安裝使用的都是編譯後的文件進行安裝,並且後面所需要的rtmp模塊一般在yum源裏面是找不到的,所以要想將rtmp也安裝進來,我們選擇源碼安裝,經過步驟配置,編譯,安裝。
本文是使用nginx源碼,自行編譯安裝。首先是下載源碼,由於nginx的代碼是開源託管在github上,我們先用yum 將git下載下來,然後使用git將源碼從github上clone下來
步驟如下:
創建源碼目錄
cd /root #進入到此路徑下(千萬不能在其他路徑,權限問題會有影響)
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
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 命令就在nginx/auto 目錄下,在/root/source/nginx這個目錄下編寫腳本。
vim config.sh #腳本內容如下:
#!/bin/sh
./auto/configure --prefix=/usr/local/source/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/
命令模式下也就是按esc後使用shift+zz保存後,給文件賦予操作權限,再執行。
chmod 777 config.sh #賦予權限
./config.sh #執行腳本
檢查配置沒有問題
yum -y install gcc #確保依賴的gcc安裝
yum -y install gcc-c++ #確保依賴的c++已經安裝
make #編譯
顯示如下則編譯成功
make install #安裝
看到以上截圖就是編譯成功
改變防火牆模式
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是否安裝成功 ip:port 如果出現以下界面說明安裝成功
配置RTMP
在nginx配置文件中配置rtmp服務,記住rtmp服務是和http服務是平級的,所以我們需要在和http配置平級的位置另起rtmp服務
vim /usr/local/source/nginx/conf/nginx.conf #修改配置文件
注意:此處的nginx是bash腳本里面的nginx路徑
在配置文件末尾加入以下內容(括號嵌套切記不要弄混)
# 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/source/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文件
設置完成我們就可以 開始推流了
拉流測試
下載VLC播放器
桌面捕獲成功
黑屏問題:
如果OBS出現添加顯示器捕獲後,黑屏狀態。解決辦法如下:
1、桌面圖標右鍵屬性
若還是出現黑屏再使用如下方法:
總結:
本文用Nginx作爲服務器,使用rtmp協議簡述了阿里雲上搭建流媒體服務器的過程,並且描述了vlc拉流測試的流程。其中調試端口的可用性,安裝過程服務的依賴處理,修改配置後需要重啓服務,是常見的問題,需要特別注意。