WebRTC Signaling

更新时间:2025-08-14 16:08:28

WebRTC 信令是为协调通信而交换元数据的过程。其核心部分是会话描述协议(SDP),它允许对等方协商会话参数,如编解码器、网络路径和媒体类型。我们的服务支持两种信令方法:行业标准的 WHIP(WebRTC-HTTP Ingestion Protocol)和 WHEP(WebRTC-HTTP Egress Protocol),以及一种自定义的、基于 HTTP/JSON 的协议。本指南详细说明了我们自定义的 HTTP/JSON 协议。

核心原则:Offer/Answer 模型

信令过程依赖于标准的 WebRTC Offer/Answer 模型。客户端通过发送 offer SDP 来发起会话,服务器则通过返回 answer SDP 来完成协商。

为了区分是发布(推流)还是播放(拉流),我们的服务会检查客户端 offer SDP 中的属性。

  • 发布流(推流):客户端的 offer SDP 必须包含 a=sendonly 属性。这表示客户端只打算发送媒体,不接收媒体。服务器随后将响应一个包含 a=recvonlyanswer SDP。
  • 播放流(拉流):客户端的 offer SDP 必须包含 a=recvonly 属性。这表示客户端只打算接收媒体,不发送媒体。服务器将响应一个包含 a=sendonlyanswer SDP。

重要提示:
不支持带有 a=sendrecv 属性(表示双向流)的会话。请确保您的客户端配置为纯推流或纯拉流模式。

信令端点

所有的信令通信都通过一个单一的 HTTP 端点进行,其 URL 用于指定目标流。

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 后缀。

API 规范

请求

  • 方法: POST
  • Content-Type: application/json

请求体

参数 类型 是否必需 描述
version String API 版本。必须为固定值 "v1.0"
sessionId String 由客户端生成的用于标识会话的唯一 ID。虽然是可选的,但强烈建议您提供此字段,以便于日志记录和问题排查。
localSdp Object 包含客户端 SDP 信息的对象。

响应

响应体

参数 类型 是否必需 描述
code Integer 响应的状态码。请参阅状态码部分。
message String 描述响应状态的消息。
remoteSdp Object 包含服务器 answer SDP 信息的对象。

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..."
  }
}

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!