幾種開源的媒體服務器對比
1 概念
1.1 RTP
實時傳輸協議(Real-time Transport Protocol或簡寫RTP)是一個網絡傳輸協議,它是由IETF的多媒體傳輸工作小組1996年在RFC 1889中公布的。
RTP協議詳細說明了在互聯網上傳遞音頻和視頻的標準數據包格式。它一開始被設計為一個多播協議,但后來被用在很多單播應用中。RTP協議常用于流媒體系統(配合RTSP協議),視頻會議和一鍵通(Push to Talk)系統(配合H.323或SIP),使它成為IP電話產業的技術基礎。RTP協議和RTP控制協議RTCP一起使用,而且它是創建在 UDP 協議上的。
1.2 RTMP
實時消息協議(英語:Real-Time Messaging Protocol,縮寫RTMP)也稱實時消息傳輸協議,是最初由Macromedia為通過互聯網在Flash播放器與一個服務器之間傳輸流媒體音頻、視頻和數據而開發的一個專有協議。Macromedia后被Adobe Systems收購,該協議也已發布了不完整的規范供公眾使用。
RTMP協議有許多變種:
- 默認使用TCP端口1935的純粹(plain)協議。
- RTMPS ,通過一個TLS/SSL連接傳輸RTMP。
- RTMPE ,使用Adobe自有安全機制加密的RTMP。雖然實現的細節為專有,但該機制使用行業標準的密碼學原函數。
- RTMPT ,用HTTP封裝以穿透防火墻。RTMPT通常在TCP通信端口80和443上使用明文請求來繞過大多數的公司流量過濾。封裝的會話中可能攜帶純粹的RTMP、RTMPS或RTMPE數據包。
- RTMFP , 使用UDP而非TCP的RTMP,取代RTMP Chunk Stream。Adobe Systems開發了安全的實時媒體流協議包,可以讓最終用戶直接地相互連接(P2P)。
1.3 WebRTC
WebRTC is a free, open projectthat provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.
Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.
The WebRTC initiative is a project supported by Google , Mozilla and Opera , amongst others.
支持的瀏覽器和平臺:
- Chrome
- Firefox
- Opera
- Android
- iOS
特點:
- 基于瀏覽器,且主流瀏覽器都支持,跨平臺能力強
- 默認P2P,但是需要TURN服務器作為fallback
- 自適應碼率
- webrtc 視頻編碼之 h264 自動調節分辨率 — newrtc
- webm - Does WebRTC support Adaptive Bitrate Streaming for video? - Stack Overflow
相關資料:
- 2013 Google I/O 大會上WebRTC的幻燈片
- Getting Started with WebRTC - Sam Dutton
- WebRTC in the real world: STUN, TURN and signaling - Sam Dutton
- IETF Real-Time Communication in WEB-browsers (rtcweb) Working Group
- RFC7742 - WebRTC Video Processing and Codec Requirements
1.4 HLS
HTTP Live Streaming - 維基百科,自由的百科全書
HTTP Live Streaming(縮寫是HLS)是一個由蘋果公司提出的基于HTTP的流媒體網絡傳輸協議。它的工作原理是把整個流分成一個個小的基于HTTP的文件來下載,每次只下載一些。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應不同的數據速率。在開始一個流媒體會話時,客戶端會下載一個包含元數據的extended M3U (m3u8) playlist文件,用于尋找可用的媒體流。
HLS只請求基本的HTTP報文,與實時傳輸協議(RTP)不同,HLS可以穿過任何允許HTTP數據通過的防火墻或者代理服務器。它也很容易使用內容分發網絡(CDN)來傳輸媒體流。
2017年8月, RFC 8216 發布,描述了HLS協議第7版的定義
2 開源方案
2.0 開源方案選型要考慮的因素:
10 Tips for Choosing the Right WebRTC Open Source Media Server Framework
- 你是否深刻理解其代碼?
- 代碼版本是否足夠新?
- 有誰在使用它?
- 它的文檔是否齊全?
- 它可以debug嗎?
- 它可以伸縮嗎?
- 它使用哪種語言?
- 對于媒體服務器而言,這種語言的性能是否足夠?
- 團隊是否足夠了解這門語言?
- 是否適應你現有的Signaling范式?
- 你在看的Media Server是否容易與你決定使用的STUN/TURN服務器集成
- 許可證是否適合你?
- 誰在提供支持?
- 很多成功的、被良好維護的開源項目背后都有一個商業模式,尤其是中小型的項目,這意味著有一個團隊以此為謀生手段。
- 具備可選的付費支持意味著:
- 有人愿意全職來改善這東西,而不是作為愛好來維護。
- 如果你需要緊急幫助,只要花錢就能得到。
2.1 Red5
Github https://github.com/Red5
非官方資料:
特性:
- Server
- 自動伸縮集群
- Adaptive Stream Rebuffering
- 支持多協議:
- WebRTC
- RTMP
- RTSP
- HLS
- FLV
- MP4
- 實時流錄制
- 離線部署 </ul> </li>
- Browser
- 定制化HTML5播放器,支持旋轉
- 實時HLS流
- 支持Flash作為后備方案 </ul> </li>
- 移動端SDK(iOS, Android)
- 自適應比特率發布
- 硬件編碼和解碼
- 定制視頻源
- 直播攝像頭切換
- 雙路視頻聊天
- 多方視頻會議
- Adaptive Stream Rebuffering
- 低延遲播放器
- 高級通知API
- 消息與RPC
- HD h.264, AAC編碼高達4k </ul> </li> </ul>
- 開源版本很難用,官方幾乎沒有文檔,即使有,也是幾年前的了,也沒有教程。
- 支持HTTP、RTP和WebRTC
- 集成OpenCV,支持分析圖像抽取信息
- 轉碼(這個是剛需了)
- 廣播
- 提供Kurento API,可以在此基礎上構建服務器的高層邏輯,并提供了Java和NodeJS的實現,基于此可以實現權限校驗等業務邏輯
- 支持NAT穿越
- 實時流發布
- 支持RTMP、RTSP、WebRTC、HLS
- WebRTC轉RTMP適配器
- IP攝像頭支持
- 錄制實時流(FLV、MP4和HLS容器)
- 同步重制流到社交媒體(企業版里非死book和油Tube)
- 低延遲1:N WebRTC實時流(企業版)
- 實時流自適應比特率轉換(FLV、MP4、HLS)(企業版)
- 實時添加字幕
- 屏幕共享
- 分組討論室
- 錄制與回放
粗略的特性收費情況調查結果:
- 開源版本 付費版本 自動伸縮集群 不支持 \$279/MO 多協議支持 支持 支持 轉碼 不支持 \$109/MO 離線部署 支持 \$999+/MO 來自 Red5 open source vs Red5pro · rajdeeprath/red5-development-series Wiki 的數據
FEATURES RED5 OS RED5 PRO 實時流 ? ? 視頻錄制 ? ? WebSockets ? ? 移動端回放(HLS) Community ? Adobe Flash 支持 ? ? WebRTC ? ? 第二屏 ? ? 自動伸縮 ? ? 集群 ? ? 移動端SDK ? ? 擴展文檔 ? ? 客戶支持 Community ? 管理API (RESTful) ? ? 缺點:
考察點總結:
考察點 OS PRO 語言 Java Java 最新發布日期 2017-01-12 ? 誰在用 ? Intel, LimeLight,…,etc(最經典的方案) 文檔 ? ? 伸縮 ? ? debug ? ? 許可證 Apache License v2 付費 網絡協議 HLS, WebSockets, RTSP, RTMP, RTMPT, RTMPS, RTMPE HLS, WebSockets, RTSP, RTMP, RTMPT, RTMPS, RTMPE, WebRTC 自適應碼率 ? ? 流控 ? ? 錄制 ? ? 回放 ? ? 2.2 kurento
github: https://github.com/kurento
服務端采用C++實現: https://github.com/Kurento/kurento-media-server
特性:
文檔地址: http://readthedocs.org/projects/doc-kurento/downloads/pdf/stable/
考察點總結:
考察點 情況 語言 C++ 最新發布日期 2018-03-21 誰在用 沒有業界權威在用,Github 800+Star 文檔 比較全 伸縮 ? debug ? 許可證 LGPL v2.1 網絡協議 HTTP, RTP, WebRTC 自適應碼率 ? 流控 ? 錄制 ? 回放 ? 2.3 RestComm
GitHub https://github.com/RestComm
文檔 https://www.restcomm.com/docs/
免費版本功能受限
考察點總結:
考察點 情況 語言 Java 最新發布日期 2018-04-20 誰在用 ? 文檔 齊全 伸縮 付費 debug ? 許可證 AGPL-3.0 網絡協議 WebRTC 自適應碼率 ? 流控 ? 錄制 ? 回放 ? 2.4 Ant Media Server
文檔 https://antmedia.io/documentation
Github https://github.com/ant-media/ant-media-server
服務端采用Java實現,是Red5-server的分叉版本
特性:
考察點總結:
考察點 情況 語言 Java 最新發布日期 2018-05-01 誰在用 文檔 齊全 伸縮 收費 debug ? 許可證 Apache License v2 網絡協議 RTMP、RTSP、WebRTC、HLS 自適應碼率 ? 流控 ? 錄制 ? 回放 ? 2.5 BigBlueButton
文檔 http://docs.bigbluebutton.org/
github https://github.com/bigbluebutton/bigbluebutton
采用Java開發,主要針對場景是授課
特性:
考察點總結:
考察點 情況 語言 Java 最新發布日期 誰在用 文檔 伸縮 debug 許可證 網絡協議 自適應碼率 流控 錄制 回放 2.6 NextRTC
Github https://github.com/mslosarz/nextrtc-signaling-server
考察點總結:
考察點 情況 語言 Java 最新發布日期 2018-04-05 誰在用 (估計沒人) 文檔 簡單 伸縮 ? debug ? 許可證 MIT 網絡協議 WebRTC 自適應碼率 ? 流控 ? 錄制 ? 回放 ? 2.7 OpenBroadcaster
TBD
Comparison of streaming media systems - Wikipedia
名稱 創建者 最新穩定版(發布日期) 最新發布日期 價錢 (USD) 許可證 支持媒體 Cameleon Yatko 1.0.7 (2016-11-11) 2016-11-11 Free 專有 Audio/Video Helix Universal Server RealNetworks 15.2.1 (2014-09-16) 2014-09-16 Free for 12 months (Basic) and \$1,000-\$10,000 專有 Audio/Video IIS Media Services Microsoft 4.1 (2011-11-09) 2011-11-09 Free 專有 Audio/Video/Data Nimble Streamer WMSPanel 2.15.1-3 (2016-03-21) 2016-03-21 Free 專有 Audio/Video Open Broadcaster Software OBS Project 0.657 (2015-11-24) 2015-11-24 Free GPL v2 Audio/Video OpenBroadcaster OpenBroadcaster 5.0.0 (2018-01-27) 2018-01-27 Free AGPLv3 Audio/Video Plex (software) Plex Media Server 1.0.3.2461-35f0caa (2016-07-28) 2016-07-28 Free GPL Audio/Video Red5 (open source) Infrared5/community 1.0.6 (2015-09-08) 2015-09-08 Free Apache License v2 Audio/Video/Data Unified Streaming Platform Unified Streaming 1.7.18 (2016-04-11) 2016-04-11 Free Trial license; Perpetual License; Amazon EC2 with embedded license; Microsoft Azure 專有 Audio/Video Unreal Media Server Unreal Streaming Technologies 12.0 (2017-04-03) 2017-04-03 \$995 perpetual license 專有 Audio/Video VLC media player VideoLAN 2.2.4 (2016-06-05) 2016-06-05 Free GPL v2 Audio/Video Wowza Streaming Engine Wowza Media Systems 4.5.0 build 18676 (2016-06-23)[2] 2016-06-23 Free Developer and Trial licenses; Subscription Licenses at \$65/month; Perpetual Pro License at \$1995; Amazon EC2 with embedded license starting at \$0.15/hour 專有 Audio/Video/Data -
來自:http://bungder.github.io/2018/05/06/compare-of-some-open-source-media-server/