bricks/docs/ai/rtc.md
2025-11-18 16:01:43 +08:00

4.9 KiB
Raw Blame History

根据你提供的源码,其中包含多个控件(类)的定义。我们从中识别出以下三个注册的控件:

  1. bricks.VideoBox —— 视频播放控件
  2. bricks.Signaling —— 信令管理类(非 UI 控件,但作为功能模块)
  3. bricks.RTCP2PConnect —— WebRTC 点对点连接管理类

按照你的要求:每个控件需以 Markdown 格式编写文档,一级标题为控件名称,包含“控件功能、类型、父类”,二级标题为“初始化参数”和“主要事件”

⚠️ 注意:SignalingRTCP2PConnect 是普通 JS 类,并非 UI 控件或继承自 JsWidget,因此归类为“普通控件”;而 VideoBox 继承自 JsWidget,属于 UI 控件。


VideoBox

控件功能:用于在页面中创建并管理 <video> 元素支持设置音视频流MediaStream常用于本地或远程视频渲染。
类型普通控件UI 控件)
父类控件bricks.JsWidget

初始化参数

无显式构造函数,调用 create() 方法时自动创建 DOM 元素并设置默认属性:

  • autoplay: true:自动播放
  • muted: true:静音播放

主要事件

无自定义事件暴露,但内部使用原生 <video> 元素事件(如 play, pause 等)。提供以下方法供外部控制:

  • set_stream(stream):设置 MediaStream 到 video 元素
  • get_stream():获取当前绑定的 MediaStream

Signaling

控件功能:实现 WebSocket 信令通道,用于登录、心跳、消息收发及会话管理,是 WebRTC 多端通信的核心协调模块。支持注册不同类型会话的消息处理器。
类型:普通控件(非 UI 模块)
父类控件:无(独立类)

初始化参数

参数 类型 说明
signaling_url String WebSocket 服务地址
info Object 当前客户端身份信息如用户ID等随每条消息发送
connect_opts Object 连接选项,传递给会话处理器
onclose Function WebSocket 关闭时回调
onlogin Function 登录成功后返回在线用户列表时触发
onopen Function WebSocket 打开时回调(可选)
heartbeat_period Number 心跳周期0 表示不启用

主要事件

通过 recvdata_handler 分发接收到的数据,关键消息类型如下:

  • online: 登录响应,包含当前在线用户列表
  • new_session: 创建新会话请求
  • 自定义 sessiontype 消息:由 add_sessionhandler() 注册的处理器处理

支持动态注册会话处理器:

  • add_sessionhandler(sessiontype, handlerClass):为特定会话类型注册处理器类
  • add_handler(key, handler):为指定 sessionid 添加消息处理器

RTCP2PConnect

控件功能:封装 WebRTC 点对点连接逻辑包括媒体流处理、数据通道、信令交互、ICE 协商等,实现音视频通话与数据传输。
类型:普通控件(通信模块)
父类控件:无(独立类)

初始化参数

参数 类型 说明
signaling Signaling 实例 上层信令实例,用于发送接收信令消息
session Object 当前会话对象 {sessionid, sessiontype}
opts Object 配置项,结构如下:
{
  ice_servers: [],           // STUN/TURN 服务器配置
  peer_info: {},             // 对端信息(用于 callrequest
  auto_callaccept: true,     // 是否自动接受呼叫
  media_options: {            // getUserMedia 参数
    video: true,
    audio: true
  },
  data_connect: true,        // 是否建立 datachannel
  on_pc_connected: Function, // PeerConnection 成功连接回调
  on_pc_disconnected: Function, // PeerConnection 断开回调
  on_dc_open: Function,      // DataChannel 打开回调
  on_dc_close: Function,     // DataChannel 关闭回调
  on_dc_message: Function    // 收到 DataChannel 消息回调
}

主要事件

通过内置 handler 监听并响应以下信令消息类型:

  • sessioncreated:会话创建成功,启动连接流程
  • callrequest:收到呼叫请求,若 auto_accept 则自动响应
  • callaccepted:对方接受呼叫,开始 SDP 协商
  • offer:收到 SDP Offer回复 Answer
  • answer:收到 SDP Answer完成协商
  • icecandidate:收到 ICE 候选,添加到 PeerConnection
  • sessionquit:会话结束,关闭连接

其他运行时事件:

  • oniceconnectionstatechangeICE 状态变化
  • onconnectionstatechange连接状态变化connected/disconnected
  • ondatachannel / ontrack:远程数据通道或媒体轨道到达

总结说明

  • VideoBox 是可视化控件,用于展示视频流。
  • Signaling 是信令中枢,负责与服务器通信。
  • RTCP2PConnect 是 WebRTC 连接控制器,处理点对点连接全流程。

三者协同工作,构成完整的实时通信系统。