信令设计
信令
设计
一 概述
描述基于声网通信SDK以及信令SDK的自定义通信控制指令。
基本场景是A呼叫B。
在每个客户端(医生端、病人端)需要维护两个状态:
signalStatus,mediaStatus
每个状态都有2个枚举值ON_LINE, OFF_LINE。
初始状态都为OFF_LINE.
信令状态在signal的回调里面修改,媒体状态在media的回调里面改。
例子:
1. 信令登录
判断signalStatus==OFF_LINE, 如果是,那么执行登录操作,并在回调中设置为ON_LINE
2. 接收到呼叫
- 判断mediaStatus==ON_LINE,
- 如果是,判断是否为同一个用户呼叫,
2.1 如果是, 那么不做任何操作,调用信令接口channelInviteAccept通知对方
2.2 否则, 调用信令接口channelInviteRefuse拒绝对方
- 如果mediaStatus==OFF_LINE,那么打开通话界面等待接收还是拒绝。
- 接受通话,那么joinMediaChannel,调用信令接口channelInviteAccept,媒体回调中设置mediaStatus=ON_LINE。
- 拒绝呼叫,那么调用信令接口channelInviteRefuse。
3. 中断对话
- 调用信令接口:channelInviteEnd
- 调用媒体接口leaveChannel, 媒体回调中设置mediaStatus=OFF_LINE
二 名词解释
- AgoraMedia: 声网媒体系统,用于音视频流的传输
- AgoraSignal: 声网信令系统,用于通话控制以及管理
- Xinzhi: 心知网后台系统
- TRecord(status): 表示在心知网后台系统创建一个带状态status的通话记录对象。
三 具体场景如下
1. 初始化流程
备注:
如果没有登陆过,那么登录成功后,会调用AgoraEngine.loginAgora
2. 接收呼叫流程
以下为过期斑斑
1. 呼叫失败(INVITE)
A登录信令系统, B没登录信令系统,则呼叫失败:
信令格式:
备注:
1. A在呼叫前是否可以先查询B的在线状态?在线的情况下再去呼叫。目前的api不支持用户状态查询.
2. 在事件回调中处理ui逻辑
2. 呼叫超时(INVITE)
A登录信令系统, B没登录信令系统,则呼叫失败:
3. 呼叫成功(INVITE-ACCEPT)
A,B都已登录信令系统,A呼叫B成功
备注:
4. 拒绝接听(REJECT)
5. 取消呼叫(CANCEL)
5. 通话过程控制-挂断(TERMINATE)
成功建立通话之后,如要挂断,挂断方负责发送挂断信令给对方
6. 通话过程控制-暂停(HOLD)(低优先级)
成功建立通话之后,如要暂停,暂停方负责发送暂停信令给对方
本例假设A暂停通话
7. 通话过程控制-恢复(RESUME)(低优先级)
暂停通话后,如要恢复,暂停方负责发送恢复信令给对方
继上例,A暂停后,发起恢复通话请求
四. 关键参数
消息 |
存储时长 |
频道消息 |
频道消息会确保送达 |
一对一消息 |
该消息会保存一天 |
呼叫消息 |
如果A呼叫B,30秒内没收到ACCEPT消息,那么做超时处理 |
五. 其他
- 参考:声网信令系统概述