[关闭]
@zhangever 2017-06-22T09:51:20.000000Z 字数 3502 阅读 1921

信令设计

信令 设计


一 概述

描述基于声网通信SDK以及信令SDK的自定义通信控制指令。
基本场景是A呼叫B。
在每个客户端(医生端、病人端)需要维护两个状态:
signalStatus,mediaStatus
每个状态都有2个枚举值ON_LINE, OFF_LINE。
初始状态都为OFF_LINE.
信令状态在signal的回调里面修改,媒体状态在media的回调里面改。
例子:

1. 信令登录

判断signalStatus==OFF_LINE, 如果是,那么执行登录操作,并在回调中设置为ON_LINE

2. 接收到呼叫

  1. 判断mediaStatus==ON_LINE,
  2. 如果是,判断是否为同一个用户呼叫,
    2.1 如果是, 那么不做任何操作,调用信令接口channelInviteAccept通知对方
    2.2 否则, 调用信令接口channelInviteRefuse拒绝对方
  3. 如果mediaStatus==OFF_LINE,那么打开通话界面等待接收还是拒绝。
  4. 接受通话,那么joinMediaChannel,调用信令接口channelInviteAccept,媒体回调中设置mediaStatus=ON_LINE。
  5. 拒绝呼叫,那么调用信令接口channelInviteRefuse。

3. 中断对话

  1. 调用信令接口:channelInviteEnd
  2. 调用媒体接口leaveChannel, 媒体回调中设置mediaStatus=OFF_LINE

二 名词解释

  • AgoraMedia: 声网媒体系统,用于音视频流的传输
  • AgoraSignal: 声网信令系统,用于通话控制以及管理
  • Xinzhi: 心知网后台系统
  • TRecord(status): 表示在心知网后台系统创建一个带状态status的通话记录对象。

三 具体场景如下

1. 初始化流程

Created with Raphaël 2.1.2MainActivityMainActivityAgoraEngineAgoraEngineUserInfoHelperUserInfoHelperXinzhiXinzhisetOwnerContext是否曾登录曾登录:initUserInfologinAgorainit(如果用户信令状态为已登录,直接返回)获取声网动态token初始化信令以及媒体客户端媒体事件回调:MyAgoraMediaEventHandler登录声网信令系统,信令事件回调:MyAgoraSignalEventHandler创建自定义回调:mAgoraCallback用于提供给通话界面的一些回调新建:mAgoraHandler,用于处理通话界面的交互(mAgoraCallback)

备注:
如果没有登陆过,那么登录成功后,会调用AgoraEngine.loginAgora

2. 接收呼叫流程

Created with Raphaël 2.1.2MyAgoraSignalEventHandlerMyAgoraSignalEventHandlerAgoraEngineAgoraEngineCallDialogCallDialogAgoraCallbackAgoraCallbackMyAgoraMediaEventHandlerMyAgoraMediaEventHandleronInviteReceivedmediaStatus=OFF_LINEFire WHAT_ON_CALL to mAgoraHandler弹出通话界面RingTone接收:stopRingTone,onCalldoJoinsignal.channelInviteAcceptmedia.joinChannel拒绝:stopRingTone,onRefusedoRefusesignal.channelInviteRefuse挂断:stopRingTone,onInterruptdoLeavesignal.channelInviteEndmedia.leaveChannelonXXXElse如果是同一呼叫方:Accept, 忽略之否则,直接Resuse

以下为过期斑斑

1. 呼叫失败(INVITE)

A登录信令系统, B没登录信令系统,则呼叫失败:

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalJoin media channelTRecord(Init)A INVITE BFire a timer with 30sCancel timerTRecord(Failed)Leave media channel

信令格式:
备注:
1. A在呼叫前是否可以先查询B的在线状态?在线的情况下再去呼叫。目前的api不支持用户状态查询.
2. 在事件回调中处理ui逻辑

2. 呼叫超时(INVITE)

A登录信令系统, B没登录信令系统,则呼叫失败:

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalJoin media channelTRecord(Init)A INVITE BFire a timer with 30sNo ACCEPT in 30SCancel timerTRecord(Failed)Leave media channel

3. 呼叫成功(INVITE-ACCEPT)

A,B都已登录信令系统,A呼叫B成功

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalBBJoin media channelTRecord(Init)A INVITE BFire a timer with 30sA INVITE BB RingJoin media channelB ACCEPT AFire a timer with 5sB ACCEPT ACancel timerACCEPT-CONFIRMTRecord(on-going)ACCEPT-CONFIRMCancel Timer

备注:

4. 拒绝接听(REJECT)

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalBBJoin media channelTRecord(Init)A INVITE BA INVITE BB RingB REJECT AB REJECT ALeave media channelTRecord(rejected)

5. 取消呼叫(CANCEL)

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalBBJoin media channelTRecord(Init)A INVITE BA INVITE BB RingTRecord(rejected)B REJECT AB REJECT ALeave media channel

5. 通话过程控制-挂断(TERMINATE)

成功建立通话之后,如要挂断,挂断方负责发送挂断信令给对方

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaXinzhiXinzhiAgoraSignalAgoraSignalBBLeave media channelTRecord(completed)A TERMINATEA TERMINATELeave media channel

6. 通话过程控制-暂停(HOLD)(低优先级)

成功建立通话之后,如要暂停,暂停方负责发送暂停信令给对方
本例假设A暂停通话

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaAgoraSignalAgoraSignalBBLeave media channelA HOLDA HOLDLeave media channel

7. 通话过程控制-恢复(RESUME)(低优先级)

暂停通话后,如要恢复,暂停方负责发送恢复信令给对方
继上例,A暂停后,发起恢复通话请求

Created with Raphaël 2.1.2AAAgoraMediaAgoraMediaAgoraSignalAgoraSignalBBJoin media channelA RESUMEA RESUMEJoin media channel

四. 关键参数

消息 存储时长
频道消息 频道消息会确保送达
一对一消息 该消息会保存一天
呼叫消息 如果A呼叫B,30秒内没收到ACCEPT消息,那么做超时处理

五. 其他

  1. 参考:声网信令系统概述
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注