import RTCController from './rtcController'; import { RTCConfig } from './rtcController/types'; import EventEmitter from 'eventemitter3'; export type NEGroupCallConfig = { nim: any; appkey: string; rtcConfig?: RTCConfig; debug?: boolean; }; export type NEGroupCallCallFnParams = { /** 呼叫id */ callId?: string; /** 呼叫人列表 */ calleeList: string[]; /** 话单发送的群组 */ groupId?: string; /** 1: 讨论组 2: 高级群 3: 聊天室 */ groupType?: number; /** 邀请模式 */ inviteMode?: number; /** 加入模式 0 任何人都可以加入群聊通话,1 只能被邀请 */ joinMode?: number; /** 附加信息 */ extraInfo?: string; /** 超时时间 */ timeout?: number; /** 自定义推送参数 */ pushParam?: { /** 推送模式,0.关闭,1.开启,2.强制开启 */ pushMode?: number; /** 推送文案,最长 500 个字符 */ pushContent?: string; /** 推送对应的 payload,必须是 JSON 格式且不能超过 2000 字符 */ payload?: string; /** 客户端本地的声音文件名,长度不要超过 30 个字符 */ sound?: string; }; }; export type NEGroupCallInviteFnParams = { /** 呼叫id列表 */ calleeList: string[]; }; export type NEGroupCallReceiveInfo = { isFromCallKitServer: true; callId: string; type: 0; callerAccid: string; calleeList: string[]; members: NEGroupCallMember[]; inviteMode: number; joinMode: number; startTimestamp: number; timeout: number; rtcChannelName: string; extraInfo: string; }; export type NEGroupCallMember = { imAccid: string; rtcUid: number; rtcToken: string; state: number; reason: string; }; export type NEGroupCallCallRes = { callId: string; callerUid: number; rtcChannelName: string; channelName?: string; startTimestamp: number; members: NEGroupCallMember[]; timeout: number; rtcToken: string; }; type NEGroupCallQueryInfo = { callId: string; callerAccid: string; callerUid: number; channelName: string; extraInfo: string; inviteMode: number; joinMode: number; safeMode: number; startTimestamp: number; timeout: number; }; type NEGroupCallAcceptRes = { callId: string; callerAccid: string; callerUid: number; inviteMode: number; joinMode: number; members: NEGroupCallMember[]; rtcChannelName: string; safeMode: number; startTimestamp: number; rtcToken: string; }; type NEGroupCallEndInfo = { reason: string; }; interface NEGroupCallEvents { onReceiveInvited: [NEGroupCallReceiveInfo]; onMembersChange: [NEGroupCallMember[]]; onCallEnd: [NEGroupCallEndInfo?]; } declare class NEGroupCallEngine extends EventEmitter { static instance?: NEGroupCallEngine; rtcController: RTCController; callStatus: number; /** 外部占线检查:用于检查单呼是否正在进行中 */ p2pBusyChecker?: () => boolean; private _nim; private _baseUrl; private _currentUserInfo; private _callId?; private _rtcViews; private _members; private _rtcChannelName?; private _rtcToken?; private _rejectTimer?; constructor(); setup(params: NEGroupCallConfig): void; /** * 用于接收im自定义消息 * @param msg im onmsg 事件参数 */ receiveNimMsg(msg: string): boolean; /** * 发起群组呼叫 * @param opt * @returns */ groupCall(opt: NEGroupCallCallFnParams): Promise; /** * 接收群组呼叫 */ groupAccept(): Promise; /** * 挂断群组通话 */ groupHangup(): Promise; /** * 邀请参加群组呼叫 */ groupInvite(opt: NEGroupCallInviteFnParams): Promise; /** * 加入群组通话 * @param params.callId 群组呼叫id * @param params.rtcUid 加入群组通话的用户uid */ groupJoin(params: { callId: string; rtcUid?: number; }): Promise; /** * 查询通话信息 * @param params.callId 通话id */ groupQueryCallInfo(params?: { callId: string; }): Promise; /** * 开关本地视频 * @param enabled true开启,false关闭 */ enableLocalVideo(enabled: boolean): Promise; /** * 开关本地音频 * @param enabled true开启,false关闭 */ enableLocalAudio(enabled: boolean): Promise; /** * 设置用户视图 * @param view 视频渲染容器 * @param accId im id */ setRtcView(view: HTMLElement, accId: string): void; /** * 本端加入rtc房间,需要 * @param opt video: 加入时是否开启视频 */ joinRtc(opt?: { video?: boolean; }): Promise; /** * 销毁实例 */ destroy(): void; private _resetState; private _busyReject; private _queryMembers; private _updateMembers; private _sortMembers; private _handleRtcEvents; private _nimHttpRequestProxy; static getInstance(): NEGroupCallEngine; } export default NEGroupCallEngine;