人与人音视频:完整报文
约 2544 字大约 8 分钟
2026-10-16
本页是场景流程的完整 JSON 序列,按图中编号查阅。示例中的分支互斥,不能顺序重放全部报文;实际 ID、截止、SDP、地址和密钥须由运行时取得。实施状态及字段定义仍以场景与命令页为准。
编号报文
M01 · interaction.open
{
"msgToken": "s06-76",
"method": "interaction.open",
"params": {
"purpose": "humanCall",
"callType": "video"
},
"target": {
"productID": "p-demo",
"deviceName": "device-demo"
}
}M02 · interaction.result
{
"msgToken": "s06-76",
"method": "interaction.result",
"sessionId": "s06-session",
"code": 200,
"data": {
"operation": "interaction.open",
"state": "invited",
"sessionId": "s06-session"
}
}M03 · sessionInvite
{
"msgToken": "s06-77",
"method": "sessionInvite",
"sessionId": "s06-session",
"eventSeq": 1,
"params": {
"purpose": "humanCall",
"callType": "video",
"admission": "accept",
"transport": "webrtc",
"expiresAt": 1900000000000,
"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"
},
{
"trackId": "video-1",
"kind": "video",
"sourceId": "front",
"direction": "sendonly",
"codec": "H264",
"state": "requested"
}
],
"callGroupId": "call-group-s06-session"
}
}M04 · sessionAccept
{
"msgToken": "s06-77",
"method": "sessionAccept",
"sessionId": "s06-session",
"params": {
"acceptedTracks": [
"mic-1",
"speaker-1",
"video-1"
]
}
}M05 · requestAck
{
"msgToken": "s06-77",
"method": "requestAck",
"sessionId": "s06-session",
"code": 200,
"data": {
"requestMethod": "sessionAccept",
"result": {
"state": "negotiating"
}
}
}M06 · mediaOffer
{
"msgToken": "s06-78",
"method": "mediaOffer",
"sessionId": "s06-session",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP offer>"
}
}
}M07 · mediaAnswer
{
"msgToken": "s06-78",
"method": "mediaAnswer",
"sessionId": "s06-session",
"code": 200,
"data": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP answer>"
}
}
}M08 · mediaState
{
"msgToken": "s06-79",
"method": "mediaState",
"sessionId": "s06-session",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}M09 · requestAck
{
"msgToken": "s06-79",
"method": "requestAck",
"sessionId": "s06-session",
"code": 200,
"data": {
"requestMethod": "mediaState",
"result": {
"mediaRevision": 1,
"state": "connected"
}
}
}M10 · interaction.mediaOffer
{
"msgToken": "s06-80",
"method": "interaction.mediaOffer",
"sessionId": "s06-session",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP caller offer>"
}
}
}M11 · interaction.result
{
"msgToken": "s06-80",
"method": "interaction.result",
"sessionId": "s06-session",
"code": 200,
"data": {
"operation": "interaction.mediaOffer",
"state": "negotiating",
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP caller answer>"
}
}
}M12 · interaction.mediaState
{
"msgToken": "s06-81",
"method": "interaction.mediaState",
"sessionId": "s06-session",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}M13 · interaction.result
{
"msgToken": "s06-81",
"method": "interaction.result",
"sessionId": "s06-session",
"code": 200,
"data": {
"operation": "interaction.mediaState",
"state": "connected",
"mediaRevision": 1
}
}M14 · sessionEstablished
{
"msgToken": "s06-82",
"method": "sessionEstablished",
"sessionId": "s06-session",
"eventSeq": 2,
"data": {
"state": "established",
"mediaRevision": 1
}
}M15 · interaction.state
{
"msgToken": "s06-83",
"method": "interaction.state",
"sessionId": "s06-session",
"eventSeq": 3,
"data": {
"state": "established"
}
}M16 · trackControl
{
"msgToken": "s06-84",
"method": "trackControl",
"sessionId": "s06-session",
"params": {
"trackId": "mic-1",
"operation": "pause",
"mediaRevision": 1
}
}M17 · trackState
{
"msgToken": "s06-84",
"method": "trackState",
"sessionId": "s06-session",
"code": 200,
"data": {
"trackId": "mic-1",
"state": "paused",
"mediaRevision": 1
}
}M18 · trackControl
{
"msgToken": "s06-85",
"method": "trackControl",
"sessionId": "s06-session",
"params": {
"trackId": "video-1",
"operation": "pause",
"mediaRevision": 1
}
}M19 · trackState
{
"msgToken": "s06-85",
"method": "trackState",
"sessionId": "s06-session",
"code": 200,
"data": {
"trackId": "video-1",
"state": "paused",
"mediaRevision": 1
}
}M20 · trackControl
{
"msgToken": "s06-86",
"method": "trackControl",
"sessionId": "s06-session",
"params": {
"trackId": "mic-1",
"operation": "resume",
"mediaRevision": 1
}
}M21 · trackState
{
"msgToken": "s06-86",
"method": "trackState",
"sessionId": "s06-session",
"code": 200,
"data": {
"trackId": "mic-1",
"state": "active",
"mediaRevision": 1
}
}M22 · trackControl
{
"msgToken": "s06-87",
"method": "trackControl",
"sessionId": "s06-session",
"params": {
"trackId": "video-1",
"operation": "resume",
"mediaRevision": 1
}
}M23 · trackState
{
"msgToken": "s06-87",
"method": "trackState",
"sessionId": "s06-session",
"code": 200,
"data": {
"trackId": "video-1",
"state": "active",
"mediaRevision": 1
}
}M24 · interaction.trackControl
{
"msgToken": "s06-app-mute",
"method": "interaction.trackControl",
"sessionId": "s06-session",
"params": {
"trackId": "caller-mic",
"operation": "pause",
"mediaRevision": 1
}
}M25 · interaction.result
{
"msgToken": "s06-app-mute",
"method": "interaction.result",
"sessionId": "s06-session",
"code": 200,
"data": {
"operation": "interaction.trackControl",
"state": "paused",
"mediaRevision": 1
}
}M26 · sessionEnd
{
"msgToken": "s06-88",
"method": "sessionEnd",
"sessionId": "s06-session",
"params": {
"reason": "userHangup"
}
}M27 · sessionEnded
{
"msgToken": "s06-88",
"method": "sessionEnded",
"sessionId": "s06-session",
"code": 200,
"data": {
"state": "ended",
"reason": "userHangup"
}
}M28 · interaction.state
{
"msgToken": "s06-89",
"method": "interaction.state",
"sessionId": "s06-session",
"eventSeq": 4,
"data": {
"state": "ended",
"reason": "userHangup"
}
}M29 · sessionReject
{
"msgToken": "s06-77",
"method": "sessionReject",
"sessionId": "s06-session",
"params": {
"reason": "resourceBusy"
}
}M30 · requestAck
{
"msgToken": "s06-77",
"method": "requestAck",
"sessionId": "s06-session",
"code": 200,
"data": {
"requestMethod": "sessionReject",
"result": {
"state": "ended",
"reason": "resourceBusy"
}
}
}M31 · sessionEnded
{
"msgToken": "s06-90",
"method": "sessionEnded",
"sessionId": "s06-session",
"eventSeq": 5,
"data": {
"state": "ended",
"reason": "userRejected"
}
}M32 · interaction.state
{
"msgToken": "s06-91",
"method": "interaction.state",
"sessionId": "s06-session",
"eventSeq": 6,
"data": {
"state": "ended",
"reason": "resourceBusy"
}
}M33 · interaction.join
{
"msgToken": "s06-92",
"method": "interaction.join",
"sessionId": "s-group-device-leg",
"params": {
"participantId": "user-b"
}
}M34 · interaction.result
{
"msgToken": "s06-92",
"method": "interaction.result",
"sessionId": "s-group-device-leg",
"code": 200,
"data": {
"operation": "interaction.join",
"state": "joined"
}
}M35 · interaction.mediaOffer
{
"msgToken": "s-group-peer-9",
"method": "interaction.mediaOffer",
"sessionId": "s-group-device-leg",
"params": {
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP member offer>"
}
}
}M36 · interaction.result
{
"msgToken": "s-group-peer-9",
"method": "interaction.result",
"sessionId": "s-group-device-leg",
"code": 200,
"data": {
"operation": "interaction.mediaOffer",
"state": "negotiating",
"mediaRevision": 1,
"webrtc": {
"iceMode": "complete",
"sdp": "<SDP member answer>"
}
}
}M37 · interaction.mediaState
{
"msgToken": "s-group-peer-10",
"method": "interaction.mediaState",
"sessionId": "s-group-device-leg",
"params": {
"mediaRevision": 1,
"state": "connected"
}
}M38 · interaction.result
{
"msgToken": "s-group-peer-10",
"method": "interaction.result",
"sessionId": "s-group-device-leg",
"code": 200,
"data": {
"operation": "interaction.mediaState",
"state": "connected",
"mediaRevision": 1
}
}M39 · participantChanged
{
"msgToken": "s06-93",
"method": "participantChanged",
"sessionId": "s-group-device-leg",
"eventSeq": 1,
"data": {
"participantId": "user-b",
"change": "joined",
"tracks": [
{
"trackId": "user-b-audio",
"kind": "audio",
"sourceId": "user-b",
"direction": "recvonly",
"codec": "opus",
"state": "requested"
}
]
}
}该事件绑定接收设备自己的会话腿 s-group-device-leg,不把 IM 组标识放进 sessionId;仅已显式声明 participantRoster 的端接收。名册及轨描述不等于媒体发布/订阅或 IM 话权授权。成员加入的应用入口和平台事件生成仍待接线,不能由本事件的接收测试代替。
M40 · trackControl
{
"msgToken": "s06-94",
"method": "trackControl",
"sessionId": "s-group-device-leg",
"params": {
"trackId": "user-b-audio",
"operation": "subscribe",
"mediaRevision": 1
}
}M41 · trackState
{
"msgToken": "s06-94",
"method": "trackState",
"sessionId": "s-group-device-leg",
"code": 200,
"data": {
"trackId": "user-b-audio",
"state": "active",
"mediaRevision": 1
}
}M42 · interaction.leave
{
"msgToken": "s06-95",
"method": "interaction.leave",
"sessionId": "s-original-app-leg",
"params": {
"callId": "gcall-example",
"participantId": "103",
"expectedMemberEpoch": 1
}
}M43 · interaction.result
{
"msgToken": "s06-95",
"method": "interaction.result",
"sessionId": "s-original-app-leg",
"code": 200,
"data": {
"operation": "interaction.leave",
"callId": "gcall-example",
"participantId": "103",
"memberEpoch": 1,
"remaining": ["101", "102"],
"ended": false
}
}M44 · participantChanged
{
"msgToken": "s06-96",
"method": "participantChanged",
"sessionId": "s-group-device-leg",
"eventSeq": 2,
"data": {
"participantId": "user-b",
"change": "left",
"tracks": [
{
"trackId": "user-b-audio",
"kind": "audio",
"sourceId": "user-b",
"direction": "recvonly",
"codec": "opus",
"state": "stopped"
}
]
}
}M45 · trackState
{
"msgToken": "s06-97",
"method": "trackState",
"sessionId": "s-group-device-leg",
"eventSeq": 3,
"data": {
"trackId": "user-b-audio",
"state": "stopped",
"mediaRevision": 1,
"participantId": "user-b",
"reason": "participantLeft"
}
}补充示例 46
{"operation":"read","callId":"gcall-example","targetUserID":"103"}补充示例 47
{"code":200,"msg":"success","data":{"callId":"gcall-example","targetUserID":"103","publishAllowed":true,"audioRevision":3,"memberEpoch":1,"expiresAt":1900000002000}}补充示例 48
{"endpointId":"original-u1-endpoint","command":{"msgToken":"host-remove-1","method":"interaction.leave","sessionId":"s-u1","params":{"callId":"gcall-example","participantId":"103","expectedMemberEpoch":1}}}补充示例 49
{"code":100017,"msg":"error.sys.serverError"}补充示例 50
{"code":200,"msg":"success","data":{"accepted":true,"msgToken":"host-remove-1","replay":false}}补充示例 51
{"msgToken":"host-remove-1","method":"interaction.result","sessionId":"s-u1","code":200,"data":{"operation":"interaction.leave","callId":"gcall-example","participantId":"103","memberEpoch":1,"remaining":["101","102"],"ended":false}}补充示例 52
{"msgToken":"u3-ended-fact","method":"interaction.state","sessionId":"s-u3","eventSeq":4,"data":{"state":"ended","reason":"permissionRevoked"}}补充示例 53
{"msgToken":"member-left-fact","method":"participantChanged","sessionId":"s-device-leg","eventSeq":6,"data":{"participantId":"103","change":"left","tracks":[]}}补充示例 54
{"event":"peer.left","callId":"gcall-example","scope":"group","conversationId":9001,"fromUserId":103,"targetUserId":"103","notifyUserIds":[101,102],"timestamp":1900000000}补充示例 55
{"event":"group.state","callId":"gcall-example","callType":"voice","scope":"group","conversationId":9001,"members":["101","102"],"notifyUserIds":[101,102,103],"timestamp":1900000000}补充示例 56
{"msgId":501,"conversationId":9001,"recipientUserIds":[101,102,103]}补充示例 57
{"endpointId":"original-u1-endpoint","command":{"msgToken":"host-remove-1","method":"interaction.leave","sessionId":"s-u1","params":{"callId":"gcall-example","participantId":"103","expectedMemberEpoch":1}}}补充示例 58
{"msgToken":"host-remove-1","method":"interaction.result","sessionId":"s-u1","code":200,"data":{"operation":"interaction.leave","callId":"gcall-example","participantId":"103","memberEpoch":1,"remaining":["101","102"],"ended":false}}更新日志
2026/10/17 03:27
查看所有更新日志
d04e1-docs(AI与音视频): 按公共主线与场景分支整合接入手册于
