文档中心 Low Latency Streaming WebRTC Signaling Interaction

WebRTC Signaling Interaction

更新时间: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 会话中的应用。

1. URL 格式

CDNetworks 中,WebRTC 的 URL 格式如下:

http://domain/appName/streamName.sdp?params=xxx

参数说明

  • domain: 表示域名,例如 stream.cdnetworks.com
  • appName: 表示推流点,例如 live
  • streamName: 表示流名称,例如 channel_001
  • params: 表示可选参数,例如 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

2. 推流规则

推流 URL 格式及服务器响应规则

推流和播放流的 URL 格式一致。区分依据为客户端 SDP 中的 offer 属性,这是 WebRTC 协商过程中的关键元素。该属性指定发起设备的媒体能力,包括支持的编解码器、媒体类型(音频、视频)、网络信息以及设备是发送、接收还是同时进行发送和接收。

客户端 Offer 规则:

  • 推流: 包含 a=sendonly,表示设备仅发送媒体数据。
  • 播放: 包含 a=recvonly,表示设备仅接收媒体数据。

注意:不支持使用 a=sendrecv(同时发送和接收)的场景。请确保配置中指定 a=sendonlya=recvonly,以避免不支持的操作。

在发送 offer 后,对端设备或服务器会通过 answer SDP 响应,最终确认会话参数。

服务器响应规则

服务器的 answer SDP 根据请求类型生成:

  • 推流请求: 服务器响应 a=recvonly
  • 播放请求: 服务器响应 a=sendonly

3. 信令交互规范

请求方法

  • HTTP 方法: POST
  • 请求格式: JSON

请求参数

参数名称 类型 是否必填 描述
version string 固定值 "v1.0"
sessionId string 客户端生成的会话 ID,用于标识
localSdp struct 客户端 SDP 信息(参见 SDP 定义

响应参数

参数名称 类型 是否必填 描述
code int 状态码(参见 状态码说明
message string 状态消息
remoteSdp struct 服务器 SDP 信息(参见 SDP 定义

4. SDP 定义

参数名称 类型 是否必填 描述
type string SDP 类型。请求使用固定值 "offer";响应使用固定值 "answer"
sdp string 标准 SDP 协议内容(参见 RFC4566

5. 状态码说明

状态码 描述
200 请求成功
400 请求体错误
401 参数错误
402 信息错误
403 鉴权失败
404 未找到流
600 不支持 RTC,客户端需强制降级

6. 请求与响应示例

请求示例

{
  "sessionId": "123456789",
  "version": "v1.0",
  "localSdp": {
    "type": "offer",
    "sdp": "<标准 SDP 协议内容>"
  }
}

响应示例

{
  "code": 200,
  "message": "success",
  "remoteSdp": {
    "type": "answer",
    "sdp": "<标准 SDP 协议内容>"
  }
}

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