更新时间:2025-08-14 16:08:28
WebRTC 信令是为协调通信而交换元数据的过程。其核心部分是会话描述协议(SDP),它允许对等方协商会话参数,如编解码器、网络路径和媒体类型。我们的服务支持两种信令方法:行业标准的 WHIP(WebRTC-HTTP Ingestion Protocol)和 WHEP(WebRTC-HTTP Egress Protocol),以及一种自定义的、基于 HTTP/JSON 的协议。本指南详细说明了我们自定义的 HTTP/JSON 协议。
信令过程依赖于标准的 WebRTC Offer/Answer 模型。客户端通过发送 offer SDP 来发起会话,服务器则通过返回 answer SDP 来完成协商。
为了区分是发布(推流)还是播放(拉流),我们的服务会检查客户端 offer SDP 中的属性。
offer SDP 必须包含 a=sendonly 属性。这表示客户端只打算发送媒体,不接收媒体。服务器随后将响应一个包含 a=recvonly 的 answer SDP。offer SDP 必须包含 a=recvonly 属性。这表示客户端只打算接收媒体,不发送媒体。服务器将响应一个包含 a=sendonly 的 answer SDP。重要提示:
不支持带有 a=sendrecv 属性(表示双向流)的会话。请确保您的客户端配置为纯推流或纯拉流模式。
所有的信令通信都通过一个单一的 HTTP 端点进行,其 URL 用于指定目标流。
http://domain/appName/streamName.sdp?params=xxx
| 参数 | 描述 |
|---|---|
domain |
您在低延迟直播产品中配置的域名(例如 stream.cdnetworks.com)。 |
appName |
应用或发布点名称(例如 live)。 |
streamName |
流的唯一名称(例如 channel_001)。 |
params |
(可选)任何附加的查询参数(例如 userid=123)。 |
此格式特意设计得与 RTMP (rtmp://...) 和 HTTP-FLV (... .flv) 的 URL 相似,关键区别在于 .sdp 后缀。
application/json| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
version |
String | 是 | API 版本。必须为固定值 "v1.0"。 |
sessionId |
String | 否 | 由客户端生成的用于标识会话的唯一 ID。虽然是可选的,但强烈建议您提供此字段,以便于日志记录和问题排查。 |
localSdp |
Object | 是 | 包含客户端 SDP 信息的对象。 |
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
code |
Integer | 是 | 响应的状态码。请参阅状态码部分。 |
message |
String | 是 | 描述响应状态的消息。 |
remoteSdp |
Object | 是 | 包含服务器 answer SDP 信息的对象。 |
请求中的 localSdp 和响应中的 remoteSdp 对象共享相同的结构。
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
type |
String | 是 | SDP 类型。客户端的请求必须使用 "offer"。服务器的响应将使用 "answer"。 |
sdp |
String | 是 | 完整的、符合标准的 SDP 内容字符串(请参阅 RFC 4566)。 |
| 状态码 | 消息 | 描述 |
|---|---|---|
200 |
success |
请求成功。 |
400 |
body error |
请求体不是有效的 JSON。 |
401 |
parameter error |
一个或多个必需的参数缺失或无效。 |
402 |
information error |
参数中提供的信息不正确。 |
403 |
authentication failure |
鉴权失败。 |
404 |
stream not found |
请求的流不存在。 |
600 |
RTC not supported |
服务器不支持此流的 RTC 连接,客户端必须降级到其他协议。 |
{
"sessionId": "123456789",
"version": "v1.0",
"localSdp": {
"type": "offer",
"sdp": "v=0\r\no=- 12345 67890 IN IP4 192.0.2.1\r\ns=-\r\nt=0 0\r\na=sendonly\r\nm=video 9 UDP/TLS/RTP/SAVPF 100\r\n..."
}
}
{
"code": 200,
"message": "success",
"remoteSdp": {
"type": "answer",
"sdp": "v=0\r\no=- 98765 43210 IN IP4 198.51.100.1\r\ns=...\r\nt=0 0\r\na=recvonly\r\nm=video 9 UDP/TLS/RTP/SAVPF 100\r\n..."
}
}