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

背景介紹


本文使用的流媒體服務器的搭建是基于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 #修改配置文件


上下文 http > server


上下文 rtmp > server

重啟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左右的延遲,不知道到家是怎么解決這個問題的。

說明:本文是借用網絡上現有的技術文檔,在實際操作中增加了一部分自己遇到的問題的總結!不足之處留言一起交流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。