更新时间:2025-01-06 13:55:07
本文档全面概述了 CDNetworks RTC 的 WebRTC 信令交互格式及相关规则。WebRTC 信令用于设备间元数据的交换,以建立点对点连接。该过程的核心是 会话描述协议(SDP,Session Description Protocol),用于描述媒体通信会话,并协商诸如音视频编解码器、网络拓扑以及其他设备相关细节的参数。SDP 可以看作是 WebRTC 设备之间“沟通”的“语言”。
在 WHIP (WebRTC-HTTP Ingestion Protocol) 和 WHEP (WebRTC-HTTP Egress Protocol) 出现之前,SDP 数据的传输没有统一的标准方式。在 CDNetworks,我们通过使用 JSON 文件传输 SDP 。本指南详细介绍了我们的方法,包括这些 JSON 文件的结构以及它们在设置 WebRTC 会话中的应用。
在 CDNetworks 中,WebRTC 的 URL 格式如下:
http://domain/appName/streamName.sdp?params=xxx
stream.cdnetworks.com
。live
。channel_001
。userid=123
。注意:
该格式与 RTMP 和 HTTP-FLV 的 URL 格式相似,主要区别在于后缀为.sdp
。
示例格式对比:
- RTMP:
rtmp://stream.cdnetworks.com/live/channel_001?userid=123
- HTTP-FLV:
http://stream.cdnetworks.com/live/channel_001.flv?userid=123
推流和播放流的 URL 格式一致。区分依据为客户端 SDP 中的 offer
属性,这是 WebRTC 协商过程中的关键元素。该属性指定发起设备的媒体能力,包括支持的编解码器、媒体类型(音频、视频)、网络信息以及设备是发送、接收还是同时进行发送和接收。
a=sendonly
,表示设备仅发送媒体数据。a=recvonly
,表示设备仅接收媒体数据。注意:不支持使用 a=sendrecv
(同时发送和接收)的场景。请确保配置中指定 a=sendonly
或 a=recvonly
,以避免不支持的操作。
在发送 offer
后,对端设备或服务器会通过 answer
SDP 响应,最终确认会话参数。
服务器的 answer
SDP 根据请求类型生成:
a=recvonly
。a=sendonly
。参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
version | string | 是 | 固定值 "v1.0" |
sessionId | string | 否 | 客户端生成的会话 ID,用于标识 |
localSdp | struct | 是 | 客户端 SDP 信息(参见 SDP 定义) |
参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
code | int | 是 | 状态码(参见 状态码说明) |
message | string | 是 | 状态消息 |
remoteSdp | struct | 是 | 服务器 SDP 信息(参见 SDP 定义) |
参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
type | string | 是 | SDP 类型。请求使用固定值 "offer" ;响应使用固定值 "answer" 。 |
sdp | string | 是 | 标准 SDP 协议内容(参见 RFC4566) |
状态码 | 描述 |
---|---|
200 | 请求成功 |
400 | 请求体错误 |
401 | 参数错误 |
402 | 信息错误 |
403 | 鉴权失败 |
404 | 未找到流 |
600 | 不支持 RTC,客户端需强制降级 |
{
"sessionId": "123456789",
"version": "v1.0",
"localSdp": {
"type": "offer",
"sdp": "<标准 SDP 协议内容>"
}
}
{
"code": 200,
"message": "success",
"remoteSdp": {
"type": "answer",
"sdp": "<标准 SDP 协议内容>"
}
}