重新定义流媒体服务器

随着Flash的淘汰,流媒体服务器经历了从RTMP到HLS、DASH和WebRTC的转变。文章回顾了流媒体服务器的历史,从FMS、Red5、crtmpserver到SRS,以及如何使用Golang实现高效的WebSocket支持。Monibuca框架的诞生,旨在提供更易扩展的流媒体解决方案,以适应流媒体服务器3.0时代的需求。
摘要由CSDN通过智能技术生成

背景

随着全民直播时代的到来,以及最近疫情的爆发,在线教育行业又变的炙手可热,成为了新的风口。这两者的背后都是依靠着 CDN 以及视频云等基础服务,而这些基础服务的底层又依靠着流媒体服务器这种有着“悠久历史”的特殊服务器软件。为什么说特殊呢,因为这种服务器软件的架构和传统的 Web 服务器有很大的差别。

在直播系统或者视频会议系统中,有 三大件 构成:

  • 推流器——采集、编码、协议封包
  • 流媒体服务器——协议解包封包、转发
  • 播放器——协议解包、解码、渲染

这三大件有着不同的技术领域,而今天的主角就是其中的流媒体服务器,他的主要职责就是转发。现在让我们看看这位在幕后默默付出的角色的发展历程以及最新的架构设计思想。

流媒体服务器 1.0

本人的第一份工作就是和它打交道,当时它叫 FCS,全称 Flash Communication Server。那时候 Flash 还属于 macromedia 公司。我在一家小公司上班,产品就是用 Flash 开发的视频会议系统以及后来的培训系统,今天看来还是比较超前的。从 FCS,到后来的 FMS(全称 Flash Media Server)现在叫 AMS(Adobe Media Server)基本的架构没有变化。(FCS、AMS 后面统称 FMS

重新定义流媒体服务器

在这个架构一下面,推流和播放都由 FlashPlayer 承担,FlashPlayer 可以嵌入到网页中,也可以做成独立的 exe。后来官方专门制作了一款用于推流的软件 FMLE(全称:Flash Media Live Encoder)。这 FlashPlayer 和 FMS 之间通过 RTMP 协议进行通讯,这个协议一直到现在还在广泛使用(虽然 Flash 已经被淘汰)。在 FMS 端还可以通过编写服务器脚本进行业务逻辑开发,可以非常方便的实现房间里面的状态同步,这个得益于 RTMP 协议可以传输一些 AS(action script)的指令,包括 RPC、共享对象等。当然如今 RTMP 人们只是用来传输音视频,其他功能都已经被忽略了。

(这里补充一点:微软也有一套流媒体服务器,但使用不是很广泛,就不做赘述了)

流媒体服务器 1.5

由于 FMS 的授权费用相当昂贵,当时一个核心 4000 美金,很多企业都承担不起,尤其是创业型公司。随后就催生出了开源的流媒体服务器,其中最著名的是 Red5,由 Java 开发。以及性能更为强悍的 crtmpserver(又名 rtmpd)由 C++ 开发。当然这些服务器的功能是不如 FMS 的。我当时潜心研究 crtmpserver,并用 C#进行了移植,这个移植版本在 github 上开源,有兴趣的朋友可以去观摩: https://github.com/langhuihui/csharprtmp 基本的结构是一模

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值