可视对讲业务最佳实践
本文档面向二次开发者,阐述构建稳定、可运维的可视对讲系统所需的核心概念、基本逻辑、端间交互模式与设计原则。关于 WebRTC 原理、DejaOS 设备 SDK 接入与服务端部署细节,请参阅 可视对讲概述 及同目录下的专题文档。
1. 核心概念
1.1 可视对讲是什么?
可视对讲,是让 门口设备、手机 App(或室内机)之间实现实时 视频 + 语音 通话,并在通话过程中完成 远程开门 等门禁联动操作。
从系统角度看,一次完整的对讲过程包含三个阶段:
- 呼叫建立 — 一方发起请求,另一方收到通知并决定是否接听
- 实时通话 — 双方通过 WebRTC 传输音视频
- 会话结束 — 挂断、记录日志、可选的远程开门
核心分工一句话概括:
- 信令负责"叫人"(协调双方进入同一会话)
- RTC负责"通话"(传输音视频数据)
- 业务平台负责"管人"(权限、日志、推送、开门)
1.2 系统中的四类角色
| 角色 | 职责 | 不参与 |
|---|---|---|
| 门口设备 | 采集视频/音频、播放对方声音、触发呼叫、接收远程开门指令 | 不负责推送通知、不负责权限管理 |
| 手机 App | 接收来电、发起呼叫、播放设备画面、远程开门 | 不直接与设备建立业务通信(需经平台或 RTC 服务) |
| RTC 服务 | 信令转发、SDP/ICE 协商、STUN/TURN 媒体中继 | 不参与业务权限、不存储呼叫记录 |
| 业务平台 | 设备-用户绑定、呼叫权限、推送通知、呼叫日志、远程开门鉴权 | 不传输音视频数据 |
为什么需要业务平台?
RTC 服务只解决"怎么连上、怎么通话",不解决"谁有权呼叫谁、谁接听了、有没有开门"。这些业务逻辑必须由开发者自建的业务平台承担。
1.3 两个关键标识
可视对讲系统中有两个极易混淆的标识,必须在设计阶段明确区分:
| 标识 | 用途 | 谁生成 | 生命周期 |
|---|---|---|---|
| 设备 RTC 标识 | 设备在 RTC 服务中的唯一身份,用于 WebRTC 呼叫路由 | 设备固件 / RTC 服务注册时分配 | 与设备绑定,长期不变 |
| 业务设备 ID | 设备在业务平台(门禁系统)中的唯一身份 | 业务平台分配 | 与设备绑定,长期不变 |
| 会话 ID | 一次呼叫的全链路唯一标识 | 呼叫发起方生成 | 单次呼叫,通话结束后归档 |
最佳实践:
- App 发起 WebRTC 呼叫时,目标地址必须使用 设备 RTC 标识,而非业务设备 ID
- 设备上线后,应将 RTC 标识同步至业务平台,供 App 查询
- 会话 ID 必须在设备、App、业务平台三端保持一致,作为日志、推送、开门的关联键
1.4 媒体能力约束(DejaOS 设备)
DejaOS 设备与 Android 设备在媒体能力上存在差异,设计业务逻辑时必须考虑:
| 能力 | DejaOS 设备 | Android 设备 / 手机 App |
|---|---|---|
| 视频 | 单向(设备→App,App 只看不说) | 双向 |
| 音频 | 双向 | 双向 |
| 主动呼叫 App | 不支持(需经业务平台中转) | 支持 |
这意味着:当门口设备"主动找人"时,实际链路是 设备通知平台 → 平台推送 App → App 反向发起 WebRTC 呼叫,而非设备直接呼叫 App。详见 3.4 业务主叫与技术被叫。
2. 核心数据模型
2.1 呼叫权限(白名单)
可视对讲不是"任意用户可呼叫任意设备",而是通过 设备-用户白名单 控制呼叫关系。
| 字段 | 说明 |
|---|---|
| 设备 ID | 业务平台中的设备标识 |
| 用户 ID | 允许被该设备呼叫的用户 |
| 租户 / 组织 | 多租户隔离 |
设计原则:
- 设备端展示的可呼叫联系人,应从业务平台 实时拉取,不要硬编码在设备本地
- 管理员在后台变更白名单后,设备下次查询即生效
- 设备呼叫用户前,平台必须校验目标用户在白名单中
2.2 呼叫记录
每次呼叫(无论成功与否)都应写入审计日志:
| 字段 | 说明 |
|---|---|
| 会话 ID | 全链路唯一标识 |
| 设备 RTC 标识 | 设备在 RTC 服务中的身份 |
| 设备 ID / 名称 | 业务设备信息 |
| 被叫用户 ID / 姓名 | 用户快照(记录时的姓名,不随用户后续修改而变化) |
| 呼叫方向 | 设备→App 或 App→设备 |
| 呼叫结果 | 见下表 |
| 发起时间 / 接通时间 / 结束时间 | 时间戳 |
| 通话时长 | 接通后的秒数 |