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

java06051515發表於2018-11-22

軟體定位

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。

  [ dc2 - user @ 10 - 254 - 81 - 196  ~ ]$   git  clone   https : //github.com/ossrs/srs

  [ dc2 - user @ 10 - 254 - 81 - 196  ~ ]$   cd  srs / trunk

第二步 ,編譯 SRS。

  [ dc2 - user @ 10 - 254 - 81 - 196   trunk ]$   . / configure  &&  make

第三步 ,編寫 SRS 配置檔案。

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

第四步 ,啟動SRS。

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

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

  • 獲取 FFMPEG

  [ dc2 - user @ 10 - 254 - 81 - 196  ~ ]$   git  clone   https : //git.ffmpeg.org/ffmpeg.git ffmpeg

  [ dc2 - user @ 10 - 254 - 81 - 196  ~ ]$   cd  ffmpeg

  • 編譯 FFMPEG

  [ dc2 - user @ 10 - 254 - 81 - 196   ffmpeg ]$. / configure  &&  make

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

  • 使用 FFMPEG推流

  [ dc2 - user @ 10 - 254 - 81 - 196   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)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2220944/,如需轉載,請註明出處,否則將追究法律責任。

相關文章