接续、资源与恢复
约 7753 字大约 26 分钟
2026-10-16
先读控制公共规则,再按 Topic、method 和方向查阅。应用侧使用鉴权命令提交、事件拉取与确认;事件结构不表示已启用 WebSocket 推送。能力可用性见支持范围。
endpointControl · SIG↑
- 方向:设备→平台;应答:endpointState。
- 触发、权限与状态:跨端接续先邀请目标并独立协商,目标连通/用户确认前保留原端。commit原子转移参与者端绑定并撤销未声明对应能力的端发送权限;同一用户不双端同时发声。不同用户接管属于callControl.transfer,不复用接续权限。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:跨端接续与资源抢占恢复。
AI接续通知与失败收尾(组件已验): 原prepare成功的endpointState应答是已受理操作的历史事实,不因候选已推进ready而失效。平台仍按原队列次序投递原应答、再投递ready,不跳过前序;历史应答只保留原token、原修订和原字节,不提升当前输入许可、模型scope或设备权限。源端投递核其已绑定的控制能力,不要求源端具有目标接听能力;目标准入仍独立严格核验。原模型致命失败时,原会话结束、尚未提交候选的failed/mediaFailed及目标公开腿唯一sessionEnded同事务提交;写入失败全部回滚,不靠设备本地邀请期限代替平台终态。该收尾不迁移scope、不创建新模型、不恢复已停止的采集,也不重复关闭实际资源。
原scope请求已经发送但尚未收到模型确认时,平台只停止原模型和双端资源,不将未知结果视作ready或commit,也不回退并重签旧授权。失败终态仅凭同一原请求、候选修订、Owner、实际停止事实及原源绑定提交;第二次接续使用最后已确认提交的源公开腿,不能以新候选身份替换原源。父会话、候选和唯一目标终态仍同事务收敛,重复结束与迟到scope确认不得复活。已经committed或模型已确认的记录不走此未提交候选分支,其当前端终止仍遵循已提交路径。上述是后端组件契约与测试结果,不表示完整三端实际媒体接续已验收。
同模型UDP成功移交立即撤销旧媒体许可并停止原桥,但旧监听socket在原候选固定剩余预算内只弃包,随后回收,不以提前关端口代替正式源退场通知。原单调截止与原deadline剩余量取最短,不从commit重新计时;实际设备采集/播放停止仍核原驱动和focus回执。退休端口不授权旧输入/回复,超时不表示设备released;未知scope失败和普通终止仍全部关闭。详见支持范围。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| operation | string | 必填 | prepare/commit/abort |
| expectedRevision | uint | 必填 | 端切换修订号 |
| handoffId | string | 必填 | 幂等接续事务 |
| target | Party | prepare必填 | 同一用户授权终端 |
| candidateSessionId | string | commit必填 | 目标已建立会话腿 |
{
"msgToken": "s18-62",
"method": "endpointControl",
"sessionId": "s18-session",
"params": {
"operation": "prepare",
"expectedRevision": 0,
"handoffId": "handoff-1",
"target": {
"kind": "endpoint",
"id": "tablet-a"
}
}
}对应跨端接续与资源抢占恢复:M01;其他操作按条件字段校验。
应用interaction.open的候选显式关联
对目标端明确确认的应用IPC预览或IM额外成员open增加可选params.handoff。普通open省略该字段行为不变;不能传入null或空对象,拒绝未知/重复字段。它不新增method或Topic,不传入设备sessionInvite,也不是客户端上报ready。应用HTTP外层及普通open其余字段见应用接口。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| params.handoff | object | 普通open可省;明确接续时必填 | purpose=ipcLiveView或已有额外会议成员ipcTalk;只含下列两字段 |
| params.handoff.sourceSessionId | string | handoff存在时必填 | 64字符内合法原会话ID;必须仍属原prepare及同一摄像头/监听范围,会议还要求原callId/成员实例/设备锚点 |
| params.handoff.handoffId | string | handoff存在时必填 | 128字符内合法原prepare事务ID,固定30秒内唯一绑定候选 |
{"msgToken":"target-open-original","method":"interaction.open","target":{"productID":"example-product","deviceName":"example-device"},"params":{"purpose":"ipcLiveView","cameraId":"front","handoff":{"sourceSessionId":"source-preview","handoffId":"handoff-original"}}}源端不得代目标确认;目标必须用自己同用户已注册端点提交。同事务另一候选或代次不允许替换已绑定腿,资源配额不足仍拒绝并保持原端。重复原open重放原结果,不分配第二媒体或推进ready;过期、无授权、并行串腿冲突不降级为普通open。
会议接续不创建第二IM成员,不放宽原人数或单设备扬声器预算;目标即使真实连通也没有混音输入/输出,待正式commit移交同一原AudioLeg。原MAC禁麦许可不会因换端解除,结束旧APP或候选仅通知该应用,不能向原共享设备发送sessionEnded。初始设备双端控制者不能使用额外成员入口规避设备生命周期。
endpointState · SIG↓
- 方向:平台→设备;应答:—。
- 触发、权限与状态:prepare最多30秒,超时保留原端;commit同token幂等,重复不能二次切换。未声明对应能力的端收到committed后停止本地采集播放并结束旧腿;迟到未声明对应能力的端媒体因端授权失效被丢弃。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:跨端接续与资源抢占恢复。
revision是原会话范围的独立接续修订号;无code的主动状态使用原会话全局eventSeq,不以接续revision充当事件水位。原操作成功应答code=200且无eventSeq,failed应答须code>=400,主动失败/超时事件无code。公开reason白名单为handoffTimeout、userCancelled、mediaFailed、permissionRevoked、sourceChanged;执行层分别表达超时、取消、媒体故障、权限撤销、原源变化,不将任意失败统写为超时。仅failed/aborted携带reason,只有ready/committed携带candidateSessionId。准备或ready均不撤销原端;abort/超时仅清理该事务已绑定且Owner代次匹配的候选,不得误停同ID新代次。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| state | string | 必填 | preparing/ready/committed/aborted/failed |
| revision | uint | 必填 | 接续修订号 |
| handoffId | string | 必填 | 事务 |
| candidateSessionId | string | ready/committed必填 | 目标腿 |
| reason | string | failed/aborted必填 | handoffTimeout/userCancelled/mediaFailed/permissionRevoked/sourceChanged;其余状态禁止 |
{
"msgToken": "s18-62",
"method": "endpointState",
"sessionId": "s18-session",
"data": {
"state": "preparing",
"revision": 1,
"handoffId": "handoff-1"
},
"code": 200
}对应跨端接续与资源抢占恢复:M02;其他操作按条件字段校验。
focusControl · SIG↓
- 方向:平台→设备;应答:focusState。
- 触发、权限与状态:仅平台在鉴权业务动作后发起,不能自行续长授权;优先级emergency>call>conversation>background,紧急类仅默认抢speaker。suspend保存恢复令牌和用户意图版本;restore只有原会话存活、授权有效、意图未变化且无更高优先级时允许。隐私或用户停止永远优先。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:实时广播分区与紧急插播、跨端接续与资源抢占恢复。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| operation | string | 必填 | acquire/suspend/restore/release |
| expectedRevision | uint | 必填 | 设备资源修订号 |
| focusId | string | 必填 | 焦点租约ID |
| resources | string[] | 必填 | 1~16项且不重复:microphone/speaker/display/camera:ID;camera:ID整体最多128字节,ID非空且不含空白、控制字符、斜杠或反斜杠;display为设备默认显示输出,不是摄像头采集 |
| priority | string | 必填 | background/conversation/call/emergency |
| resumePolicy | string | 必填 | never/explicit/ifUnchanged |
| expiresAt | int64 | 仅acquire/restore必填 | 正整数Unix毫秒截止,最大9007199254740991;suspend/release不得携带,不隐含续租 |
{
"msgToken": "s16-52",
"method": "focusControl",
"sessionId": "s16-music-receiver",
"params": {
"operation": "suspend",
"expectedRevision": 0,
"focusId": "music-focus",
"resources": [
"speaker"
],
"priority": "emergency",
"resumePolicy": "ifUnchanged"
},
"eventSeq": 1
}对应实时广播分区与紧急插播:M03;其他操作按条件字段校验。
display用于视频播放与视频通话的显示输出,和camera:ID采集资源独立。音乐仅申请speaker;无声视频仅申请display;带音轨视频须一次申请["speaker","display"],按整组原子取得或拒绝,不能部分取得后谎报成功。设备没有显示驱动时拒绝display,不得退化成摄像头资源或仅播声音却回报视频播放成功。能力集合不是每次必须占用的全集;C++分派与后端能力检查已支持声明内的非空申请组,各原租约随后固定完整组,缺项回执仍失败。完整实际全局驱动及端到端联调仍待完成,不改变现行设备协议。
AI转人工第三屏障复用原操作,不新增transfer焦点动作或自报来源字段。原AIsuspend与本端新人际腿acquire必须由平台原escalate账本关联;设备各自按原sessionId/focusId执行,不能按“当前会话”猜目标。两请求都携带完整microphone/speaker组,全局expectedRevision从原实际回执推进;priority=call本身不能覆盖旧租约,须先完成原组suspend。原租约不存在或端未实际声明整组驱动能力时明确拒绝,不以speaker租约补造microphone。后端已接入原prepared出处的有限条件准入,普通negotiating会话及未声明对应能力的端规则不变;完整宿主实态移交与最终路由仍待闭环。
完整取得包括两端:双Peer prepared后,先在目标原remote腿发M67同合同的focusControl.acquire,收到该目标原token/M68同合同的完整focusState.acquired,才发本端M65/M66,再发本端M67/M68。目标取得使用目标自己的首次完整idle账本、全局CAS、focusId和原连接,不使用本端AI租约;目标已有AI占用、未知状态或在途控制均拒绝,不自动暂停或抢占。两端acquire.expiresAt同为原持久HumanBusinessDeadline,操作和实际ACK均受原FocusDeadline及各自短Owner租约约束;最终三CAS仍须复核两端当前实际租约。已实现的Queue/ACK与生成RPC回归不等于真实双端物理资源取得或最终transferred。
AI转人工须分别持久化业务授权截止和在途阶段截止:内部HumanBusinessDeadline创建时固定为原AI已配置、已授权的会话Deadline(若当前IM双方授权另有更早截止,取最早),与两个人际腿的业务Deadline一致;不从设备请求、Redis忙线TTL或固定长常量生成。30秒邀请、45秒候选、首次双Peer准备后的15秒FocusDeadline只限制在途,最终提交不续期。M67 acquire.expiresAt使用原持久人工业务截止,操作和原回执仍须在焦点阶段截止前完成;旧意图省略这些内部来源时不能补长授权或完成最终移交。这些不是新增公开报文字段,短Owner租约、当前连接及双方权限仍须持续复验,业务截止真正关闭Peer;原AI模型结束不能删除已独立获准的人际组。当前已实现期限分离与准备阶段持久化,最终路由及持续生命周期仍须实际屏障接线验证。
设备资源修订号为连接内全局安全整数0~9007199254740991;原请求实际成功改变资源状态后才报告expectedRevision+1,不能因接纳或MQTT确认推进。重复原token重放原结果,不再次推进;达到整数上界不能溢出或回零。请求eventSeq必填,原应答不回显平台事件序号。租约的sessionId/focusId和完整资源组必须保持原关联,集合顺序不同不构成资源变化,但同token改写报文仍按公共幂等冲突处理。priority不是设备自行提权的授权,悬挂/恢复仍须核验原会话、当前权限与用户意图;这些条件不是JSON解析器的职责。
关闭与重新开启分开授权:Live子会话平台终态、源许可到期或父AI结束后,不再允许acquire/restore/suspend;同一原连接的已实际持有租约仍可按原完整组、原focusId/sessionId及当前CAS执行有限release。端侧必须保有原授信会话、已校验平台子会话终态、实际媒体退出及固定保留窗口;本地关闭、未知连接或仅取消受理不能产生此证明。父AI切换也不能借新父重新开启旧节目。原物理组已停止不等于租约released,须新的完整关闭票据实际完成后才回原focusState;未完成释放的执行器不能因槽容量被退役。云端Owner清理根据原持久媒体清理记录派生,不依赖存活的媒体注册表、不刷新源许可;在途关闭保留原token、字节和截止,不改作新请求。内部关闭来源和release_only不增加设备字段或模型输入。断网、当前主人/连接失效或证明不足保持未知,不伪造成功。
AI转人工的旧AI正式关闭另核原最终四通知ID/SHA均已投递,之后才排原AI session/focusId的完整组release,固定十秒内原最早截止且不延长业务或Owner许可。原实际成功回执才写释放墓碑并推进连接全局资源修订;新人际租约实态可能仍是较早修订,后继人工控制必须采用当前全局水位,不把旧AI释放当作释放人工资源。原token重放不推进修订;错误连接实例、半组、迟到或未知均不能恢复旧AI或造关闭成功。此专属ended来源不放宽普通终态会话的焦点准入;原本人授权私有投递仍须核精确墓碑、人工实际路由、原目录及原接收实例。上述已补受控SQL/RedisLua/Pion与生成RPC回归,仍非真实共享宿主端云验收。
正式旧AI释放墓碑缺失、在途或未知时,合法人际hold/resume保持在途拒绝,不排双方焦点命令、不停原RTP、不新增控制账本;不能依赖页面按钮阻止竞态。原staleRevision/invalidState拒绝及已完成响应精确重放仍不执行资源操作。人工业务截止或原Owner失效照常关闭原实际组,不能被释放在途遮蔽。
AI跨设备接续的目标取得是另一条独立出处:endpointState.committed及实际UDP/Peer交换完成后,目标仍不得输入;平台向目标公开sessionId发送完整microphone/speaker组的acquire,priority=conversation、resumePolicy=explicit,沿原连接全局修订执行。Owner仅固定一次token、正文和不超过两秒的请求截止;acquire.expiresAt保留原业务期限,重投不续长。只有该原token的完整实际acquired回执、当前物理连接及fresh核权均成立才解除媒体屏障,初建未要求focus不构成目标端豁免。这里不借旧创建sessionId向目标另建模型,也不增加报文字段。
当前目标挂断时,平台沿同一原组排独立release(无expiresAt),设备须两资源实际停止后才回完整released。已持久的原释放允许在模型终态后的固定请求期限内收尾;精确公开腿、token、当前epoch/instance、完整组和原Pending缺一即拒绝,不接受新的取得或恢复。模型终态只证明模型结束,不证明HAL已释放;未知、过期或未取得不得伪造released。正式Owner/SQL/UDP及DMS定向竞态证据见支持范围,C++端云仍待验收。
实现状态:Go及C++已有严格focusControl/focusState解析与原请求全组关联,另有支持范围、支持范围和支持范围。独立原回执已接支持范围。正式桌面已接三组实际末端与首次idle;后端持续Owner和有限终态释放已补定向集成,当前完整验证记录见支持范围,MCP实际媒体端云验收继续。首次idle及Owner续租仍核验全部管理资源,不因允许单资源申请放宽。C++固定原租约异步执行器仍须显式许可及全局共享驱动;端侧优先级仲裁、完整资源组实际驱动与MCP合并E2E继续实施,见支持范围。不能以报文解析或夹具通过宣称焦点已取得,不隐含增加设备能力。
focusState · SIG↑
- 方向:设备→平台;应答:—。
- 触发、权限与状态:设备实际停播/停采集后确认,不能只靠云端逻辑报告已切换。租约到期本地释放;断线不凭旧restore重启麦克风。全双工AI的AEC能力与资源焦点是两个门槛;文件输出不因申请speaker而隐含要求AEC或取得microphone。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:实时广播分区与紧急插播、跨端接续与资源抢占恢复。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| state | string | 必填 | acquired/suspended/restored/released/denied |
| revision | uint | 必填 | 设备资源修订号 |
| focusId | string | 必填 | 焦点ID |
| resources | string[] | 必填 | 原请求完整集合;成功不得缩减集合,拒绝也须保留完整目标组;成功时为实际确认组,denied时仅标识被拒绝的目标组,不表示已持有;display只表示显示输出 |
| reason | string | 仅denied必填 | 固定公开原因:permissionDenied/resourceBusy/unsupportedResource/staleRevision/leaseExpired/invalidState/userIntentChanged/sessionEnded/timeout/driverFailed;成功不得携带,不能透传驱动错误、URL或凭据 |
原操作应答带原msgToken/sessionId和完整focusId/resources:成功code=200及动作对应状态,拒绝code=400~599和state=denied。拒绝不推进资源修订号,返回设备当前实际修订号;例如过期请求expectedRevision=0被拒时当前可能已经是5,不能回显0伪造当前状态。实际主动状态事件可无code,但不能拿来完成一个正在等待原回执的操作;停流未知、驱动断连或排队成功不得报released。成功应答资源集合必须等于原完整请求,返回speaker但遗漏display不能认定带音轨视频已取得输出组。
用于AI转人工时,整组acquired是第三屏障的设备完成事实,仍不是平台路由已提交。平台须持久关联原token、两端腿/呼叫组、原连接、全组资源与全局修订号,复核授权/截止后确认路由提交;才能发最终sessionEstablished及原AI transferred/ended。失败补偿的restore也必须有原token的完整组实际restored回执,不以模型仍在线冒充采集已恢复;未知结果或已经提交的路由不得盲目回滚。无code主动事件、单轨trackState和mediaState.connected均不能完成这条屏障。
{
"msgToken": "s16-52",
"method": "focusState",
"sessionId": "s16-music-receiver",
"data": {
"state": "suspended",
"revision": 1,
"focusId": "music-focus",
"resources": [
"speaker"
]
},
"code": 200
}对应实时广播分区与紧急插播:M04;其他操作按条件字段校验。
当前原code回执已接设备入口及Core Runtime持久关联,详见支持范围。无code主动事件仍为扩展契约,须确认支持,不是可信空闲基线;共享解析器支持该结构不等于后端受理。原字节幂等只读确认不重投递或恢复资源,实际全组驱动及MCP端云媒体E2E仍待完成。
sessionSync · SIG↑
- 方向:设备→平台;应答:sessionSnapshot。
- 触发、权限与状态:用于后台恢复/事件缺口/断线后查询,不自动恢复采集和播放。重新鉴权并确认端绑定;未声明对应能力的端epoch失效403。平台返回绝对快照,不无限重放历史内容或设备写操作。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:后台休眠弱网与状态同步。
IPC 对讲全量名册子集正在实现,尚未完成端云验收。须独立声明并协商 participantRosterSync(依赖 participantRoster),旧增量名册消费者不会自动接收新快照。该子集只读查询本腿展示,授权与资产核验在原 Owner 锁外,最多 2 秒;不代替本场景设计中的 15 秒重连、旧 socket 围栏或媒体代次恢复。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| lastEventSeq | uint | 必填 | 已应用信令水位 |
| lastMessageSeq | uint | 必填 | 已应用内容水位 |
| endpointEpoch | uint | 必填 | 平台分配的公开端腿绑定代次;由可信 sessionInvite/sessionCreated 条件返回,不由设备猜 1,也不是内部 ConnectionEpoch 时间戳 |
| mediaRevision | uint | 必填 | 本端已知媒体代次 |
{
"msgToken": "s19-72",
"method": "sessionSync",
"sessionId": "s19-session",
"params": {
"lastEventSeq": 12,
"lastMessageSeq": 8,
"endpointEpoch": 1,
"mediaRevision": 1
}
}对应后台休眠弱网与状态同步:M01;其他操作按条件字段校验。
sessionSnapshot · SIG↓
- 方向:平台→设备;应答:—。
- 触发、权限与状态:安装快照后丢弃不大于水位的迟到事件,再应用更高序号;缺增量文本时以快照内最终文本恢复;快照不含正文时将缺口标不可恢复,不能拼接残缺文本,也不重播旧音频。resumeAllowed仍需焦点和媒体重新协商,不能直接恢复收费Provider或后台录音。
- 超时、幂等、迟到及清理采用本页公共行为和公共约定;成功应答不能代替独立完成状态。
- 场景:后台休眠弱网与状态同步。
成功快照使用原请求 msgToken/本接收腿 sessionId、code:200 和新的共享 eventSeq,其中 eventWatermark == eventSeq。原 token 重放原字节,不生成第二份快照、不推进水位、不延长任何期限。若等待期间已安装更高水位,旧快照不得回滚该实态;原 token 结果过期或水位落后时标同步未知,使用下一新 token 查询,不自动重做设备操作。
| 字段 | 类型 | 必填条件 | 值与含义 |
|---|---|---|---|
| state | string | 必填 | negotiating/established/ending/ended |
| revision | uint | 必填 | 会话快照修订号 |
| eventWatermark | uint | 必填 | 快照信令水位 |
| messageWatermark | uint | 必填 | 内容水位 |
| endpointEpoch | uint | 必填 | 当前端代次 |
| mediaRevision | uint | 必填 | 当前媒体代次 |
| tracks | Track[] | 必填 | 本端授权轨 |
| controls | ControlSnapshot | 必填 | 呼叫、焦点、抢麦、媒体计划、AI输入、录制、播放、处理器、广播和接续完整快照 |
| capabilityRevision | uint | 必填 | 此端已接受的最新能力上报revision |
| resumeAllowed | boolean | 必填 | 仅允许尝试恢复 |
| reason | string | ended或不准恢复必填 | ended为权威终止原因;established且resumeAllowed=false为snapshotOnly。established且resumeAllowed=true必须省略该键,不能发送空字符串或null |
| participants | Participant[] | participantRosterSync 已协商时必填 | 本腿当前完整展示名册,最多 32 项且 participantId 唯一;当前 IPC 生产子集每项 tracks 明确 []。[] 合法,原子撤全部展示但不自动关闭主媒体;null/缺省/部分合法数组不得安装 |
| expiresAt | uint | participantRosterSync 已协商时必填 | Unix 毫秒,安全整数且非 0;不晚于本次原 2 秒权威许可、Owner/session 租约和 deadline。重投不刷新;旧未协商快照不增加此字段 |
公开绑定在新端初建时由平台分配 endpointEpoch=1、采用实际能力 capabilityRevision,只在协商了同步的可信邀请/创建结果中返回。旧持久能力没有两字段视为未协商,不回填或猜值。设备普通控制重连与端替换是不同事实:内部鉴权 ConnectionEpoch 必须独立复验;完整断网接续、代次递增与旧 socket 围栏仍待后继实施,不能据同连接查询称完成。
当前 IPC 活会话投影使用 state=established、mediaRevision=1、resumeAllowed=true 且省略 reason;设备也接受显式 resumeAllowed=false、reason=snapshotOnly 的只读形态。两者安装快照本身都不恢复媒体,许可不等于驱动已恢复。state=ended 必须 resumeAllowed=false,保留持久终止原因并撤空轨和名册,由设备释放原资源。controls 仍须完整:本独立腿没有 call/focus/floor/AI 控制对象,用 null;recordings/playbacks/processors/broadcasts/handoffs 明确 [];mediaPlan 包含原轨及实态。这些 null/[] 只描述本腿,不意味着已有 IM 会议没有呼叫或 MAC,也不授发言资格。活快照不启停麦克风、Peer、订阅、计费模型或驱动。
正常媒体周期续验可使内存短期授权证据及已生效MAC版本晚于持久记录;查询事务只保存同一IM加入实例的单调MAC版本和新证据截止(仍不超过当前2秒窗口),禁止版本回退或同版本改变话权,其余身份、源轨、控制、会话deadline及租约不变。这不是由查询延长媒体许可或新增发言资格;查询不调用媒体授权更新接口。慢查询期间若媒体续验已替换原证据,查询失败且不覆盖新许可;原通话继续,后续查询使用新token重新读取。
端侧一次校验全部字段、当前腿、原 token、公开绑定、截止和共享水位,再原子替换名册;使用既有墙钟高水位及单调窗口防时钟倒退。过期或迟到保留原已消费名册和主媒体,不能把未知推成 members=[] 或权限撤销。明确权威撤权仍由原授权终止路径停流。
新子集可解析的拒绝示例(没有成功快照水位,也没有媒体恢复许可):
{"msgToken":"roster-sync-1","method":"sessionSnapshot","sessionId":"ipc-device-leg","code":409,"data":{"requestMethod":"sessionSync","reason":"requestConflict"}}{"msgToken":"roster-sync-2","method":"sessionSnapshot","sessionId":"ipc-device-leg","code":403,"data":{"requestMethod":"sessionSync","reason":"requestDenied"}}入口固定拒绝还包括 400/invalidRequest、422/unsupportedMethod、503/signalingNotEnabled,采用同样两字段data。设备只结束匹配原token的查询并显示failed,停止该请求重试;不清空当前名册或关闭主通话。未知/畸形应答不安装,仍由原30秒请求预算收敛为unknown。
新 IPC 同连接子集的完整成功示例(时间、会话及成员均为占位;名册为空合法,不能借此结束媒体):
{
"msgToken": "roster-sync-3",
"method": "sessionSnapshot",
"sessionId": "ipc-device-leg",
"code": 200,
"eventSeq": 12,
"data": {
"state": "established",
"revision": 11,
"eventWatermark": 12,
"messageWatermark": 0,
"endpointEpoch": 1,
"mediaRevision": 1,
"capabilityRevision": 3,
"tracks": [
{"trackId":"mic-1","kind":"audio","sourceId":"mic","direction":"sendonly","codec":"opus","state":"active"},
{"trackId":"speaker-1","kind":"audio","sourceId":"speaker","direction":"recvonly","codec":"opus","state":"paused"}
],
"controls": {
"call": null,
"focus": null,
"floor": null,
"ai": null,
"recordings": [],
"playbacks": [],
"processors": [],
"broadcasts": [],
"handoffs": [],
"mediaPlan": {
"revision": 1,
"tracks": [
{"trackId":"mic-1","kind":"audio","sourceId":"mic","direction":"sendonly","codec":"opus","state":"active"},
{"trackId":"speaker-1","kind":"audio","sourceId":"speaker","direction":"recvonly","codec":"opus","state":"paused"}
]
}
},
"participants": [],
"resumeAllowed": false,
"reason": "snapshotOnly",
"expiresAt": 1900000000000
}
}以下仍是通用控制恢复的设计示例,不是当前 IPC 名册子集的生产通过证明:
{
"msgToken": "s19-72",
"method": "sessionSnapshot",
"sessionId": "s19-session",
"data": {
"state": "established",
"revision": 5,
"eventWatermark": 18,
"messageWatermark": 10,
"endpointEpoch": 1,
"mediaRevision": 1,
"tracks": [
{
"trackId": "mic",
"kind": "audio",
"sourceId": "mic",
"sourceType": "microphone",
"direction": "sendonly",
"codec": "opus",
"state": "requested"
}
],
"controls": {
"call": {
"state": "active",
"revision": 1
},
"focus": {
"state": "suspended",
"revision": 2,
"focusId": "focus-before-sleep",
"resources": [
"microphone",
"speaker"
]
},
"floor": null,
"recordings": [],
"playbacks": [],
"processors": [],
"mediaPlan": {
"revision": 0,
"tracks": [
{
"trackId": "mic",
"kind": "audio",
"sourceId": "mic",
"sourceType": "microphone",
"direction": "sendonly",
"codec": "opus",
"state": "requested"
}
]
},
"broadcasts": [],
"handoffs": [],
"ai": null
},
"resumeAllowed": true,
"capabilityRevision": 1
},
"code": 200
}对应后台休眠弱网与状态同步:M02;其他操作按条件字段校验。
更新日志
2026/10/17 03:27
查看所有更新日志
d04e1-docs(AI与音视频): 按公共主线与场景分支整合接入手册于
