UNPKG

@rongcloud/plugin-call-plus

Version:

@rongcloud/plugin-call-plus

2,545 lines (2,518 loc) 99.2 kB
import { RCConnectionStatus, EventEmitter, BasicLogger, PluginContext, IRuntime, EnableLogL, IReceivedMessage, IPluginGenerator } from '@rongcloud/engine'; import { RCRemoteTrack, RCTrack, ISubscribeAttr, RCRTCCode, RCLocalAudioTrack, RCRemoteAudioTrack, RCRTCClient, RCRTCRoom, RCLocalTrack, IPublishAttrs, IPubSuccessRes, RCFrameRate, RCResolution } from '@rongcloud/plugin-rtc'; export { RCFrameRate as RCCallPlusFrameRate, RCResolution as RCCallPlusResolution } from '@rongcloud/plugin-rtc'; /** * 对话动作 */ declare enum DialogAction { /** * 请求 */ REQUEST = "request", /** * 接受 */ ACCEPT = "accept", /** * 拒绝 */ REFUSE = "refuse", /** * 请求取消 */ CANCEL = "cancel", /** * 通知 */ NOTICE = "notice", /** * 超时 */ TIMEOUT = "timeout" } /** * 呼叫媒体类型 */ declare enum RCCallPlusMediaType { /** * 音频 */ AUDIO = 0, /** * 音视频 */ AUDIO_VIDEO = 1, /** * 视频 */ VIDEO = 2 } /** * 通话状态 */ declare enum RCCallPlusCallState { /** * 初始状态 */ IDLE = 0, /** * 正在呼叫 */ CALLING = 100, /** * 被邀请 */ INVITED = 101, /** * 响铃 */ RINGING = 102, /** * 忙线响铃 */ BUSYLINE_RINGING = 103, /** * 忙线等待 */ BUSYLINE_WAIT = 104, /** * 通话连接中 */ CONNECTING = 200, /** * 通话中 */ ONCALL = 300, /** * 通话结束 */ ENDED = 1000, /** * 远端未接听 */ NOANSWER = 1001, /** * 己端未接听 */ MISSED = 1002, /** * 己端取消通话 */ CANCELED = 1003, /** * 远端拒绝 */ DECLINED = 1004, ERROR = 2000 } /** * 呼叫类型 */ declare enum RCCallPlusType { /** * 单呼 */ SINGLE = 0, /** * 多人呼叫 */ MULTI = 1 } declare enum RCCallDirection { /** * 呼出 */ OUT = -1, /** * 群呼 */ GROUP = 0, /** * 呼入 */ IN = 1 } /** * 事件类型 */ declare enum CallServerEventType { /** * 提示窗口 */ PROMPT = 0, /** * CallServer 下发通话时长变更类型 */ CALL_DURATION = 10, /** * 收到远端第一帧时间 */ FIRST_FRAME = 20 } /** * 对话类型 */ declare enum DialogType { SWITCH_MEDIA_TYPE = 1 } declare enum RCCallStage { /** * 闲置 */ NONE = 0, /** * 呼叫中 */ CALLING = 1, /** * 通话中 */ ONCALL = 2 } declare enum RCCallUserType { /** * 普通用户 */ NORMAL = 0, /** * 观察者(只订阅其他人的资源,不发流) */ OBSERVER = 1 } /** * 通话额外类型(移动端特有) */ declare enum SecretCallType { /** * 普通通话 */ NORMAL = 0, /** * 密聊 */ SECRET = 1 } declare enum RCCallPlusSessionUserState { /** * IDLE */ IDLE = 0, /** * 发起呼叫 */ CALLING = 100, /** * 被邀请 */ INVITED = 101, /** * 响铃 */ RINGING = 102, /** * 己方忙碌直接挂断 */ BUSYLINE_RINGING = 103, /** * 己方忙碌等待接听其他通话 */ BUSYLINE_WAIT = 104, /** * 通话连接中 */ CONNECTING = 200, /** * 正在通话中 */ ONCALL = 300, /** * 正在系统通话中 */ ONPHONE = 301, /** * 通话结束 */ ENDED = 1000, /** * 远端未接听 */ NO_ANSWER = 1001, /** * 己端超时未接听 */ MISSED = 1002, /** * 通话取消 */ CANCELLED = 1003, /** * 通话拒绝 */ DECLINED = 1004, /** * 异常 */ ERROR = 2000 } declare enum RCCallTargetType { SIGNAL = 0, GROUP = 1, DEPARTMENT = 2 } declare enum ForwardType { /** * 通过下一次人员状态 userState 的下发同步带下去 */ SOON_AFETER = 0, /** * 立即转发 */ CURRENT = 1 } declare enum RCCallPlusReason { IDLE = 0, CALLING = 100, INVITED = 101, RINGING = 102, BUSYLINE_RINGING = 103, BUSYLINE_WAIT = 104, CONNECTING = 200, ONCALL = 300, ON_PHONE = 301, ON_PHONE_END = 302, /** * 输入设备不可用 */ ON_DEVICE_DISABLE = 303, /** * 输入设备可用 */ ON_DEVICE_ENABLE = 304, /** * 本端异常离开 */ ABNORMAL_END = 999, /** * 通话结束 */ ENDED = 1000, /** * 远端未接听 */ NO_ANSWER = 1001, /** * 己端未接听 */ MISSED = 1002, /** * 己端通话取消 */ CANCELLED = 1003, /** * 远端拒绝 */ DECLINED = 1004, /** * 其他端呼出(当前端被踢) */ OTHER_CLIENT_CALLING = 1010, /** * 其他端已接听 */ OTHER_CLIENT_ACCEPT = 1011, /** * 加入 RTC 房间失败 */ JOIN_ROOM_ERR = 1105, /** * 发布资源失败 */ PUBLISH_ERR = 1106, /** * 订阅资源失败 */ SUBSCRIBE_ERR = 1107, /** * 接听系统通话 */ ACCEPT_CARRIER = 1108, /** * 被禁止通话 */ KICKED_BY_SERVER = 1109, /** * RTC Ping 失败被踢出房间 */ CONNECTION_ERR = 1110, /** * 用户退出登录被踢出房间 */ LOGOUT = 1111, /** * 用户被其他端登录挤下线 */ OTHER_CLIENT_LOGIN = 1112, /** * 其他端加入新通话 */ OTHER_CLIENT_JOINED = 1113, /** * 其他端已在其他通话中(己端 A1 其他端正在通话中,A2 多端又加入房间被拒绝后通话结束 A2 的状态) */ OTHER_CLIENT_IN_ROOM = 1114, /** * 其他端已挂断 */ OTHER_CLIENT_HANGUP = 1151, /** * 远端用户加入房间失败 */ REMOTE_JOIN_RTC_ERROR = 1205, /** * 远端用户发布资源失败 */ REMOTE_PUBLISH_ERROR = 1206, /** * 远端用户订阅资源失败 */ REMOTE_SUBSCRIBE_ERROR = 1207, /** * 远端用户已被(封禁)禁止通话 */ REMOTE_KICKED_BY_SERVER = 1209, /** * 远端用户UDP连接断开 */ REMOTE_CONNECTION_ERROR = 1210, /** * 远端用户退出IM登录 */ REMOTE_LOGOUT = 1211, /** * 远端用户被其他端登录挤下线 */ REMOTE_OTHER_CLIENT_LOGIN = 1212, /** * 远端用户被其他端加入房间 joinRoom 踢出 */ REMOTE_OTHER_JOINED_RTC = 1213, /** * 远端用户的其他端已经在房间中,不允许 joinRoom 进行音视频通话 */ REMOTE_OTHER_CLIENT_IN_RTC = 1214 } /** * 用户信息 */ interface IUser { /** * 用户 ID */ userId: string; /** * 用户类型 (0:正常用户 1:观察者) */ userType?: RCCallUserType; /** * 来源对象类型 */ targetType?: RCCallTargetType; /** * 来源对象 ID */ targetId?: string; /** * 用户昵称(可传手机号) */ nickName?: string; /** * 组织ID */ orgId?: string; } /** * 忙线用户列表 */ interface IBusylineUser { /** * 用户 ID */ userId: string; /** * 用户状态 */ sessionStatus: RCCallPlusSessionUserState; } /** * base singal content */ interface IBaseSingalCon { /** * 服务返回的呼叫 ID */ callId: string; } /** * 开始呼叫信令内容 */ interface IStartCallCon { /** * 用户生成 callId */ clientCallId: string; /** * 目标用户信息列表 */ toUsers: IUser[]; /** * 呼叫类型 */ callType: RCCallPlusType; /** * 通话媒体类型 */ mediaType: RCCallPlusMediaType; /** * 是否密聊 */ secretChat: SecretCallType; /** * 当前用户的来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 当前用户的来源组 ID */ targetId?: string; /** * 发起人用户昵称(可为手机号) */ nickName?: string; /** * 正在通话中的老版房间 ID (老版 call 或 meeting) */ oldRoomId?: string; /** * 服务端接收的推送扩展 */ pushExt?: string; /** * 推送内容 */ pushContent?: string; /** * 附加信息,服务器透传 */ extra?: string; } /** * 单呼信令内容 */ interface IStartSingleCon { /** * 用户生成 callId */ clientCallId: string; /** * 被叫用户 ID */ toUserId: string; /** * 媒体类型 */ mediaType: RCCallPlusMediaType; /** * 用户来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 来源组 ID */ targetId?: string; /** * 是否密聊(0: 否;1: 是) * PC 目前无密聊,写死 0 */ secretChat: SecretCallType; /** * 单聊加密 key */ secretChatKey?: string; /** * 正在通话中的老版房间 ID (老版 call 或 meeting) */ oldRoomId?: string; /** * 组织ID */ toOrgId?: string; /** * 附加信息,服务器透传 */ extra?: string; /** * 服务端接收的推送扩展 */ pushExt?: string; /** * 推送内容 */ pushContent?: string; } /** * 群呼信令内容 */ interface IStartGroupCon { /** * 用户生成 callId */ clientCallId: string; /** * 目标用户列表 */ toUsers: IUser[]; /** * 通话媒体类型 */ mediaType: RCCallPlusMediaType; /** * 用户来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 来源组 ID */ targetId?: string; /** * 发起人用户昵称(可为手机号) */ nickName?: string; /** * 正在通话中的老版房间 ID (老版 call 或 meeting) */ oldRoomId?: string; /** * 附加信息,服务器透传 */ extra?: string; /** * 服务端接收的推送扩展 */ pushExt?: string; /** * 推送内容 */ pushContent?: string; } /** * 开始呼叫 Server 返回 */ interface IStartCallRes extends IBaseSingalCon { /** * 传入的 clientCallId */ clientCallId: string; /** * 人员支持情况,后期可能废弃谨慎使用 */ toUsersSupport?: { [userId: string]: 0 | 1; }; /** * 占线用户列表 */ busylineUsers?: IBusylineUser[]; } /** * 邀请好友加入信令内容 */ interface IInviteCallCon extends IBaseSingalCon { /** * 目标用户列表 */ toUsers: IUser[]; /** * 附加信息,服务器透传 */ extra?: string; /** * 服务端接收的推送扩展 */ pushExt?: string; /** * 推送内容 */ pushContent?: string; } /** * 邀请好友加入信令结果 */ interface IInviteCallRes extends IBaseSingalCon { /** * 呼叫类型 */ callType: RCCallPlusType; /** * 占线用户列表 */ busylineUsers?: IBusylineUser[]; } /** * server 通话用户列表 */ interface ICallSessionUser { /** * 用户 ID */ userId: string; /** * 用户状态 */ sessionStatus: RCCallPlusSessionUserState; /** * 状态发生时间 */ statusTime: number; /** * 通话时长(单位:s)群组各人通话时长不同 */ duration: number; /** * 是否变化(否:0、是:1) */ changed: 0 | 1; /** * 邀请 userId 的用户 ID */ inviteUserId: string; /** * 用户系统状态 */ sysStatus: RCCallPlusReason; /** * 当前用户的来源组 ID 类型 (来源用户的群组、通讯录等等) */ targetType?: RCCallTargetType; /** * 当前用户的来源组 ID */ targetId?: string; } /** * 通话邀请下发信令内容 */ interface IPubInviteCon extends IBaseSingalCon { /** * deviceId */ toDeviceId: string; /** * 通话发起人 */ callingUserId: string; /** * 本次邀请人 */ inviteUserId: string; /** * 呼叫类型 */ callType: RCCallPlusType; /** * 媒体类型 */ mediaType: RCCallPlusMediaType; /** * 是否密聊 */ secretChat?: SecretCallType; /** * 通话用户列表 */ callSessionUsers: ICallSessionUser[]; /** * 来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 来源组 ID */ targetId?: string; /** * 附加信息 */ extra?: string; } /** * 通话响铃信令内容 */ interface IRingingCallCon extends IBaseSingalCon { } /** * 通话接听信令内容 */ interface IAcceptCallCon extends IBaseSingalCon { /** * 服务端接收的推送扩展 */ pushExt?: string; } /** * 直接加入通话信令内容 */ interface IJoinCallCon extends IBaseSingalCon { } /** * 通话挂断信令内容 */ interface IHangupCallCon extends IBaseSingalCon { sysStatus?: RCCallPlusReason; /** * 服务端接收的推送扩展 */ pushExt?: string; /** * 推送内容 */ pushContent?: string; } /** * 通话状态上报信令内容 */ interface IStatusUpCon extends IBaseSingalCon { /** * call server 用户状态 */ sessionStatus: RCCallPlusSessionUserState; } /** * 通话状态下发信令内容 */ interface IStatusDownCont extends IBaseSingalCon { /** * deviceId */ toDeviceId: string; /** * server 通话状态 */ callStatus: RCCallPlusCallState; /** * 通话时长 */ duration: number; /** * call server 用户信息列表 */ callSessionUsers: ICallSessionUser[]; /** * 通话开始时间 */ startTime?: number; /** * 同步服务端时间 */ syncTime?: number; } /** * 通话事件上报 */ interface IEventUpCallCon extends IBaseSingalCon { /** * 事件类型,10 打开摄像头、11 关闭摄像头 */ eventType: CallServerEventType; /** * 目标用户 Id 列表 */ toUserIds?: string[]; /** * 事件参数 */ eventArgs?: Object; /** * 事件发生时间戳 */ eventTime: number; } /** * 通话事件下发 */ interface IEventDownCallCon extends IBaseSingalCon { /** * 事件类型,10 打开摄像头、11 关闭摄像头 */ eventType: CallServerEventType; /** * 事件参数 */ eventArgs?: Object; /** * 事件发起用户 ID */ fromUserId: string; /** * 事件发生时间戳 */ eventTime: number; } /** * 对话数据上行 */ interface IDialogUpCallCon extends IBaseSingalCon { /** * 事务 ID */ transactionId?: string; /** * 对话类型 */ dialogType: DialogType; /** * 对话动作 */ action: DialogAction; /** * 附加数据,上传为可选 */ extraKeyVal?: { mediaType: RCCallPlusMediaType.AUDIO | RCCallPlusMediaType.AUDIO_VIDEO; reason?: DialogAction; } | { cameraOn: 0 | 1; }; /** * 目标用户 Id */ toUserIds?: string[]; } /** * 对话数据下行信令内容 */ interface IDialogDownCallCon extends IDialogUpCallCon { /** * 操作者 ID */ promoterId: string; /** * 同步时间戳 */ syncTime: number; /** * 附加数据 */ extraKeyVal: { mediaType: RCCallPlusMediaType.AUDIO | RCCallPlusMediaType.AUDIO_VIDEO; reason?: DialogAction; }; } /** * 日志记录获取 */ interface ISyncCallLogCon { /** * 要获取的 userId */ userId: string; /** * 同步时间戳 */ syncTime: number; /** * 每页记录数 默认 30 */ count?: number; /** * 正序或倒序 */ order?: 0 | 1; } interface ISyncCallLogRes extends IBaseSingalCon { callType: RCCallPlusType; callDir: RCCallDirection; mediaType: RCCallPlusMediaType; /** * 是否为密聊: 否 0、是 1 */ secretChat: 0 | 1; /** * 用户 ID */ userId: string; /** * 目标 ID */ targetId: string; /** * 呼叫发起者 ID */ callingUserId: string; /** * 参与者 ID 列表 */ callUserIds: string[]; /** * 通话状态 */ callStatus: RCCallPlusCallState; /** * 用户通话状态 */ sessionStatus: RCCallPlusSessionUserState; /** * 用户系统状态 */ sysStatus: RCCallPlusReason; startTime: number; endTime: number; duration: number; /** * 通话创建时间 */ crtTime: number; /** * 同步数据 */ syncTime: number; } interface ISyncCallLogResList { hasMore: 0 | 1; callLogList: ISyncCallLogRes[]; /** * 列表中最大时间戳 */ maxTime: number; /** * 通话记录列表中最小的时间戳 */ minTime: number; /** * 删除的列表 */ delLogList: { callId: string; /** * 当前用户 ID */ userId: string; }[]; /** * 最后已读的 callId */ lastReadedCallId: string; } /** * 日志记录下发信令内容 */ interface IPubCallLog extends ISyncCallLogRes { } interface ISignalTransporterListener { /** * 收到 call 邀请 * @param isDirectly 是否为直发信令 */ onInvite(data: IPubInviteCon, isDirectly: boolean, traceId: string): void; /** * 收到通话状态变更 */ onStatusDown(data: IStatusDownCont, traceId: string, sessionId?: string): void; /** * 其他端通话状态变更 */ onOtherClientStatusDown(data: IStatusDownCont, traceId: string): void; /** * 收到设备变更相关事件 */ onEventDown(data: IEventDownCallCon, traceId: string): void; /** * 收到通话结束日志 */ onRecvCallEndLog(data: IPubCallLog, traceId: string): void; /** * 收到媒体类型变更 */ onSwitchMediaType(data: IDialogDownCallCon, traceId: string): void; /** * IM 状态变更 */ onIMStateChange(state: RCConnectionStatus): void; } interface IQryUserHasCallRes extends IBaseSingalCon { /** * 通话阶段 */ hasCallStage: RCCallStage; } interface IGetUserCallStateListRes { callStateList: { callId: string; callType: RCCallPlusType; mediaType: RCCallPlusMediaType; /** * 呼叫发起者 ID */ callingUserId: string; /** * 通话参与用户 ID 列表 */ callUserIds: string[]; /** * 通话状态 */ callStatus: RCCallPlusCallState; /** * 用户会话状态 */ userSessionStatus: RCCallPlusSessionUserState; /** * 生成时间 */ crtTime: number; /** * 最后一次变更时间 */ syncTime: number; /** * 来源对象类型 */ targetType: RCCallTargetType; /** * 来源对象ID(根据targetType分别指定个人,群组ID,默认值为userId) */ targetId: string; startTime: number; }[]; } interface IClearCallLogRes { /** * 删除数量 */ rowCount: number; } interface IGetCallSessionServerRes extends IBaseSingalCon { /** * 发起人 */ callingUserId: string; /** * callType */ callType: RCCallPlusType; /** * 媒体类型 */ mediaType: RCCallPlusMediaType; /** * 通话状态 */ callStatus: RCCallPlusCallState; /** * 通话用户人员列表信息 */ callSessionUsers: { userId: string; sessionStatus: RCCallPlusSessionUserState; statusReason: string; statusTime: number; sysStatus: RCCallPlusReason; targetType: RCCallTargetType; targetId: string; }[]; /** * 开始通话时间戳 */ startTime: number; /** * 通话时长(单位:s) */ duration: number; /** * 同步时间戳 */ syncTime: number; } interface IGetCallTimeInfoRes extends IBaseSingalCon { /** * 开始通话时间戳 */ startTime: number; /** * 服务器当前时间 */ syncTime: number; /** * 通话时长(单位:s) */ duration: number; /** * 首帧时间 */ firstFrametime: number; } interface ISysStatusUpOpts extends IBaseSingalCon { /** * 人员系统状态 */ sysStatus: RCCallPlusReason; /** * 是否立即转发(0:否 1是) * 否的话会通过下一次人员状态 userState 的下发同步带下去 */ forward: ForwardType; } interface IEndAbnormalCallOpts { /** * 0 当前端;1 所有端 */ allDevice: 0 | 1; /** * 异常的 callId 列表 */ callIds: string[]; } interface IGetDelayTimeInfoRes { /** * 获取 CallServer 与用户本地时间的差值,用于矫正与 CallServer 的时间 */ delayTime: number; /** * callServer 接口返回时间 */ rtt: number; } interface ICallId { /** * 通话唯一 ID */ callId: string; } interface ISessionUser { /** * 成员 ID */ userId: string; /** * 成员状态 */ userState: RCCallPlusSessionUserState; /** * 成员系统状态 */ systemState: RCCallPlusReason; /** * 来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 来源组 ID */ targetId?: string; /** * 用户类型 (0:正常用户 1:观察者) */ userType?: RCCallUserType; /** * 状态时间 */ stateTime?: number; } interface IRCCallPlusCallRecord { /** * 呼叫 ID */ callId: string; /** * 通话类型 */ callType: RCCallPlusType; /** * 呼叫方向 */ callDirection: RCCallDirection; /** * 通话媒体类型 */ mediaType: RCCallPlusMediaType; /** * 呼叫发起者 ID */ callerUserId: string; /** * 参与者 ID */ callUserIds: string[]; /** * 通话状态 */ sessionState: RCCallPlusCallState; /** * 用户状态 */ userState: RCCallPlusSessionUserState; /** * 通话开始时间戳 */ startTimestamp: number; /** * 通话结束时间戳 */ endTimestamp: number; /** * 通话时长(单位:s) */ duration: number; /** * 同步时间戳 */ syncTimestamp: number; /** * 用户系统状态 */ systemState: RCCallPlusReason; /** * 创建时间 */ createTimestamp: number; } interface IUserInfo { /** * 用户 ID */ userId: string; /** * 用户类型 (0:正常用户 1:观察者) */ userType?: RCCallUserType; /** * 来源对象类型 */ targetType?: RCCallTargetType; /** * 来源对象 ID */ targetId?: string; /** * 组织 ID */ orgId?: string; } interface IStartCallOpts extends ICallId { /** * 被邀请人信息 */ toUsers: IUserInfo[]; /** * 通话类型 */ callType: RCCallPlusType; /** * 通话媒体类型 */ mediaType: RCCallPlusMediaType; /** * 当前用户来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 当前用户来源组 ID */ targetId?: string; /** * 正在通话中的老版房间 ID (老版 call 或 meeting) * 传入后,会将此房间中的多端中的自己直接踢掉 */ oldRoomId?: string; /** * 推送扩展 */ pushConfig?: IRCCallPlusPushConfig; /** * 附加信息,服务器透传 */ extra?: string; } interface IStartCallResult { /** * 通话唯一 ID */ callId: string; /** * 传入的 clientCallId */ clientCallId: string; /** * 人员支持情况,后期可能废弃谨慎使用 */ toUsersSupport?: { [userId: string]: 0 | 1; }; /** * 占线用户列表 */ busylineUsers?: IBusylineUser[]; } interface IInviteOpts { /** * 被邀请人信息 */ toUsers: IUserInfo[]; /** * 来源组 ID 类型 */ targetType?: RCCallTargetType; /** * 来源组 ID */ targetId?: string; /** * 推送扩展 */ pushConfig?: IRCCallPlusPushConfig; /** * 附加信息,服务器透传 */ extra?: string; } interface IInviteRes extends ICallId { callType: RCCallPlusType; busylineUsers?: IBusylineUser[]; } interface IAcceptOpts extends ICallId { /** * 推送扩展 */ pushConfig?: IRCCallPlusPushConfig; } interface IHangupForBusyOpts extends ICallId { /** * 用户系统状态 */ systemState: RCCallPlusReason; /** * 推送扩展 */ pushConfig?: IRCCallPlusPushConfig; } interface IJoinCallOpts { callId: string; mediaType: RCCallPlusMediaType; } interface IGetCallLogListOpts { /** * 获取时间戳之后的数据 */ timestamp: number; /** * 获取数量 */ count?: number; /** * 正序或倒序 */ order?: 0 | 1; } interface IRCCallPlusGetCallRecordRes { /** * 是否有更多通话记录 */ hasMore: boolean; /** * 通话记录列表 */ list: IRCCallPlusCallRecord[]; /** * hasMore 为 true 时,继续获取通话记录需传入的时间戳 */ syncTime: number; } interface IReqChangeMediaTypeOpts { /** * 通话媒体类型 */ mediaType: RCCallPlusMediaType.AUDIO | RCCallPlusMediaType.AUDIO_VIDEO; /** * 需要接收的用户 ID 列表 */ toUserIds: string[]; } interface IResChangeMediaTypeOpts { /** * 事务 ID */ transactionId: string; /** * 是否同意 */ agree: boolean; } interface ICancelChangeMediaTypeOpts { /** * 事务 ID */ transactionId: string; } interface IReqChangeMediaTypeRes { /** * 事务 ID */ transactionId: string; } interface IGetCallSessionRes extends ICallId { /** * 呼叫发起者 */ startCallerId: string; /** * callType */ callType: RCCallPlusType; /** * 媒体类型 */ mediaType: RCCallPlusMediaType; /** * 通话状态 */ sessionState: RCCallPlusCallState; /** * 通话用户人员列表 */ callSessionUsers: ISessionUser[]; /** * 开始通话时间戳 */ startTime: number; /** * 通话时长(单位:s) */ duration: number; /** * 同步时间戳 */ syncTime: number; } declare enum CallTimerEventType { INVITER = "inviter", INVITEE = "invitee" } interface IOldDialogData { transactionId?: string; action: DialogAction; mediaType: RCCallPlusMediaType; } /** * SDK 内部使用 Session 实例 */ declare class RCCallInnerSession extends EventEmitter { /** * Call ID */ private readonly _callId; /** * session 状态 */ private _state; /** * 通话类型 */ private _callType; /** * 通话媒体类型 */ private _mediaType; /** * session 呼叫发起者 */ private _startCallerId; /** * 本次 session 的邀请者 */ private _callerId; /** * 当前 session 人员信息列表 */ private _callUsers; private readonly _logger; /** * 请求更新的 mediaType */ private _reqMediaType; /** * 邀请者超时计时器 */ private _inviterTimerId; /** * 被邀请者超时计时器 */ private _inviteeTimerId; /** * 当前 session 人员信息列表 */ /** * 旧 dialog 数据,用于对比 */ private _oldDialogData; /** * 记录是否本地有挂断 */ private isLocalClientHangup; /** * 构造器 */ constructor( /** * Call ID */ _callId: string, /** * session 状态 */ _state: RCCallPlusCallState, /** * 通话类型 */ _callType: RCCallPlusType, /** * 通话媒体类型 */ _mediaType: RCCallPlusMediaType, /** * session 呼叫发起者 */ _startCallerId: string, /** * 本次 session 的邀请者 */ _callerId: string, /** * 当前 session 人员信息列表 */ _callUsers: ISessionUser[], _logger: BasicLogger); /** * 获取 CallID */ getCallId(): string; /** * 获取状态 */ getSessionState(): RCCallPlusCallState; /** * 获取通话类型 */ getCallType(): RCCallPlusType; /** * 获取媒体类型 */ getMediaType(): RCCallPlusMediaType; /** * 获取 session 发起者 */ getStartCallerId(): string; /** * 本次 session 邀请者 */ getCallerId(): string; /** * 获取 session user list */ getUserList(): ISessionUser[]; /** * 请求更新的 mediaType */ getReqMediaType(): RCCallPlusMediaType | null; /** * inviterTimerId */ getInviterTimerId(): number; /** * inviteeTimerId */ getInviteeTimerId(): number; getAllTimerIds(): number[]; /** * 更新人员列表, 并返回更新的人员列表 * 根据人员状态去添加、删除、更新 * 根据状态时间,判断是否更新,无时间戳的为本地状态调整,直接更新 */ updateUserList(users: ISessionUser[], traceId: string): ISessionUser[]; setOldDialogData(data: IOldDialogData): void; /** ======私有方法============================================================================================= */ /** * 更新 session 状态 */ updateSessionState(state: RCCallPlusCallState): void; /** * 更新通话类型(升降级设置) */ updateCallType(callType: RCCallPlusType): void; /** * 更新媒体类型(升降级) */ updateMediaType(mediaType: RCCallPlusMediaType): void; /** * 更新请求的媒体类型(升降级) */ updateReqMediaType(mediaType: RCCallPlusMediaType | null): void; /** * 更新 invter timer id */ updateTimerId(type: CallTimerEventType, timerId: number): void; /** * 获取 */ getOldDialogData(): IOldDialogData; /** * 设置是否是己端挂断 */ setIsLocalClientHangup(isLocalClientHangup: boolean): void; getIsLocalClientHangup(): boolean; } declare enum CallServerAction { /** * 开始单人呼叫 */ START_SINGLE_CALL = "startSingleCall", /** * 开始多人呼叫 */ START_GROUP_CALL = "startGroupCall", /** * 邀请好友加入通话 */ INVITE_CALL = "inviteCall", /** * 下发邀请通话数据 */ PUB_INVITE_CALL = "pubInviteCall", /** * 通话响铃 */ RINGING_CALL = "ringCall", /** * 接受通话 */ ACCEPT_CALL = "acceptCall", /** * 加入通话 */ JOIN_CALL = "joinCall", /** * 挂断通话 */ HANGUP_CALL = "hangupCall", /** * 通话状态上报 */ STATUS_UP_CALL = "statusUpCall", /** * 通话状态下发 */ STATUS_DOWN_CALL = "statusDownCall", /** * 通话事件上报 */ EVENT_UP_CALL = "eventUpCall", /** * 通话事件下发 */ EVENT_DOWN_CALL = "eventDownCall", /** * 对话数据上行 */ DIALOG_UP_CALL = "dialogUpCall", /** * 对话数据下行 */ DIALOG_DOWN_CALL = "dialogDownCall", /** * 获取用户会话数据列表 */ GET_CALL_USER_SESSION_LIST = "getCallUSerSessionList", /** * 日志记录同步 */ SYNC_CALL_LOG = "syncCallLog", /** * 日志记录下发 */ PUB_CALL_LOG = "pubCallLog", /** * 批量删除通话记录 */ DEL_CALL_LOG = "deleteCallLog", /** * 查询当前用户已有的 call 状态 */ QRY_CALL_STATE = "queryUserHasCall", /** * 查询 callServer 当前时间戳 */ QRY_SRV_TIMESTAMP = "getCallSrvTimeStamp", /** * 获取当前用户进行的 call 列表 */ GET_CALL_STATE_LIST = "getUserCallStateList", /** * 清除当前用户通话记录 */ CLEAR_CALL_LOG = "cleanCallLog", /** * 获取 call 会话信息 */ GET_CALL_SESSION = "getCallSession", /** * 获取 call 时间信息 */ GET_CALL_TIME_INFO = "getCallTimeInfo", /** * 结束当前用户异常的callSession(包含各个阶段),主要用于应用异常退出再启动、各种通话异常当中。酌情调用 */ END_ABNORMAL_CALL = "endUserAbnormalCalls", /** * 用户系统状态上报 */ SYS_STATUS_UP = "sysStatusUp", /** * 上报通话记录已读状态 */ UP_CALL_LOG_READED = "upCallLogReaded", /** * 下发通话记录已读状态 */ PUB_CALL_LOG_READED = "pubCallLogReaded", /** * 下发下行信令数据序号Id (弱网补偿方法,移动端已实现,PC 未实现) */ PUB_NACK_SEQ_ID = "pubNACKSeqId", /** * 查询当前用户参与的未结束的callSession的CallId列表,group专用,可在groupcall结束时,补偿各端的快捷入口是否消失的判断 */ GET_USER_CALL_SESSION_ID_LIST = "getUserCallSessionIdList" } declare enum RCCallPlusInnerCode { SUCCESS = 0, /** * 无效的响应时间(接口响应时间过长) */ INVALID_RESPONSE_TIME = 80170, /** * 非最优响应时间 */ NONOPTIMAL_RES_TIME = 80171 } /** * 校时模块 */ declare class TimeCorrectioner { private readonly _callEngine; private readonly _logger; private readonly _singleCallDurationEv; /** * 接口响应时间 */ private _RTT; /** * 可用的接口响应时间下限(单位: ms) */ private _validMinRTT; /** * 可用的接口响应时间上限(单位: ms) */ private _validMaxRTT; /** * 与 callServer 的时间偏差时间(单位: ms) */ private _deltaTime; /** * timerId */ private _timerId; /** * 轮训时间间隔(单位: ms) */ private readonly _interval; /** * 最大重试次数 */ private readonly _maxRetryTimes; constructor(_callEngine: RCCallEngine, _logger: BasicLogger, _singleCallDurationEv: (callId: string, clientStartTime: number, clientFirstFrameTime: number, traceId: string) => void); /** * 从服务端获取通话时长、通话开始时间 */ getCallClientTimeByServer(callId: string, traceId: string): Promise<{ code: number; duration?: number; clientStartTime?: number; }>; /** * 直接计算客户端开始时间 */ calcClientStartTime(callId: string, startTime: number, traceId: string): { code: RCCallPlusInnerCode; clientStartTime?: number; }; private _startTimes; /** * 开始定时递归获取与 CallServer 的时间偏差值 */ start(traceId: string): void; /** * 停止定时轮训 */ stop(traceId: string): void; /** * 重新定时轮训 */ restart(traceId: string): void; getLocalDelayTime(): number; getRTT(): number; /** * 获取与 CallServer 的时间偏差值,非通话中的计算 */ private _getDeltaTime; /** * 通话中获取开始时间 */ private _getDeltaTimeInCall; private _retryTimesInCall; private readonly _maxRetryTimesInCall; /** * 多次校正抛给业务层的通话开始时间、首帧时间 */ private _loopCorrectClientTime; } declare enum RCCallPlusMediaTypeChangeResult { /** * 请求方取消媒体类型变更 */ CANCEL_CHANGE_MEDIA_TYPE = 0, /** * 应答方拒绝媒体类型切换 */ REFUSE_CHANGE_MEDIA_TYPE = 1, /** * 服务仲裁允许媒体类型切换 */ SERVER_ALLOW_MEDIA_TYPE = 2, /** * 媒体类型切换超时 */ CHANGE_MEDIA_TYPE_TIMEOUT = 3 } declare class RCCallPlusReportModule { private readonly _logger; private _listener; constructor(_logger: BasicLogger); /** * 状态机事件注册 */ registerEventListener(listener: ICallPlusEventListener): void; /** * 回调应用层事件 * @param eventName * @param attrs * @returns */ private _callAppListener; onReceivedCall(session: RCCallPlusSession, traceId: string, extra?: string): void; onRemoteUserInvited(inviteeUserList: string[], inviterUserId: string, callId: string): void; onCallConnected(session: RCCallPlusSession): void; onCallTypeChanged(callType: RCCallPlusType, callId: string, traceId: string): void; /** * 增量上报远端人员状态变化 */ onRemoteUserStateChanged(data: { callId: string; userId: string; userState: RCCallPlusSessionUserState; reason?: RCCallPlusReason; }, traceId: string): void; onCallEnded(session: RCCallPlusSession, reason: RCCallPlusReason, traceId: string): void; onRemoteCameraStateChanged(callId: string, track: RCRemoteTrack): void; onRemoteMicrophoneStateChanged(callId: string, track: RCRemoteTrack): void; onReceivedCallRecord(record: IRCCallPlusCallRecord, traceId: string): void; onReceivedChangeMediaTypeRequest(userId: string, transactionId: string, mediaType: RCCallPlusMediaType, traceId: string): void; onReceivedChangeMediaTypeResult(info: { userId: string; transactionId: string; mediaType: RCCallPlusMediaType; code: RCCallPlusMediaTypeChangeResult; }, traceId: string): void; onReceivedCallStartTime(info: { callId: string; callStartTime: number; }, traceId: string): void; onReceivedCallFirstFrameTime(callId: string, callFirstFrameTime: number, traceId: string): void; onUserMediaAvailable(tracks: RCTrack[], traceId?: string): void; onFetchRemoteMediaError(tracks: ISubscribeAttr[], code: RCRTCCode): void; onUserAudioLevelChanged(audioLevelReportList: { track: RCLocalAudioTrack | RCRemoteAudioTrack; audioLevel: number; }[]): void; onReceivedCallPlusSummaryMessage(message: IRCCallPlusReceivedSummaryMessage): void; onReceivedGroupCallStatusMessage(message: IReceivedGroupCallStatusMessage): void; } declare class SignalTransporter extends EventEmitter { private readonly _context; private readonly _runtime; private readonly _initOpts; private readonly _timeCorrectioner; private readonly _logger; private readonly _reportAppEventModule; /** * 监听对象 */ _listener: ISignalTransporterListener; /** * 需要重试的 action */ _needRetryActions: CallServerAction[]; _sessionId: string; /** * constructor */ constructor(_context: PluginContext, _runtime: IRuntime, _initOpts: ICallPlusInitOpts, _timeCorrectioner: TimeCorrectioner, _logger: BasicLogger, _reportAppEventModule: RCCallPlusReportModule); private _onMessage; private _dealMissMessage; private _dealGroupCallMessage; getSessionId(): string; getDeviceId(): string; registerListener(listener: ISignalTransporterListener): void; startCall(msg: IStartCallCon, traceId: string): Promise<{ code: number; data?: IStartCallRes; }>; startSingleCall(msg: IStartSingleCon, traceId: string): Promise<{ code: number; data?: IStartCallRes; }>; startGroupCall(msg: IStartGroupCon, traceId: string): Promise<{ code: number; data?: IStartCallRes; }>; inviteCall(msg: IInviteCallCon, traceId: string): Promise<{ code: number; data?: IInviteCallRes; }>; ringingCall(msg: IRingingCallCon, traceId: string): Promise<{ code: number; }>; acceptCall(msg: IAcceptCallCon, traceId: string): Promise<{ code: number; }>; joinCall(msg: IJoinCallCon, traceId: string): Promise<{ code: number; }>; hangupCall(msg: IHangupCallCon, traceId: string): Promise<{ code: number; }>; statusUpCall(msg: IStatusUpCon, traceId: string): Promise<{ code: number; }>; eventUpCall(msg: IEventUpCallCon, traceId: string): Promise<{ code: number; }>; dialogUpCall(msg: IDialogUpCallCon, traceId: string): Promise<{ code: number; }>; deleteCallRecord(userId: string, callIds: string[], traceId: string): Promise<{ code: number; }>; syncCallLog(msg: ISyncCallLogCon, traceId: string): Promise<{ code: number; data?: ISyncCallLogResList; }>; queryUserHasCall(): Promise<{ code: number; data?: IQryUserHasCallRes; }>; getCallServerTimestamp(traceId: string): Promise<{ code: number; data?: { syncTime: number; }; }>; getCallTimeInfo(callId: string, traceId: string): Promise<{ code: number; data?: IGetCallTimeInfoRes; }>; getUserCallStateList(traceId: string): Promise<{ code: number; data?: IGetUserCallStateListRes; }>; clearCallRecord(traceId: string): Promise<{ code: number; data?: IClearCallLogRes; }>; getCallSession(opts: IBaseSingalCon, traceId: string): Promise<{ code: number; data?: IGetCallSessionServerRes; }>; sysStatusUp(opts: ISysStatusUpOpts, traceId: string): Promise<{ code: number; }>; upCallLogReaded(opts: IBaseSingalCon): Promise<{ code: number; }>; /** * 清除用户正在呼叫中的通话会话(*非暴露接口,供调试酌情调用) */ endUserAbnormalCalls(opts: IEndAbnormalCallOpts): Promise<{ code: number; }>; /** ======私有方法============================================================================================= */ private _onIMConnectionStateChange; /** * call 信令发送 * @param targetId 获取 call log (syncCallLog) 时传 userId, 其他 action 传 callId * @param key call server 定义 action * @param options action 携带参数,无参数传空字符串 */ private _sendCallSignal; /** * call 信令接收 */ private _onRecvCallSignal; /** * 根据 deviceId 判断数据是否应该下发 * deviceId 为空字符串或 null 直接下发 * deviceId 有具体的值,根据 deviceId 判断是否是己端的 deviceId */ isValidData(toDeviceId: string | null): boolean; /** * 收到邀请 * @param isDirectly 是否为直发信令 */ private _onPubInviteCall; /** * 收到状态变更:响铃、忙碌、通话等待、对方未接听、己方未接听 */ private _onStatusDownCall; /** * 收到通话事件变更:打开|关闭 摄像头 */ private _onEventDownCall; /** * 收到通话调整事件及结果 * 事件:媒体类型切换 * 动作:请求、接受、拒绝、取消 */ private _onDialogDownCall; /** * 通话结束后,日志下发 */ private _onPubCallLog; /** * 补偿数据处理 */ private _onConpensationData; } /** * 异常结束 call 处理存储类 * 在呼出或呼入阶段的 call 进行本地存储,正常结束后清除 * 异常结束后,本地取未清除的 callId, 通过服务接口清除异常结束的 call ,防止无法呼出或呼入 */ declare class AbnormalCall { private readonly _logger; private _localStore; private static _STORAGE_KEY; constructor(runtime: IRuntime, _logger: BasicLogger); /** * 添加异常 callId */ addAbnormallCallId(userId: string, callId: string): void; /** * 删除异常 callId */ removeAbnormalCallIds(userId: string, callIds: string[]): void; /** * 获取异常结束的 callId 列表 */ getAbnormalCallIds(userId: string): Promise<string[] | null>; } declare class RTCModule extends EventEmitter { private readonly _context; private readonly _runtime; private readonly _initOpts; private readonly _logger; private readonly _callEngine; private readonly _reportAppEventModule; static __INNER_RTC_PROCESS_FAILED__: string; static __INNER_RTC_PEERCONNECTION_ABNORMAL_CLOSE__: string; static __INNER_ON_SELF_JOINED__: string; static __INNER_ON_OTHER_JOINED__: string; static __INNER_RECEIVE_FIRST_FRAME__: string; static __INNER_ON_KICKOFF__: string; /** * RCRTC 实例 */ _rtcClient: RCRTCClient; /** * 己方的音视频 tracks */ private _localTracks; /** * RCRTCRoom 实例 */ _room: RCRTCRoom | null; private _callId; private _callMediaType; private _videoConfig; private _audioConfig; private _isPubTiny; private _audioOutputDeviceId; /** * 视频配置是否变更 */ private _videoConfigIsChange; /** * 音频配置是否变更 */ private _audioConfigIsChange; /** * 存储设置的人员和视图 */ private _userViewMap; private _callPlusStatusReportListener; private _remoteAudioEnable; private _preHangupCallId; constructor(_context: PluginContext, _runtime: IRuntime, _initOpts: ICallPlusInitOpts, _logger: BasicLogger, _callEngine: RCCallEngine, _reportAppEventModule: RCCallPlusReportModule); setCallPlusStatusReportListener(listener: IStatusReportListener): void; /** * 取摄像头资源 * 内存中有时,返回内存中的视轨 */ getCameraVideoTrack(traceId: string): Promise<{ code: number; track?: RCLocalTrack; }>; /** * 取麦克风资源 * 内存中有时,返回内存中的音轨 */ getMicrophoneAudioTrack(traceId: string): Promise<{ code: number; track?: RCLocalTrack; }>; /** * 根据通话类型创建音、视频资源 * @param mediaType 音频或音视频 */ createCallMediaTracks(mediaType: RCCallPlusMediaType, traceId: string): Promise<{ code: number; }>; setVideoConfig(videoConfig: IVideoConfig): void; setAudioConfig(audioConfig: IAudioConfig): void; setAudioOutputDeviceId(deviceId: string): Promise<{ code: number; }>; destroyAllTracks(traceId: string): void; setAllRemoteAudioEnable(enable: boolean, traceId: string): { code: 80001; } | { code: 0; }; destroyTrack(track: RCLocalTrack): Promise<void>; /** * session 连接 */ sessionConnected(callId: string, traceId: string): Promise<void>; sessionClose(callId: string, traceId: string): Promise<void>; /** * 禁用视频 track */ disableVideoTrack(): Promise<{ code: number | RCRTCCode; track?: RCLocalTrack; }>; /** * 启用视频track * 1. 启用前应用层需先创建视频 track */ enableVideoTrack(traceId: string): Promise<{ code: number | RCRTCCode; }>; /** * 通话中切换视频设备 */ changeVideoDevice(traceId: string): Promise<{ code: number; track?: RCLocalTrack; }>; /** * 通话中更换音频设备 */ changeAudioDevice(traceId: string): Promise<{ code: number; }>; /** * 禁用音频 track */ disableAudioTrack(): Promise<{ code: number | RCRTCCode; track?: RCLocalTrack; }>; /** * 媒体类型升、降 */ changeMediaType(mediaType: RCCallPlusMediaType, traceId: string): Promise<void>; /** * 升级 音频 -> 音视频 * 1. 业务层需要先通过 createLocalTracks 创建本地视频 track * 2. SDK 只处理发布视频 track */ private _upgradeMediaType; /** * 降级处理 */ private _downgradeMediaType; /** * 加入 RTC 房间 */ joinRTCRoom(callId: string, traceId: string): Promise<{ code: number; room?: RCRTCRoom; tracks?: RCRemoteTrack[]; }>; /** * RTC 订阅 */ subscribeTracks(tracks: (ISubscribeAttr)[], traceId: string): Promise<{ code: number; }>; /** * RTC 取消订阅 */ unsubscribeTracks(tracks: RCRemoteTrack[], traceId: string): Promise<{ code: number; }>; private _releaseStoredData; getRemoteTracks(): { [userId: string]: RCRemoteTrack[]; }; getRemoteTrack(userId: string, mediaType: RCCallPlusMediaType): RCRemoteTrack | undefined; getRTCSessionId(): string | null; /** ======私有方法============================================================================================= */ /** * RTC 事件监听注册 */ private _regRTCListeners; private _onLocalTrackReady; private _onRemoteTrackReady; private _onKickOff; /** * RTC Peer 异常关闭 * 移动端未处理此回调,定义 sysStatus 为 CONNECTION_ERR */ private _onRTCPeerConnectionCloseByException; private _onSelfJoined; private _onRemoteTrackPublish; private _onTrackUnpublish; private _onAudioMuteChange; private _onVideoMuteChagne; private _onRTCStateReport; /** * RTC 接收最终失败后需要调用 hangup 挂断的情况 */ private _onRTCMethodFail; private _onOtherMemJoined; /** * 创建本地音频 track, 创建成功后保存本地并回调通知 */ private _createAudioTrack; /** * 创建本地视频 track, 创建成功后保存本地并回调通知 */ private _createVideoTrack; /** * 获得本地缓存视频 track */ getLocalVideoTrack(): RCLocalTrack | undefined; /** * 获得本地缓存音频 track */ getLocalAudioTrack(): RCLocalTrack | undefined; /** * 发布本地资源的逻辑 */ publish(tracks: (RCLocalTrack | IPublishAttrs)[], traceId: string): Promise<{ code: number; }>; publishVideoTrack(): Promise<IPubSuccessRes>; setVideoView(list: { userId: string; videoElement: HTMLVideoElement; isTiny?: boolean; }[], traceId: string): void; /** * 删除视图时,取消订阅资源 */ removeVideoView(userIds: string[], traceId: string): void; /** * 获取存储的人员和 video 元素数据 */ getUserViewMap(): { [userId: string]: { videoView: HTMLVideoElement; isTiny: boolean; }; }; /** * 播放媒体资源 */ playMedia(userId: string, mediaType: RCCallPlusMediaType, videoView: HTMLVideoElement, traceId: string): Promise<{ code: 80104; } | { code: 80102; } | { code: RCRTCCode.PB_ERROR | RCRTCCode.SIGNAL_DISCONNECTED | RCRTCCode.PARAMS_ERROR | RCRTCCode.REPERT_JOIN_ROOM | RCRTCCode.NOT_IN_ROOM | RCRTCCode.SERVICE_INVALID | RCRTCCode.RTC_TOKEN_INVALID | RCRTCCode.SIGNAL_ERROR | RCRTCCode.CREATE_OFFER_FAILED | RCRTCCode.REQUEST_FAILED | RCRTCCode.MCU_SERVER_NOT_FOUND | RCRTCCode.BROADCAST_SUB_LIST_NOT_EMPTY | RCRTCCode.ROOM_HAS_BEEN_DESTROYED | RCRTCCode.NOT_OPEN_VIDEO_AUDIO_SERVER | RCRTCCode.GET_USER_MEDIA_FAILED | RCRTCCode.GET_DISPLAY_MEDIA_FAILED | RCRTCCode.BROWSER_PERMISSION_DENIED | RCRTCCode.CREATE_CUSTOM_TRACK_FAILED | RCRTCCode.INVALID_TAGS | RCRTCCode.INVALID_USER_ID | RCRTCCode.CREATE_FILE_TRACK_FAILED | RCRTCCode.INVALID_FILE_INSTANCE | RCRTCCode.SET_REMOTE_DESCRIPTION_FAILED | RCRTCCode.BROWSER_NOT_SUPPORT | RCRTCCode.TRACK_NOT_READY | RCRTCCode.VIDEO_TRACK_MISS_MEDIA_ELEMENT | RCRTCCode.TRACK_PLAY_ERROR | RCRTCCode.SIGNAL_AUDIENCE_JOIN_ROOM_FAILED | RCRTCCode.SIGNAL_ROOM_CHANGE_IDENTITY_FAILED | RCRTCCode.PACKAGE_ENVIRONMENT_ERROR | RCRTCCode.PUBLISH_TRACK_LIMIT_EXCEEDED | RCRTCCode.CDN_RESOURCE_IS_EMPTY | RCRTCCode.SIGNAL_JOIN_RTC_ROOM_REFUSED | RCRTCCode.NO_PERMISSION_TO_USE_REQUESTED_DEVICE | RCRTCCode.THE_FUNCTION_IS_DISABLED_IN_PKROOM | RCRTCCode.SOME_TRACKS_PUBLISH_FAILED | RCRTCCode.MAC_IN_ELECTRON_NOT_SUPPORT_SCREEN_SHARE_WITH_AUDIO | RCRTCCode.JWT_TIME_OUT | RCRTCCode.SYSTEM_PERMISSION_DENIED | RCRTCCode.PUBLISH_TRACKS_IS_INVALID | RCRTCCode.TRACK_READYSTATE_IS_ENDED | RCRTCCode.APPLY_3A_NOISE_WORKLET_BEFORE_PUBLISH | RCRTCCode.LOAD_3A_MODULE_FAILED; } | { code: 0; }>; } declare class RCCallEngine extends EventEmitter { private readonly _context; private readonly _runtime; private readonly _initOpts; private readonly _logger; private readonly _reportAppEventModule; static __INNER_SESSION_CLOSE__: string; static __INNER_SESSION_CONNECT__: string; static __INNER_CHANGE_MEDIA_TYPE__: string; static __INNER_INVITE__: string; /** * 主 session */ private _mainSession; /** * 在通话中收到的 邀请 session */ private _holdSessions; /** * 信令模块 */ _signalModule: SignalTransporter; /** * 异常结束 call 处理器 */ _abnormalModule: AbnormalCall; /** * 记录单呼中,是否上报过第一帧 * 置 true 时机:收到远端第一帧,成功上报 Server * 置 false 时机:通话结束 */ private _isUpFirstFrameTime; /** * 通话为 ONCALL 时,SDK 需给业务层上报通话开始计时事件 * 会收到多次 ONCALL,所以需要标识是否已抛过事件 */ private _callStartMap; /** * 校时器 */ _timeCorrectioner: TimeCorrectioner; /** * client callId */ private _clientCallId; /** * session 需使用 rtc 模块取设备状态 */ private _rtcModule; /** * 构造器 */ constructor(_context: PluginContext, _runtime: IRuntime, _initOpts: ICallPlusInitOpts, _logger: BasicLogger, _reportAppEventModule: RCCallPlusReportModule); /** * 发起呼叫 */ startCall(opts: IStartCallOpts, traceId: string): Promise<{ code: number; data?: IStartCallResult; }>; /** * 通话中邀请 */ invite(opts: IInviteOpts, traceId: string): Promise<{ code: number; data?: IInviteRes; }>; /** * beforeHangup */ clearAllTimer(callId: string, traceId: string): void; /** * 挂断 * 通话请求取消、通话拒绝 */ hangup(opts: IHangupForBusyOpts, traceId: string): Promise<{ code: number; }>; /** * 接收邀请 * 通话中又收到新来电后,接听新来电时,必须先挂断之前的通话(mainSession) */ accept(opts: IAcceptOpts, traceId: string): Promise<{ code: number; }>; /** * 直接加入 */ joinCall(opts: IJoinCallOpts, traceId: string): Promise<{ code: number; }>; /** * 通话媒体变更请求 */ requestChangeMediaType(opts: IReqChangeMediaTypeOpts, traceId: string): Promise<{ code: number; data?: IReqChangeMediaTypeRes; }>; /** * 通话媒体类型变更请求响应 */ responseChangeMediaType(opts: IResChangeMediaTypeOpts, traceId: string): Promise<{ code: number; }>; /** * 取消通话媒体类型切换请求 */ cancelChangeMediaType(opts: ICancelChangeMediaTypeOpts, traceId: string): Promise<{ code: number; }>; /** * 获取 call log 列表 */ getCallLogList(opts: IGetCallLogListOpts, traceId: string): Promise<{ code: number; data?: IRCCallPlusGetCallRecordRes; }>; /** * 批量删除通话日志 */ deleteCallLog(callIds: string[], traceId: string): Promise<{ code: number; }>; /** * 获取 call server 当前时间戳 */ getCallServerTimestamp(traceId: string): Promise<{ code: number; data?: number; }>; /** * 获取 call 时间信息 */ getCallTimeInfo(callId: string, traceId: string): Promise<{ code: number; data?: IGetCallTimeInfoRes; }>; /** * 获取未结束的通话列表 */ getOpenCallList(traceId: string): Promise<{ code: number; data?: IRCCallPlusCallRecord[]; }>; /** * 清除当前用户的 call log