目前市面上有不少開源的流媒體服務器解決方案,常見的有SRS、EasyDarwin、ZLMediaKit和Monibuca等,咱們應該怎麼選擇呢?前端
今天這篇文章主要介紹SRS、EasyDarwin、ZLMediaKit和Monibuca的一些對比狀況,能夠做爲往後調研選型的參考文檔。linux
SRS目前已經更新到3.0,功能和穩定性較以前的版本都有很是大的提高,新入門的同窗能夠考慮直接從3.0上手。接下來,咱們從使用、配置、功能幾個方面介紹SRS。android
咱們本身能夠很是方便的搭建一套SRS服務器,具體的配置步驟以下:ios
1. 獲取源碼git
地址:github.com/ossrs/srsgithub
具體命令以下:web
git clone gitee.com/winlinvip/s… srs &&
cd srs/trunk && git remote set-url origin github.com/ossrs/srs.g… && git pulldocker
2. 編譯macos
./configure && makenpm
其中,configure文件是支持可配置的。
3. 運行
./objs/srs -c conf/srs.conf
其中,srs.conf文件是支持可配置的,針對不一樣功能模塊,還有單獨對應的配置文件。好比,rtmp模塊對應的配置文件是rtmp.conf。
另外,咱們還能夠直接運行現有的docker鏡像,命令:
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:3
SRS做爲當前很是廣泛的運營級解決方案,具有很是全面的功能,包括集羣、協議網關、CDN功能等,主要功能以下:
1. SRS定位是運營級的互聯網直播服務器集羣,追求更好的概念完整性和最簡單實現的代碼。
2. SRS提供了豐富的接入方案將RTMP流接入SRS, 包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。 SRS還支持將接入的RTMP流進行各類變換,譬如將RTMP流轉碼、流截圖、 轉發給其餘服務器、轉封裝成HTTP-FLV流、轉封裝成HLS、 轉封裝成HDS、轉封裝成DASH、錄製成FLV/MP4。
3. SRS包含支大規模集羣如CDN業務的關鍵特性, 譬如RTMP多級集羣、源站集羣、VHOST虛擬服務器 、 無中斷服務Reload、HTTP-FLV集羣。
4. SRS還提供豐富的應用接口, 包括HTTP回調、安全策略Security、HTTP API接口、 RTMP測速。
5. SRS在源站和CDN集羣中都獲得了普遍的應用Applications。
EasyDarwin是由國內開源流媒體團隊維護和迭代的一整套開源流媒體視頻平臺框架,Golang開發,從2012年12月建立並發展至今,包含有單點服務的開源流媒體服務器,和擴展後的流媒體雲平臺架構的開源框架,開闢了諸多的優質開源項目,能更好地幫助廣大流媒體開發者和創業型企業快速構建流媒體服務平臺,更快、更簡單地實現最新的移動互聯網(安卓、iOS、H五、微信)流媒體直播與點播的需求,尤爲是安防行業與互聯網行業的銜接。
運行EasyDarwin也很是方便,具體的配置步驟以下:
1. 獲取源碼
具體命令以下:
mkdir EasyDarwin && cd EasyDarwin
git clone github.com/EasyDarwin/… --depth=1 EasyDarwin
2. 以開發模式運行
npm run dev
3. 以開發模式運行前端
npm run dev:www
1. 基於Golang語言開發維護。
2. 支持Windows、Linux、macOS三大系統平臺部署。
3. 支持RTSP推流分發(推模式轉發)。
4. 支持RTSP拉流分發(拉模式轉發)。
5. 服務端錄像、檢索、回放。
6. 支持關鍵幀緩存、秒開畫面。
7. Web後臺管理。
8. 分佈式負載均衡。
ZLMediaKit是一套高性能的流媒體服務框架,目前支持rtmp、rtsp、hls、http-flv等流媒體協議,支持linux、macos、windows三大PC平臺和ios、android兩大移動端平臺。
1. 獲取源碼。
具體命令以下:
#國內用戶推薦從同步鏡像網站gitee下載
git clone --depth 1 gitee.com/xia-chu/ZLM…
cd ZLMediaKit
#千萬不要忘記執行這句命令
git submodule update --init
2. 編譯(這裏以linux和mac OS系統爲例)
cd ZLMediaKit
mkdir build
cd build
#macOS下可能須要這樣指定openss路徑:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
cmake ..
make -j4
3. 運行
cd ZLMediaKit/release/linux/Debug
#經過-h能夠了解啓動參數
./MediaServer -h
#以守護進程模式啓動
./MediaServer -d &
1. 基於C++11開發,避免使用裸指針,代碼穩定可靠,性能優越。
2. 支持多種協議(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4),支持協議互轉。
3. 使用多路複用/多線程/異步網絡IO模式開發,併發性能優越,支持海量客戶端鏈接。
4. 代碼通過長期大量的穩定性、性能測試,已經在線上商用驗證已久。
5. 支持linux、macos、ios、android、windows全平臺。
6. 支持畫面秒開、極低延時(500毫秒內,最低可達100毫秒)。
7. 提供完善的標準C API,能夠做SDK用,或供其餘語言調用。
8. 提供完整的MediaServer服務器,能夠免開發直接部署爲商用服務器。
9. 提供完善的restful api以及web hook,支持豐富的業務邏輯。
10. 打通了視頻監控協議棧與直播協議棧,對RTSP/RTMP支持都很完善。
11. 全面支持H265/H264/AAC/G711/OPUS。
Monibuca是一個開源的Go語言實現的流媒體服務器開發框架,採起了引擎+插件(s)的方式,實現了定製化流媒體服務器的功能。
架構圖:
1. 源碼地址
2. 以monica爲例進行介紹,monica是一個實例管理器,用於建立Monibuca的實例工程目錄文件,以及控制實例的更新和重啓等。
2.1 安裝monica
go get github.com/Monibuca/monica
2.2 指定端口運行,默認是8000
monica -port 8001
1. 針對流媒體服務器獨特的性質進行的優化,充分利用Golang的goroutine的性質對大量的鏈接的讀寫進行合理的分配計算資源,以及儘量的減小內存Copy操做。使用對象池減小Golang的GC時間。
2. 專爲二次開發而設計,基於Golang語言,開發效率更高;首創的插件機制,能夠方便用戶定製個性化的功能組合,更高效率的利用服務器資源。
3. 功能強大的儀表盤能夠直觀的看到服務器運行的狀態、消耗的資源、以及其餘統計信息。用戶能夠利用控制檯對服務器進行配置和控制。點擊右上角菜單欄裏面的演示,能夠看到演示控制檯界面。
4. 純Go編寫,不依賴cgo,不依賴FFMpeg或者其餘運行時,部署極其方便,對服務器的要求極爲寬鬆。
最後附上它們四個的對比圖表,這樣更加的直觀形象。綜合對比以後,我的認爲性價比最高的仍是Monibuca。