近年來各大視頻直播平臺興起,直播技術也愈發(fā)成熟,作為一個程序員,秉著“折騰”精神自己搭建了一個直播用的流媒體服務器,現(xiàn)在來和大家分享一下搭建的過程。
準備:
操作系統(tǒng):CentOS 7
Web服務器:Nginx
版本控制器:Git
搭建:
大部分視頻直播平臺使用的協(xié)議都是RTMP,Nginx也有RTMP的擴展模塊,所以我也選用RTMP進行服務器的搭建。
1.獲取nginx-rtmp-module模塊擴展
1.1.nginx-rtmp-module的Git地址是https://github.com/arut/nginx-rtmp-module.git,直接獲?。?/p>
git clone https://github.com/arut/nginx-rtmp-module.git
2.安裝Nginx
2.1.下載Nginx
wget http://nginx.org/download/nginx-1.15.7.tar.gz
2.2.解壓
tar -zxvf nginx-1.15.7.tar.gz
2.3.編譯并安裝
cd nginx-1.15.7
./configure --prefix={Nginx安裝路徑} --add-module={nginx-rtmp-module的路徑} --with-http_ssl_module
make && make install編譯安裝過程中可能會出錯,一般錯誤都是缺少一些組件,根據報錯信息使用 yum install 進行安裝。
3.配置Nginx
3.1.修改Nginx配置
vim {Nginx安裝路徑}/conf/nginx.conf打開Nginx配置文件,加入如下部分:
rtmp {
server {
listen 1935; #監(jiān)聽的端口
chunk_size 4000; #流整合的最大的塊大小,這個值設置的越大 CPU 負載就越小
#增加對hls的支持
application hls { #rtmp推流請求路徑
live on; #開啟實時
hls on; #開啟hls
hls_path /usr/share/nginx/html/hls; #推流文件保存的路徑,要有寫入權限
hls_fragment 5s; # 每個文件包含5秒的視頻內容
}
}
}Nginx中RTMP模塊配置的更多參數可以參考官方文檔,到這里Nginx的配置已經完成并且加入了RTMP模塊的擴展。
4.啟動Nginx
{Nginx安裝路徑}/sbin/nginx -c {Nginx安裝路徑}/conf/nginx.conf使用瀏覽器訪問服務器,如果出現(xiàn)以下畫面表示Nginx成功啟動。

推流
1.選擇推流軟件
1.1.PC推薦使用OBS進行推流,蘋果手機推薦使用易推流APP,安卓也有許多免費的推流SDK,大家自行選擇,下面使用OBS進行測試。
1.2.OBS官網:https://obsproject.com/,大家根據自己的系統(tǒng)進行選擇下載安裝。
2.進行OBS配置

2.1.服務器輸入 協(xié)議://IP:端口/文件夾,如:rtmp://127.0.0.1/hls
2.2.流密鑰 隨意輸入,推流后生成的文件名稱根據輸入的流密鑰生成
2.3.填寫完成點擊下一步進行測試,如果填寫無誤即可進行推流。
2.4.OBS的具體使用方法這里不做介紹了,添加相應場景和來源,點擊開始推流。

2.5.登陸服務器,進入hls文件夾,如果有相應文件則表示推流成功,其中.ts 文件為視頻片段,.m3u8文件為前端播放的文件。
播放
1.編輯HTML文件,使用video標簽進行播放
1.1.由于.m3u8文件是蘋果公司定義的用于直播的一種流媒體傳輸協(xié)議HLS下的視頻文件索引,要在其他系統(tǒng)下播放需要引入video.js和videojs-contrib-hls.js
1.2.編輯HTML文件
<video muted id = "example-videl" width = 1100 height = 600 class = "video-js vjs-default-skin" controls>
<!-- source標簽中src為服務器中hls文件路徑 -->
<source src = "http://XXX.XXX.XX.XX/hls/test.m3u8" type = "application/x-mpegURL">
</video>
<!-- 以下js和css文件我直接引用的cdn,大家可以下載到服務器并引用 -->
<link href = "https://vjs.zencdn.net/7.3.0/video0js.css" rel = "stylesheet">
<script src = "https://unpkg.com/video.js@7.3.0/dist/video.js"></script>
<script src = "https://cdn.bootcss.com/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>
<script>
var player = videojs("#example-video");
player.play();
</script>1.3.使用瀏覽器訪問HTML文件,由于我使用的是阿里云服務器乞丐版,帶寬只有1M,所以直播會有一定的延遲,我們來看下效果。

結語
總體來說搭建一個流媒體服務器并沒有想象中的復雜,但是要深入了解其中的原理還需要下一些功夫。
