概述
WebRTC 的服务器大体分为信令服务器和媒体服务器
WebRTC 信令服务器是主要功能是为 WebRTC 通讯搭建一个了解彼此能力的通道, 交换信息, 同步改动.
而媒体服务器就是用来交换媒体,包括对媒体数据的加解密,编解码,带宽和速率控制等功能
不同的 RTP Toplogies 对服务器有不同的要求
WebRTC 或者说多媒体通信一般有如下的几种拓扑结构:
- Point to Point 点对点
- Point to Multipoint Using Multicast 单点到多点(使用多播)
- Point to Multipoint Using the RFC 3550 Translator 单点到多点(使用RFC3550 的 Translator)
- Point to Multipoint Using the RFC 3550 Mixer Model 单点到多点(使用RFC3550 的Mixer)
- Point to Multipoint Using Video Switching MCUs 单点到多点(使用视频切换)
- Point to Multipoint Using RTCP-Terminating MCU 单点到多点(使用RTCP 终结方式)
- Non-Symmetric Mixer/Translators 非对称的 mixer/translator
- Combining Topologies 混合拓扑
服务器的主要功能
P2P
如果是两个人之间的端到端 (P2P) 的通信, 信令服务器的功能很简单
- 交换媒体通信和处理能力,主要是以 SDP 来描述
- 交换连接地址, 比如 ICE Candidate
而由于是点对点的通信,媒体服务器也就不需要了。
SFU
如果是 SFU(Selective Forward Unit), 那么它的信令服务器除了上述的 SDP 媒体参数协商, ICE 连接地址交换,还有参加 RTP 会话的参加者信息的同步。
多个人之间的会议系统, 信令控制会麻烦很多,除了上述两个基本功能之外, 还要有
- 会议管理
- 成员管理
- 设备管理
- 会话管理
- 连接管理
- 媒体管理
- 管理会议中的实体
在 RFC4575 中有这样的定义
conference-info
|
|-- conference-description
|
|-- host-info
|
|-- conference-state
|
|-- users
| |-- user
| | |-- endpoint
| | | |-- media
| | | |-- media
| | | |-- call-info
| | |
| | |-- endpoint
| | |-- media
| |-- user
| |-- endpoint
| |-- media
|
|-- sidebars-by-ref
| |-- entry
| |-- entry
|
|-- sidebars-by-val
|-- entry
| |-- users
| |-- user
| |-- user
|-- entry
|-- users
|-- user
|-- user
|-- user
MCU
Multiple Control Unit 多点控制单元相比 SFU, 它有着对于媒体流的 Mix 和 translate 功能,可以很好地适配传统的通信设备,在实际应用中,一般我们会以 SFU 为主, MCU 为辅,共同形成一个服务器集群。
服务器中需要维护领域对象
在 WebRTC 服务器上,我们一般会维护如下的领域对象
- Conference
- Session
- Participate
- Device
- Connection
- MediaSession
- MediaSessionDescription
- MediaStream
- MediaStreamTrack
- 等等
领域对象的具体内容从略,一般有如下的 Command 或 Event
应用层的事件大约可以分为 5 类
- Request: 包括 command
- Response
- Subscribe
- Notify
- Message 就是一个消息,不要求响应, 例如 Presence 出席信息
具体的有
- Start
- End
- Join
- Leave
- Offer
- Answer
- Mute
- Unmute
- Expel
- RaiseHand
- 等等