1. 程式人生 > >基於SRS搭建RTMP直播流媒體伺服器

基於SRS搭建RTMP直播流媒體伺服器

軟體定位

SRS 定位是運營級的網際網路直播伺服器叢集,追求更好的概念完整性和最簡單實現的程式碼。

  • 運營級:商業運營追求極高的穩定性、良好的系統對接、錯誤排查和處理機制。譬如日誌檔案格式、reload、系統 HTTP 介面、提供 init.d 指令碼、轉發、轉碼和邊緣回多源站,都是根據 CDN 運營經驗作為判斷這些功能作為核心的依據。
  • 網際網路:網際網路最大的特徵是變化,唯一不變的就是不斷變化的客戶要求,唯一不變的是基礎結構的概念完整性和簡潔性。網際網路還意味著參與性,聽取使用者的需求和變更,持續改進和維護。
  • 直播伺服器:直播和點播這兩種截然不同的業務型別,導致架構和目標完全不一致,從運營的裝置組,到應對的挑戰都完全不同。兩種都支援只能說明沒有重心或者低估了代價。
  • 叢集:FMS(AMS) 的叢集還是很不錯的,雖然運營容錯很差。SRS 支援完善的直播叢集,Vhost 分為源站和邊緣,容錯支援多源站切換、測速、可追溯日誌等。
  • 概念完整性:雖然程式碼甚至結構都在變化,但是結構的概念完整性是一直追求的目標。SRS 伺服器、P2P、ARM 監控產業、MIPS 路由器,伺服器監控管理、ARM 智慧手機,SRS 的規模不再是一個伺服器而已。

軟體應用

  • 搭建大規模 CDN 叢集,可以在 CDN 內部的源站和邊緣部署 SRS。
  • 小型業務快速搭建幾臺流媒體叢集,譬如學校、企業等,需要分發的流不多,同時 CDN 覆蓋不如自己部署幾個節點,可以用 SRS 搭建自己的小叢集。
  • SRS 作為源站,CDN 作為加速邊緣叢集。比如推流到 CDN 後 CDN 轉推到源站,播放時 CDN 會從源站取流。這樣可以同時使用多個 CDN。同時還可以在源站做 DRM 和 DVR,輸出 HLS,更重要的是如果直接推 CDN,一般 CDN 之間不是互通的,一個 CDN 出現故障無法快速切換到其他 CDN。
  • 編碼器可以整合 SRS 支援拉流。一般編碼器支援推 RTMP/UDP 流,如果整合 SRS 後,可以支援多種拉流。
  • 協議轉換閘道器,比如可以推送 FLV 到 SRS 轉成 RTMP 協議,或者拉 RTSP 轉 RTMP,還有拉 HLS 轉 RTMP。SRS 只要能接入流,就能輸出能輸出的協議。
  • 學習流媒體可以用 SRS。SRS 提供了大量的協議的文件、wiki 和文件對應的程式碼、詳細的 issues、流媒體常見的功能實現,以及新流媒體技術的嘗試等。

軟體對比

與其他媒體軟體對比。

Stream Delivery

Feature SRS NGINX CRTMPD FMS WOWZA
RTMP Stable Stable Stable Stable Stable
HLS Stable Stable X Stable Stable
HDS Experiment X X Stabl Stable
HTTP FLV Stable X X X X
HLS(aonly) Stable X X Stable Stable
HTTP Server Stable Stable X X Stable

Cluster

Feature SRS NGINX CRTMPD FMS WOWZA
RTMP Edge Stable X X Stable X
RTMP Backup Stable X X X X
VHOST Stable X X Stable Stable
Reload Stable X X X X
Forward Stable X X X X
ATC Stable X X X X

Stream Service

Feature SRS NGINX CRTMPD FMS WOWZA
DVR Stable Stable X X Stable
Transcode Stable X X X Stable
HTTP API Stable Stable X X Stable
HTTP hooks Stable X X X X
GopCache Stable X X Stable X
Security Stable Stable X X Stable
Token Traverse Stable X X Stable X

軟體部署

基於滴滴雲DC2(IP:116.85.57.94)進行軟體部署。

第一步,獲取 SRS。詳細參考

[[email protected] ~]$ git clone https://github.com/ossrs/srs
[[email protected] ~]$ cd srs/trunk

第二步,編譯 SRS。詳細參考

[[email protected] trunk]$ ./configure && make

第三步,編寫 SRS 配置檔案。詳細參考

將以下內容儲存為檔案 conf/srs.conf,伺服器啟動時指定該配置檔案 (srs 的 conf 資料夾中有該檔案)。

# conf/srs.conf
listen              888;
#預設埠為1935,由於滴滴雲DC2安全組策略問題,選擇已開放的埠888測試
max_connections     1000;
srs_log_file        ./objs/srs.log;
vhost stream.didi.com {
}

第四步,啟動SRS。

[[email protected] trunk]$ ./objs/srs -c conf/srs.conf
[2018-11-19 16:27:38.271][trace][11904][0] XCORE-SRS/2.0.258(ZhouGuowen)
[2018-11-19 16:27:38.271][trace][11904][0] config parse complete
[2018-11-19 16:27:38.271][trace][11904][0] write log to file ./objs/srs.log
[2018-11-19 16:27:38.271][trace][11904][0] you can: tailf ./objs/srs.log
[2018-11-19 16:27:38.271][trace][11904][0] @see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLog

第五步,啟動推流編碼器。

Linux 系統下可以使用 FFMPEG 進行推流;Windows/Ios 系統下可選擇 OBS 進行推流。(本文我們使用 FFMPEG 進行推流演示)

  • 獲取 FFMPEG
[[email protected] ~]$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
[[email protected] ~]$ cd ffmpeg
  • 編譯 FFMPEG
[[email protected] ffmpeg]$./configure && make

如果編譯失敗,請根據提示內容安裝依賴環境或忽略。

  • 使用 FFMPEG推流
[[email protected] ffmpeg]$./ffmpeg -re -i ../test.mp4  -f flv -y rtmp://116.85.57.94:888/live?vhost=stream.didi.com/teststream

第六步,觀看直播流。

RTMP 播放地址為:rtmp://116.85.57.94:888/live?vhost=stream.didi.com/teststream
(若域名可被公網解析,播放地址為:rtmp://stream.didi.com:888/live/teststream)