1. 程式人生 > >從零搭建流媒體伺服器+obs推流直播

從零搭建流媒體伺服器+obs推流直播

背景介紹

本文使用的流媒體伺服器的搭建是基於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包原始碼
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 如果出現以下介面說明安裝成功
nginx配置成功

配置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 命令測試埠是否通

telnet測試埠

如果出現一下介面說明埠已經通了
這裡寫圖片描述

使OBS推流

OBS(Open Broadcaster Software) 是以網際網路流媒體直播內容為目的免費和開放原始碼軟體。需要下載這個軟體,藉助這個軟體進行推流(電腦沒有攝像頭的貌似安裝不了。。。)

就長這個樣子
這裡寫圖片描述

開啟後我們需要有一個場景,並且在這個場景下有一個流的來源(可以是視窗,如果選的是視訊則會自動識別攝像頭),接下來就是設定了

這裡寫圖片描述

在配置中最需要關注的就是流的配置了,由於是自建的流媒體伺服器所以我們照這樣配置

rtmp://你的伺服器ip:埠(1935)/live #URL填寫流的地址

這裡寫圖片描述

設定完成我們就可以 開始推流了

拉流測試地址

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

這裡寫圖片描述

總結

本文用nginx作為伺服器,使用rtmp協議簡述了的搭建了一個流媒體伺服器的過程,並且描述了一個簡單的測試流程。其中除錯埠的可用性,安裝過程服務的依賴處理,修改配置需要重啟服務,是常見的問題,需要特別注意。

筆者也是第一次搭建,不足之處,歡迎留言,一起交流!