IPC预览与对讲
约 5287 字大约 18 分钟
2026-10-16
本页包含已接线核心流程及可选扩展;具体子能力必须按设备、平台与用户授权求交集。参见支持范围、场景索引和命令手册。图中S编号只用于本文定位,不放入实际JSON。
前置条件
已授权观看者主动打开预览;产品配置 admission=direct 或 accept。摄像头隐私、物理遮挡和资源不足均可拒绝;每个观看者拥有独立会话、Peer 和令牌。
图中P代表经鉴权的平台业务控制器和媒体节点,不要求同一进程;A是用户应用,D是设备。控制图描述一种合法顺序,跨通道不承诺严格同序。
完整时序
报文索引
编号按图阅读;编号保留历史引用,不要求数值连续。字段定义以命令链接为准。
| 编号 | 发送→接收 | Topic/接口 | 方法及契约 | 应答/等待 | 状态或作用 |
|---|---|---|---|---|---|
| S07-M01 | A→P | APP↑ | interaction.open | HTTP受理;随后 interaction.result;10秒 | 平台验证目标、策略和能力后邀请设备;接收 HTTP202 不是接通。 |
| S07-M02 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M03 | P→D | SIG↓ | sessionInvite | sessionAccept 或 sessionReject;30秒/到期 | 平台邀请;humanCall 固定 accept;direct 也必须设备确认资源和隐私状态,不能跳过 sessionAccept。 |
| S07-M04 | D→P | SIG↑ | sessionAccept | requestAck;10秒 | 沿用邀请 msgToken。邀请答复本身是需确认的请求,等待平台 ACK 后协商媒体。 |
| S07-M05 | P→D | SIG↓ | requestAck | —;不等待 | 原邀请 token;确认接听有效,不携带 SDP、不宣告已接通。 |
| S07-M06 | D→P | SIG↑ | mediaOffer | mediaAnswer;15秒 | 设备为自身 Peer 的 offerer;初始与重协商同一方法,只允许一个在途 offer。 |
| S07-M07 | P→D | SIG↓ | mediaAnswer | —;不等待 | 完成 SDP 交换,仍需 ICE/DTLS 连通与 mediaState,不直接 established。 |
| S07-M08 | D→P | SIG↑ | mediaState | requestAck;10秒 | 报告设备实际传输状态。WebRTC 需 ICE/DTLS 成功;UDP 需有效会话媒体探测且平台也收到有效包。 |
| S07-M09 | P→D | SIG↓ | requestAck | —;不等待 | 仅确认状态上报;平台须独立验证自身连通状态。 |
| S07-M10 | A→P | APP↑ | interaction.mediaOffer | HTTP受理;随后 interaction.result;10秒 | 应用 Peer 自己协商;设备完成 SDP 不代替应用 Peer。 |
| S07-M11 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M12 | A→P | APP↑ | interaction.mediaState | HTTP受理;随后 interaction.result;10秒 | 应用报告 ICE/DTLS 状态;平台需独立校验。 |
| S07-M13 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M14 | P→D | SIG↓ | sessionEstablished | —;不等待 | 平台确认所需参与端媒体已连通后通知;不等于已收到首包或扬声器起播。 |
| S07-M15 | P→D | SIG↓ | trackControl | 反方向 trackState;10秒 | publish/stop 控制源轨;subscribe/unsubscribe 仅本参与端订阅;pause/resume 只作用本端发布或订阅,不关闭其他观看者。请求不等于实际生效。 |
| S07-M16 | D→P | SIG↑ | trackState | —;不等待 | 双向实际状态;应答同 token 和 code,主动报告独立 token。设备失联只能标 unknown,不能假报 stopped。 |
| S07-M17 | A→P | APP↑ | interaction.open | HTTP受理;随后 interaction.result;10秒 | 平台验证目标、策略和能力后邀请设备;接收 HTTP202 不是接通。 |
| S07-M18 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M19 | P→D | SIG↓ | sessionInvite | sessionAccept 或 sessionReject;30秒/到期 | 平台邀请;humanCall 固定 accept;direct 也必须设备确认资源和隐私状态,不能跳过 sessionAccept。 |
| S07-M20 | D→P | SIG↑ | sessionAccept | requestAck;10秒 | 沿用邀请 msgToken。邀请答复本身是需确认的请求,等待平台 ACK 后协商媒体。 |
| S07-M21 | P→D | SIG↓ | requestAck | —;不等待 | 原邀请 token;确认接听有效,不携带 SDP、不宣告已接通。 |
| S07-M22 | D→P | SIG↑ | mediaOffer | mediaAnswer;15秒 | 设备为自身 Peer 的 offerer;初始与重协商同一方法,只允许一个在途 offer。 |
| S07-M23 | P→D | SIG↓ | mediaAnswer | —;不等待 | 完成 SDP 交换,仍需 ICE/DTLS 连通与 mediaState,不直接 established。 |
| S07-M24 | D→P | SIG↑ | mediaState | requestAck;10秒 | 报告设备实际传输状态。WebRTC 需 ICE/DTLS 成功;UDP 需有效会话媒体探测且平台也收到有效包。 |
| S07-M25 | P→D | SIG↓ | requestAck | —;不等待 | 仅确认状态上报;平台须独立验证自身连通状态。 |
| S07-M26 | A→P | APP↑ | interaction.mediaOffer | interaction.result;10秒 | 此参与者自己的Peer独立协商,不复用别人的连接。 |
| S07-M27 | P→A | APP↓ | interaction.result | —;不等待 | 仅完成SDP交换,尚未接通。 |
| S07-M28 | A→P | APP↑ | interaction.mediaState | interaction.result;10秒 | 应用实际连通上报,平台还要校验媒体节点状态。 |
| S07-M29 | P→A | APP↓ | interaction.result | —;不等待 | 确认状态已受理,不等于首帧显示。 |
| S07-M30 | P→D | SIG↓ | sessionEstablished | —;不等待 | 平台确认所需参与端媒体已连通后通知;不等于已收到首包或扬声器起播。 |
| S07-M31 | A→P | APP↑ | interaction.end | HTTP受理;随后 interaction.result;10秒 | 由参与者结束其有权结束的会话;观看者只退出自己的观看会话,不终止共享源。 |
| S07-M32 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M33 | P→D | SIG↓ | sessionEnded | —;不等待 | 主动结束用原 token 和 code;其他结束用独立事件 token 与 eventSeq。ended 是唯一会话终态。 |
| S07-M34 | A→P | APP↑ | interaction.subscribe | HTTP受理;随后 interaction.result;10秒 | 每个观看者新建独立接收会话及令牌;不能共享其他观看者令牌。 |
| S07-M35 | P→A | APP↓ | interaction.result | —;不等待 | 经 WS interaction.event 发给原操作者,原 token;设备通知不能充当应用请求应答。 |
| S07-M36 | A→P | APP↑ | interaction.mediaOffer | interaction.result;10秒 | 此参与者自己的Peer独立协商,不复用别人的连接。 |
| S07-M37 | P→A | APP↓ | interaction.result | —;不等待 | 仅完成SDP交换,尚未接通。 |
| S07-M38 | A→P | APP↑ | interaction.mediaState | interaction.result;10秒 | 应用实际连通上报,平台还要校验媒体节点状态。 |
| S07-M39 | P→A | APP↓ | interaction.result | —;不等待 | 确认状态已受理,不等于首帧显示。 |
| S07-M40 | A→P | APP↑ | interaction.end | interaction.result;10秒 | 第二观看者退出,只释放其Peer和订阅。 |
| S07-M41 | P→A | APP↓ | interaction.result | —;不等待 | 源仍被第一观看者使用,不停共享视频。 |
| S07-M42 | P→D | SIG↓ | trackControl | 反方向 trackState;10秒 | publish/stop 控制源轨;subscribe/unsubscribe 仅本参与端订阅;pause/resume 只作用本端发布或订阅,不关闭其他观看者。请求不等于实际生效。 |
| S07-M43 | D→P | SIG↑ | trackState | —;不等待 | 双向实际状态;应答同 token 和 code,主动报告独立 token。设备失联只能标 unknown,不能假报 stopped。 |
| S07-M44 | P→D | SIG↓ | sessionEnded | —;不等待 | 主动结束用原 token 和 code;其他结束用独立事件 token 与 eventSeq。ended 是唯一会话终态。 |
| S07-M45 | P→A | APP↓ | interaction.state | —;不等待 | 原操作者/参与者会话事件;与 interaction.result 独立;有 eventSeq。 |
| S07-M46 | D→P | SIG↑ | sessionReject | requestAck;10秒 | 沿用邀请 token;不创建媒体连接,不抢占现有前台会话。 |
| S07-M47 | P→D | SIG↓ | requestAck | —;不等待 | 成功拒绝请求的 code=200,与业务拒绝原因区分;后发独立 sessionEnded 终态通知。 |
| S07-M48 | P→D | SIG↓ | sessionEnded | —;不等待 | 主动结束用原 token 和 code;其他结束用独立事件 token 与 eventSeq。ended 是唯一会话终态。 |
逐条JSON
S07-M01 · interaction.open
{
"msgToken": "s07-98",
"method": "interaction.open",
"params": {
"purpose": "ipcLiveView",
"cameraId": "front"
},
"target": {
"productID": "p-demo",
"deviceName": "device-demo"
}
}S07-M02 · interaction.result
{
"msgToken": "s07-98",
"method": "interaction.result",
"sessionId": "s07-session",
"code": 200,
"data": {
"operation": "interaction.open",
"state": "invited",
"sessionId": "s07-session"
}
}S07-M03 · sessionInvite
{
"msgToken": "s07-99",
"method": "sessionInvite",
"sessionId": "s07-session",
"eventSeq": 1,
"params": {
"purpose": "ipcLiveView",
"admission": "direct",
"cameraId": "front",
"transport": "webrtc",
"tracks": [
{
"trackId": "video-1",
"kind": "video",
"sourceId": "front",
"direction": "sendonly",
"codec": "H264",
"state": "requested"
}
],
"expiresAt": 1900000000000
}
}S07-M04 · sessionAccept
{
"msgToken": "s07-99",
"method": "sessionAccept",
"sessionId": "s07-session",
"params": {
"acceptedTracks": [
"video-1"
]
}
}S07-M05 · requestAck
{
"msgToken": "s07-99",
"method": "requestAck",
"sessionId": "s07-session",
"code": 200,
"data": {
"requestMethod": "sessionAccept",
"result": {
"state": "negotiating"
}
}
}S07-M06 · mediaOffer
{
"msgToken": "s07-100",
"method": "mediaOffer",
"sessionId": "s07-session",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP offer>"
}
}
}S07-M07 · mediaAnswer
{
"msgToken": "s07-100",
"method": "mediaAnswer",
"sessionId": "s07-session",
"code": 200,
"data": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP answer>"
}
}
}S07-M08 · mediaState
{
"msgToken": "s07-101",
"method": "mediaState",
"sessionId": "s07-session",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}S07-M09 · requestAck
{
"msgToken": "s07-101",
"method": "requestAck",
"sessionId": "s07-session",
"code": 200,
"data": {
"requestMethod": "mediaState",
"result": {
"mediaRevision": 1,
"state": "connected"
}
}
}S07-M10 · interaction.mediaOffer
{
"msgToken": "s07-102",
"method": "interaction.mediaOffer",
"sessionId": "s07-session",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP viewer offer>"
}
}
}S07-M11 · interaction.result
{
"msgToken": "s07-102",
"method": "interaction.result",
"sessionId": "s07-session",
"code": 200,
"data": {
"operation": "interaction.mediaOffer",
"state": "negotiating",
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP viewer answer>"
}
}
}S07-M12 · interaction.mediaState
{
"msgToken": "s07-103",
"method": "interaction.mediaState",
"sessionId": "s07-session",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}S07-M13 · interaction.result
{
"msgToken": "s07-103",
"method": "interaction.result",
"sessionId": "s07-session",
"code": 200,
"data": {
"operation": "interaction.mediaState",
"state": "connected",
"mediaRevision": 1
}
}S07-M14 · sessionEstablished
{
"msgToken": "s07-104",
"method": "sessionEstablished",
"sessionId": "s07-session",
"eventSeq": 2,
"data": {
"state": "established",
"mediaRevision": 1
}
}S07-M15 · trackControl
{
"msgToken": "s07-105",
"method": "trackControl",
"sessionId": "s07-session",
"eventSeq": 3,
"params": {
"trackId": "video-1",
"operation": "publish",
"mediaRevision": 1
}
}S07-M16 · trackState
{
"msgToken": "s07-105",
"method": "trackState",
"sessionId": "s07-session",
"code": 200,
"data": {
"trackId": "video-1",
"state": "active",
"mediaRevision": 1
}
}S07-M17 · interaction.open
{
"msgToken": "s07-106",
"method": "interaction.open",
"params": {
"purpose": "ipcTalk",
"cameraId": "front",
"callId": "existing-im-call"
},
"target": {
"productID": "p-demo",
"deviceName": "device-demo"
}
}S07-M18 · interaction.result
{
"msgToken": "s07-106",
"method": "interaction.result",
"sessionId": "s07-talk",
"code": 200,
"data": {
"operation": "interaction.open",
"state": "invited",
"sessionId": "s07-talk"
}
}S07-M19 · sessionInvite
{
"msgToken": "s07-107",
"method": "sessionInvite",
"sessionId": "s07-talk",
"eventSeq": 1,
"params": {
"purpose": "ipcTalk",
"admission": "direct",
"transport": "webrtc",
"tracks": [
{
"trackId": "mic-1",
"kind": "audio",
"sourceId": "mic",
"direction": "sendonly",
"codec": "opus",
"state": "requested"
},
{
"trackId": "speaker-1",
"kind": "audio",
"sourceId": "speaker",
"direction": "recvonly",
"codec": "opus",
"state": "requested"
}
],
"expiresAt": 1900000000000,
"cameraId": "front"
}
}会议绑定和IM发言资格由后端以可信身份保存、持续复核,不由设备上传成员权限或借用预览会话。此独立对讲邀请仅请求麦克风发布和扬声器接收,不附加视频、AI交互模式或AI取帧授权。当前契约与准入已实现,持久对讲Owner及C++实际媒体仍待接入,见支持范围。
S07-M20 · sessionAccept
{
"msgToken": "s07-107",
"method": "sessionAccept",
"sessionId": "s07-talk",
"params": {
"acceptedTracks": [
"mic-1",
"speaker-1"
]
}
}S07-M21 · requestAck
{
"msgToken": "s07-107",
"method": "requestAck",
"sessionId": "s07-talk",
"code": 200,
"data": {
"requestMethod": "sessionAccept",
"result": {
"state": "negotiating"
}
}
}S07-M22 · mediaOffer
{
"msgToken": "s07-108",
"method": "mediaOffer",
"sessionId": "s07-talk",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP offer>"
}
}
}S07-M23 · mediaAnswer
{
"msgToken": "s07-108",
"method": "mediaAnswer",
"sessionId": "s07-talk",
"code": 200,
"data": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP answer>"
}
}
}S07-M24 · mediaState
{
"msgToken": "s07-109",
"method": "mediaState",
"sessionId": "s07-talk",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}S07-M25 · requestAck
{
"msgToken": "s07-109",
"method": "requestAck",
"sessionId": "s07-talk",
"code": 200,
"data": {
"requestMethod": "mediaState",
"result": {
"mediaRevision": 1,
"state": "connected"
}
}
}S07-M26 · interaction.mediaOffer
{
"msgToken": "s07-talk-peer-3",
"method": "interaction.mediaOffer",
"sessionId": "s07-talk",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP talk offer>"
}
}
}S07-M27 · interaction.result
{
"msgToken": "s07-talk-peer-3",
"method": "interaction.result",
"sessionId": "s07-talk",
"code": 200,
"data": {
"operation": "interaction.mediaOffer",
"state": "negotiating",
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP talk answer>"
}
}
}S07-M28 · interaction.mediaState
{
"msgToken": "s07-talk-peer-4",
"method": "interaction.mediaState",
"sessionId": "s07-talk",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}S07-M29 · interaction.result
{
"msgToken": "s07-talk-peer-4",
"method": "interaction.result",
"sessionId": "s07-talk",
"code": 200,
"data": {
"operation": "interaction.mediaState",
"state": "connected",
"mediaRevision": 1
}
}S07-M30 · sessionEstablished
{
"msgToken": "s07-110",
"method": "sessionEstablished",
"sessionId": "s07-talk",
"eventSeq": 2,
"data": {
"state": "established",
"mediaRevision": 1
}
}S07-M31 · interaction.end
{
"msgToken": "s07-111",
"method": "interaction.end",
"sessionId": "s07-talk",
"params": {
"reason": "userStopped"
}
}S07-M32 · interaction.result
{
"msgToken": "s07-111",
"method": "interaction.result",
"sessionId": "s07-talk",
"code": 200,
"data": {
"operation": "interaction.end",
"state": "ended"
}
}S07-M33 · sessionEnded
{
"msgToken": "s07-112",
"method": "sessionEnded",
"sessionId": "s07-talk",
"eventSeq": 3,
"data": {
"state": "ended",
"reason": "userStopped"
}
}S07-M34 · interaction.subscribe
{
"msgToken": "s07-113",
"method": "interaction.subscribe",
"sessionId": "s07-session",
"params": {
"trackId": "video-1"
}
}S07-M35 · interaction.result
{
"msgToken": "s07-113",
"method": "interaction.result",
"sessionId": "s07-viewer-b",
"code": 200,
"data": {
"operation": "interaction.subscribe",
"state": "negotiating",
"sessionId": "s07-viewer-b",
"playbackToken": "<viewer-b-only-token>"
}
}S07-M36 · interaction.mediaOffer
{
"msgToken": "s07-viewer-b-peer-7",
"method": "interaction.mediaOffer",
"sessionId": "s07-viewer-b",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP second viewer offer>"
}
}
}S07-M37 · interaction.result
{
"msgToken": "s07-viewer-b-peer-7",
"method": "interaction.result",
"sessionId": "s07-viewer-b",
"code": 200,
"data": {
"operation": "interaction.mediaOffer",
"state": "negotiating",
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP second viewer answer>"
}
}
}S07-M38 · interaction.mediaState
{
"msgToken": "s07-viewer-b-peer-8",
"method": "interaction.mediaState",
"sessionId": "s07-viewer-b",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}S07-M39 · interaction.result
{
"msgToken": "s07-viewer-b-peer-8",
"method": "interaction.result",
"sessionId": "s07-viewer-b",
"code": 200,
"data": {
"operation": "interaction.mediaState",
"state": "connected",
"mediaRevision": 1
}
}S07-M40 · interaction.end
{
"msgToken": "viewer-b-end",
"method": "interaction.end",
"sessionId": "s07-viewer-b",
"params": {
"reason": "userStopped"
}
}S07-M41 · interaction.result
{
"msgToken": "viewer-b-end",
"method": "interaction.result",
"sessionId": "s07-viewer-b",
"code": 200,
"data": {
"operation": "interaction.end",
"state": "ended"
}
}S07-M42 · trackControl
{
"msgToken": "s07-114",
"method": "trackControl",
"sessionId": "s07-session",
"eventSeq": 4,
"params": {
"trackId": "video-1",
"operation": "stop",
"mediaRevision": 1
}
}S07-M43 · trackState
{
"msgToken": "s07-114",
"method": "trackState",
"sessionId": "s07-session",
"code": 200,
"data": {
"trackId": "video-1",
"state": "stopped",
"mediaRevision": 1
}
}S07-M44 · sessionEnded
{
"msgToken": "s07-115",
"method": "sessionEnded",
"sessionId": "s07-session",
"eventSeq": 5,
"data": {
"state": "ended",
"reason": "permissionRevoked"
}
}S07-M45 · interaction.state
{
"msgToken": "s07-116",
"method": "interaction.state",
"sessionId": "s07-session",
"eventSeq": 6,
"data": {
"state": "ended",
"reason": "permissionRevoked"
}
}S07-M46 · sessionReject
{
"msgToken": "s07-99",
"method": "sessionReject",
"sessionId": "s07-session",
"params": {
"reason": "privacyEnabled"
}
}S07-M47 · requestAck
{
"msgToken": "s07-99",
"method": "requestAck",
"sessionId": "s07-session",
"code": 200,
"data": {
"requestMethod": "sessionReject",
"result": {
"state": "ended",
"reason": "privacyEnabled"
}
}
}S07-M48 · sessionEnded
{
"msgToken": "s07-117",
"method": "sessionEnded",
"sessionId": "s07-session",
"eventSeq": 7,
"data": {
"state": "ended",
"reason": "userRejected"
}
}媒体与本地动作
| 编号 | 路径 | 格式与约束 |
|---|---|---|
| S07-R01 | D→P | WebRTC ICE + DTLS 握手;完整 SDP 不代表握手成功;只有网络连通后才报告 connected。 |
| S07-R02 | A→P | WebRTC ICE + DTLS;观看者连接成功后回报,不共用其他观看者 Peer。 |
| S07-R03 | D→P | WebRTC DTLS-SRTP H264 视频轨;设备源媒体。 |
| S07-R04 | P→A | WebRTC DTLS-SRTP H264 授权订阅;预览不自动开启观看者麦克风。 |
| S07-R05 | D→P | WebRTC ICE + DTLS 握手;完整 SDP 不代表握手成功;只有网络连通后才报告 connected。 |
| S07-R06 | A→P | WebRTC ICE + DTLS 握手;本参与端独立完成连通验证。 |
| S07-R07 | A→D | WebRTC 经媒体节点双向 Opus 音轨;应用 Peer 必须复用本页独立协商步骤;音频焦点获准后才上行,对讲能力应含AEC或按键收发策略。 |
| S07-R08 | A→P | WebRTC ICE + DTLS 握手;本参与端独立完成连通验证。 |
| S07-R09 | P→A | WebRTC H264 独立观看者订阅;由服务端授权映射共享源;一人退出不影响其他观看者。 |
异常、状态与资源释放
以下JSON仅为报文正文;编号、方向、说明不发送。loop下一轮需分配新token/inputId;同一次请求重试必须沿用原token。字段以命令手册为准。
路由缩写均展开于公共约定。ACT/PROP超时以产品配置为准;内部工具以工具超时为准,不套用10秒设备统一信令超时。
accept 版本将邀请 admission 改为 accept,设备必须等待真实本地确认;不支持确认则422,不降级 direct。第二观看者按独立 s07-viewer-b 执行应用 SDP/连通流程,服务端维护源轨映射;一个观看者退出仅释放自身订阅,最后订阅者退出才停共享源。撤权先撤销该用户订阅和令牌;隐私开启停所有摄像头会话和AI取帧。设备未回 stopped 时标 unknown,服务端先停止转发。对讲结束不结束预览。
能力不支持、无权限、设备拒绝、协商失败、断网、重复请求、过期会话及迟到媒体按S11共通失败流程和公共错误表处理。业务专属分支以本页为准,不因错误静默打开额外能力。
验证入口
更新日志
2026/10/16 16:04
查看所有更新日志
fe3a7-docs(AI与音视频): 按场景整理完整接入流程与命令契约于
