几种开源的媒体服务器对比

本文对几种开源的流媒体服务器做对比。

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协议有许多变种:

  1. 默认使用TCP端口1935的纯粹(plain)协议。
  2. RTMPS,通过一个TLS/SSL连接传输RTMP。
  3. RTMPE,使用Adobe自有安全机制加密的RTMP。虽然实现的细节为专有,但该机制使用行业标准的密码学原函数。
  4. RTMPT,用HTTP封装以穿透防火墙。RTMPT通常在TCP通信端口80和443上使用明文请求来绕过大多数的公司流量过滤。封装的会话中可能携带纯粹的RTMP、RTMPS或RTMPE数据包。
  5. RTMFP, 使用UDP而非TCP的RTMP,取代RTMP Chunk Stream。Adobe Systems开发了安全的实时媒体流协议包,可以让最终用户直接地相互连接(P2P)。

1.3 WebRTC

https://webrtc.org/

WebRTC is a free, open project that 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

特点:

相关资料:

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版的定义

RFC 8216

2 开源方案

2.0 开源方案选型要考虑的因素:


10 Tips for Choosing the Right WebRTC Open Source Media Server Framework

  1. 你是否深刻理解其代码?
  2. 代码版本是否足够新?
  3. 有谁在使用它?
  4. 它的文档是否齐全?
  5. 它可以debug吗?
  6. 它可以伸缩吗?
  7. 它使用哪种语言?
    • 对于媒体服务器而言,这种语言的性能是否足够?
    • 团队是否足够了解这门语言?
  8. 是否适应你现有的Signaling范式?
    • 你在看的Media Server是否容易与你决定使用的STUN/TURN服务器集成
  9. 许可证是否适合你?
  10. 谁在提供支持?
    • 很多成功的、被良好维护的开源项目背后都有一个商业模式,尤其是中小型的项目,这意味着有一个团队以此为谋生手段。
    • 具备可选的付费支持意味着:
      • 有人愿意全职来改善这东西,而不是作为爱好来维护。
      • 如果你需要紧急帮助,只要花钱就能得到。

2.1 Red5

官网 http://red5.org/
Github https://github.com/Red5

非官方资料:

特性:

  • Server
    • 自动伸缩集群
    • Adaptive Stream Rebuffering
    • 支持多协议:
      • WebRTC
      • RTMP
      • RTSP
      • HLS
      • FLV
      • MP4
    • 实时流录制
    • 离线部署
  • Browser
    • 定制化HTML5播放器,支持旋转
    • 实时HLS流
    • 支持Flash作为后备方案
  • 移动端SDK(iOS, Android)
    • 自适应比特率发布
    • 硬件编码和解码
    • 定制视频源
    • 直播摄像头切换
    • 双路视频聊天
    • 多方视频会议
    • Adaptive Stream Rebuffering
    • 低延迟播放器
    • 高级通知API
    • 消息与RPC
    • HD h.264, AAC编码高达4k

粗略的特性收费情况调查结果:

- 开源版本 付费版本
自动伸缩集群 不支持 \$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

主页:http://www.kurento.org/
github:https://github.com/kurento

服务端采用C++实现:https://github.com/Kurento/kurento-media-server

特性:

  • 支持HTTP、RTP和WebRTC
  • 集成OpenCV,支持分析图像抽取信息
  • 转码(这个是刚需了)
  • 广播
  • 提供Kurento API,可以在此基础上构建服务器的高层逻辑,并提供了Java和NodeJS的实现,基于此可以实现权限校验等业务逻辑
  • 支持NAT穿越

文档地址: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

官网 https://www.restcomm.com/
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/
文档 https://antmedia.io/documentation
Github https://github.com/ant-media/ant-media-server

Star Fork

服务端采用Java实现,是Red5-server的分叉版本

特性:

  • 实时流发布
  • 支持RTMP、RTSP、WebRTC、HLS
  • WebRTC转RTMP适配器
  • IP摄像头支持
  • 录制实时流(FLV、MP4和HLS容器)
  • 同步重制流到社交媒体(企业版里Facebook和Youtube)
  • 低延迟1:N WebRTC实时流(企业版)
  • 实时流自适应比特率转换(FLV、MP4、HLS)(企业版)

考察点总结:

考察点 情况
语言 Java
最新发布日期 2018-05-01
谁在用
文档 齐全
伸缩 收费
debug ?
许可证 Apache License v2
网络协议 RTMP、RTSP、WebRTC、HLS
自适应码率
流控 ?
录制
回放

2.5 BigBlueButton

官网 https://bigbluebutton.org/
文档 http://docs.bigbluebutton.org/
github https://github.com/bigbluebutton/bigbluebutton
Star Fork

采用Java开发,主要针对场景是授课

特性:

  • 实时添加字幕
  • 屏幕共享
  • 分组讨论室
  • 录制与回放

考察点总结:

考察点 情况
语言 Java
最新发布日期
谁在用
文档
伸缩
debug
许可证
网络协议
自适应码率
流控
录制
回放

2.6 NextRTC

主页 https://nextrtc.org/
Github https://github.com/mslosarz/nextrtc-signaling-server

考察点总结:

考察点 情况
语言 Java
最新发布日期 2018-04-05
谁在用 (估计没人)
文档 简单
伸缩
debug
许可证 MIT
网络协议 WebRTC
自适应码率
流控
录制
回放

2.7 OpenBroadcaster

https://obsproject.com/
https://github.com/obsproject

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

-