WebRTC 的信令
Abstract |
WebRTC Signal |
Authors |
Walter Fan |
Status |
WIP as draft |
Category |
LearningNote |
Updated |
2024-08-21 |
Overview
signal 在英语中有两个不同的意思,一是信令,一是信号,这里我们主要讲信令。
信令的意思是呼叫流程的控制,包括媒体通道的搭建,媒体参数的协商,媒体流的控制。
在 WebRTC 中,信令控制主要的协议是 4 个
WebRTC 1.0: Real-Time Communication Between Browsers, 即浏览器之间的实时通信标准
JSEP (Javascript Session Establishment Protocol) , 即 Javascript 会话建立协议。
SDP (Session Decscription Protocol), 即会话描述协议
ICE (Interactive Connectivity Establishment), 即交互式连接建立协议
前两者主要是描述了如何通过浏览器提供的 API 实现实时的音视频通讯,主要的接口,实体和方法是通过 WebIDL 来定义的
信令协议的传输和格式
无论是 SDP 还是其他的控制消息,都需要通过一个传输通道来收发消息,这个传输通道一般是基于 TCP 协议的,例如 HTTP, WebSocket 等 格式一般以文本格式为佳,因为其数据量不大,而且容易理解和阅读。当然,二进制格式的也可以,比如用自己定义的 PDU 或者 Protobuffer 都可。
WebIDL
WebIDL 是一种接口定义语言,用来定义由浏览器实现的接口。WebIDL 是一个 IDL 变体,具有许多特性,允许更容易地指定 Web 平台中常见脚本对象的行为。
其中的 IDL Fragment 接口定义语言片段有如下类型的定义:
interfaces
partial interface definitions
interface mixins
partial mixin definitions
callback functions
callback interfaces
namespaces
partial namespace definitions
dictionaries
partial dictionary definitions
typedefs
includes statements
每个定义(匹配 Definition)前面都可以有一个扩展属性列表(匹配 ExtendedAttributeList),它可以控制如何在语言绑定中处理定义
SDP
媒体参数协商要通过 SDP (会话描述协议), 它包括
会话名称和目的Session name and purpose
会话存活的时间
会话中所包含媒体的信息(地址,端口,格式等等)
在 WebRTC 交互流程中,通信双方需要了解彼此的会话描述信息,也就是需要通过 Offer/Answer (提议/应答)机制来交换 SDP: * 发起方都会通过调用 createOffer() API 创建 Offer。 * 然后,应用程序使用该 Offer 通过 setLocalDescription() API来设置其本地配置。 offer 最终通过其首选的信令机制(例如WebSockets)发送到远程端; * 收到该 offer 后,远程方将使用 setRemoteDescription()API进行安置。 * 为了完成 Offer/Answer 交换,接收方会使用 createAnswer() API生成适当的 answer,使用 setLocalDescription() API应用该 answer,并将 answer 通过信令通道发送回发起方。
发起方获得该`answer`后,它将使用 setRemoteDescription() API进行设置,并且初始设置已完成。可以重复此过程以进行其他 Offer/Answer 交换。
参见 RFC3264 : An Offer/Answer Model with the Session Description Protocol (SDP)
SDP 扩展
DTLS fingerprint for SRTP (a=fingerprint)
RTP/RTCP Multiplexing (a=rtcp-mux)
RTCP Feedback support (a=rtcp-fb)
Host and server-reflexive candidate lines (a=candidate)
SRTP Setup framework parameters (a=setup)
RTCP attribute (a=rtcp)
RTP header extension indicating audio-levels from client to the mixer(a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level)
SDP 相关的扩展协议很多,不能一一列举,在 WebRTC 中有几个比较重要的
Source-Specific Media Attributes in SDP
参见 https://datatracker.ietf.org/doc/html/rfc5576
Defines a mechanism to describe RTP sources, identified by their synchronization source (SSRC) identifier, in SDP, to associate attributes with these sources, and to express relationships among individual sources.
a=ssrc:<ssrc-id> <attribute>
a=ssrc:<ssrc-id> <attribute>:<value>
a=ssrc-group:<semantics> <ssrc-id> ...
The Session Description Protocol (SDP) Grouping Framework
参见 https://datatracker.ietf.org/doc/html/rfc5888
Use of “group” and “mid”
Flow Identification (FID)
For each participant, the session is defined by a particular pair of destination transport addresses
But a single media instance maybe sent using more than one RTP session
Source-Specific Media Attributes in SDP
参见 https://datatracker.ietf.org/doc/html/rfc5576
Defines a mechanism to describe RTP sources, identified by their synchronization source (SSRC) identifier, in SDP, to associate attributes with these sources, and to express relationships among individual sources.
a=ssrc:<ssrc-id> <attribute>
a=ssrc:<ssrc-id> <attribute>:<value>
a=ssrc-group:<semantics> <ssrc-id> ...
更多的 SDP 实例说明请参见 SDP for the WebRTC
Signal Server
Signal Server 即我们通常所说的信令服务器,在 WebRTC 应用中它通常是一个 Web Server, 提供 Web App 的访问和下载。而且,它主要还有如下功能
用户的注册和登录
SDP 的交换
ICE 候选者的交换
通信实体的管理,例如如下实体创建,结束,加入,离开 - 会议室 room 管理 - 会话 session 管理 - 连接 connection 管理 - 媒体流 media stream 管理
示例
nginx + nodejs + redis
参考资料
RFC3264: An Offer/Answer Model with the Session Description Protocol (SDP)