UNPKG

@hysc/external

Version:

Boom external js sdk

1,425 lines (1,409 loc) 44.3 kB
interface IResponse { code: number; message: string; data?: unknown; } /** * @internal */ declare interface IRoomCreate { /** * 房间号. */ room: string; /** * 房间模式 1 = 会议;2 = 直播. */ mode: number; /** * 房间类型 1 = 公开;0 = 非公开.默认值为1公开会议. */ room_type: number; /** * 房间名称. */ room_name: string; /** * 会议开始时间戳(单位秒),不能少于当前时间戳半小时以上. */ start_time: number; /** * 会议结束时间戳(单位秒. */ end_time: number; /** * 主持人. */ creator?: string; /** * 主持人名字 . * */ creator_nickname?: string; /** * 房间人数限制 0表示无限制. */ user_num: number; /** * 房间密码. */ secret?: string; /** * 是否允许嘉宾在主持人进会前加入会议 0 允许 1 不允许. */ is_must_host?: boolean; /** * 参会人员列表的用户id. */ guests?: string; /** * 管理员(联席主持人)列表的用户id, 传入之后可以在主持人之前开启直播. */ admins?: string; /** * 是否自动开启云录,默认值为 false. */ is_record?: string; /** * 设置云录参数. */ record?: object; /** * 是否使用小程序 默认false. */ is_mini_app?: boolean; template_name?: string; /** * 是否开启会议录制水印 0:不开启 1:开启. */ watermark?: number; /** * 是否自动开启录制, vb */ meeting_record?: number; /** * 测验地址 */ quiz_domain?: string; } /** * 0: 是挑屏 1:播控 2:会控 3:调度 4: TY视频会议进入会控 5: TY学习会进入会控 7:房间统计,8:视频剪辑, 9查看剪辑 11:课后评价 * @public */ type ControlRoutesOptions = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; interface IJoinMeetingElectron { /** * Electron环境. */ isElectron: boolean; /** *Electron环境回调. */ callback: Function; } /** * 会控按钮展示隐藏控制. * @public */ interface IMeetingControl { /** * 隐藏麦克风. */ hideMicrophone?: boolean; /** * 隐藏摄像头. */ hideCamera?: boolean; /** * 隐藏扬声器. */ hideLoudspeaker?: boolean; /** * 隐藏邀请. */ hideInvite?: boolean; /** * 隐藏分享. */ hideShare?: boolean; /** * 隐藏聊天. */ hideChat?: boolean; /** * 隐藏参会者列表. */ hideParticipant?: boolean; /** * 隐藏协作文档. */ hideDocument?: boolean; /** * 隐藏记录. */ hideRecord?: boolean; /** * 隐藏设置. */ hideSetting?: boolean; /** * 隐藏离会按钮. */ hideLeaveRoom?: boolean; /** * 隐藏锁定按钮. */ hideLockLiving?: boolean; /** * 隐藏视频预览. */ hideVideoPreview?: boolean; /** * 隐藏互动 */ hideInteraction?: boolean; /** * 隐藏系统按钮 */ hideDialogButton?: boolean; /** * 隐藏加密保护图标 */ hideShield?: boolean; /** * 隐藏点赞 */ hideGiveLike?: boolean; /** * 隐藏离开会议弹窗 当值为true:主动离开的时候,没有二次确认弹窗,直接退会、房间被动结束的时候,不弹出会议已结束弹窗; 值为false则走正常逻辑,默认值为false */ hideEndMeetingConfirm?: boolean; } interface IJoinMeetingParam { /** * 通过Boom服务下发. * * @privateRemarks * */ brtcAppId: string; /** * 房间插入的节点. * */ parentNode: HTMLElement; /** * 房间号. * */ roomId: string; /** * 昵称. * */ nickname?: string; /** * 房间主题. * */ title: string; /** * 用户ID. * */ user?: string; /** * 头像. * */ avatar?: string; /** * 身份(即将废弃) 1: 主持人, 2: 嘉宾, 3: 观众, 4: 游客观众 5: 管理员 6: 普通参会者 9: 巡视员. * @deprecated 使用 userType * */ identity: number; /** * 身份 1: 主持人, 20:管理员, 21:巡视员, 30:嘉宾, 40:参会者, 50:观众(直播), 51:游客(观众). * */ userType: number; /** * 通过Boom服务下发. * * @privateRemarks * */ server: string; /** * 房间密码, 设置了就有(数字,四位), 默认无. * */ secret: string; /** * 是否是会议外投屏, 默认是false. * */ screen: boolean; /** * 会控挑屏等配置项 0: 是挑屏 1:播控 2:会控 3:调度 4: TY视频会议进入会控 5: TY学习会进入会控. * */ isControl: ControlRoutesOptions; /** * 是否为分会场. * */ subVenue: boolean; /** * @deprecated */ audio: boolean; /** * @deprecated */ video: boolean; /** * 打开摄像头. * */ videoEnable: boolean; /** * 打开麦克风. * */ audioEnable: boolean; /** * 是否已经加入到房间了. * */ joined: boolean; /** * @privateRemarks * */ limit: number; /** *@privateRemarks * */ token: string; /** * @privateRemarks * */ visitor?: boolean; /** * 模式 meeting:会议, live:房间. * */ mode: 'meeting' | 'live' | 'audio'; /** * Electron PC客户端. * */ electron?: IJoinMeetingElectron; /** * 设置隐藏房间间内的按钮. * */ meetingControlOptions?: IMeetingControl; /** * 展示会议内全员可上传文档入口. * */ visitorDocument?: boolean; /** * @privateRemarks * */ authorization: string; /** *@privateRemarks * */ brtc_host: string; /** * 是否开启语音激励. */ voiceEncourage: 0 | 1; /** * 是否显示会议主题 */ showMeetingTopic: boolean; /** * 自定义用户信息 */ customInfo: any; qdtls: 0 | 1; qdtls_group_id: string; quantum_factor?: string; /** * 模板名称 三分屏, 后续会增加更多的模板. 不传值默认原来的模板. */ template_name: string | 'triple'; } interface IExtLoginParam { /** * 接入方的用户id. * */ extUserId: string; /** * 接入方的用户昵称. * */ nickname: string; /** * 接入方的用户用户头像. * */ avatar: string; /** * 接入方token过期时间 秒级别 . * */ expireTime: string; /** * 接入方后端返回, 通过Boom提供的接口. * */ nonce: string; /** * Signature 端上计算得到. * */ signature: string; } /** * 会控相关的操作. */ interface IMeetingControlOptions { /** * 是否取消自动拉流. */ cancelAutoPull: boolean; } /** * 分辨率参数设置 type VideoProfile = '120p' | '180p' | '240p' | '360p' | '480p' | '720p' | '1080p'. */ type VideoProfile = '120p' | '180p' | '240p' | '360p' | '480p' | '720p' | '1080p'; /** * @public * * SDK 初始化时的参数 * */ interface ISetupParam { /** * 应用ID. */ appId: string; /** * 应用私有化服务器地址. */ baseURL: string; /** * 应用部署域名. */ domain: string; /** * 应用部署域名. */ webDomain: string; /** * 是否开启加密. */ enableEncrypt?: boolean; /** * 加密公钥. */ publicKey?: string; /** * 启用邀请第三方人员功能. */ enableThirdInvite?: boolean; } interface ILoginParam { /** * 用户id(会议用户id). * */ userId: string; /** * 接入方的用户昵称. * */ nickname: string; /** * 接入方的用户头像. * */ avatar?: string; /** * 接入方token过期时间 秒级别 . * */ expireTime: string; /** * 接入方后端返回, 通过Boom提供的op/v2/auth/signature接口. * */ nonce: string; /** * 接入方后端返回, 通过Boom提供的op/v2/auth/signature接口. * */ signature: string; /** * 接入方的用户id(第三方的用户id). * */ extUserId?: string; /** * 接入方的账号字段(可用于水印). * */ account?: string; } interface IUserRoles { /** * 设置入会发起人身份的展示文字. * */ sponsor: string; /** * 接入方设置入会主持人身份的展示文字的用户头像. * */ host: string; /** * 设置入会管理员身份的展示文字. * */ admin: string; /** * 设置入会嘉宾身份的展示文字. * */ guest: string; /** * 设置入会观众身份的展示文字. * */ tourist: string; /** * 设置入会参会者列表展示区嘉宾区的展示文字. * */ guestNameSetting: string; } interface InvitationInfo { /** * 邀请人信息. */ inviter?: string; /** * 邀请信息. */ inviteInfo: string; /** * 房间名称. */ title: string; /** * 产品名称. */ productName?: string; /** * 会议时间. */ time: string; /** * 会议号. */ roomNumber: string; /** * 会议密码. */ password?: string; /** * 邀请唤起链接. */ awaken: string; /** * 是否仅邀请信息邀请. */ onlyInfoInvite: boolean; /** * 是否是非公开会议. */ onlyInvite: boolean; } interface StaticsPageOptions { /** 房间的唯一标识 */ roomId: string; /** 房间号 */ roomNo?: string; parentNode: HTMLElement; domain?: string; } interface ClipPageOptions { /** 房间的唯一标识 */ roomId: string; /** 房间号 */ roomNo?: string; /** 视频的唯一标识 */ videoId: string; parentNode: HTMLElement; /** 是否是查看剪辑 */ preview?: boolean; domain?: string; } interface EvaluationOptions { parentNode: HTMLElement; domain?: string; } interface ShareScreenOptions { /** 是否开启 */ enable: boolean; /** 共享类型 */ type: 'screen' | 'camera'; /** 设备ID,如果选择了camera,请传入设备id(navigator.mediaDevices.enumerateDevices()中的 deviceId), */ deviceId?: string; } interface MeetingOptions { parentNode: HTMLElement; token: string; } /** * @class * BoomMeetingExternal */ declare class BoomMeetingExternal { private static setupParam; private static style; private static isJoining; private static brtc_host; private static isExtUser; private static extUserId; private static brtm_host; private static loginParam; private static companyMeetingConfigInfo; private static meetingInfo; private static meetingControlOptions; /**. * 初始化SDK * * @param options - 初始化参数 * @param {String} options.appId 跟商务人员获取 * @param {String} options.baseURL 接口的 baseURL, 部署完成之后的 * @param {String} options.domain 部署完成的展示页面的域名或者ip * @example * ```js * BoomMeetingExternal.setup({appId, baseURL, domain}) * ``` * @returns {Boolean} true:成功 false:失败 * 参见{@link ISetupParam} */ static setup(options: ISetupParam): boolean; static getVersion(): string; private static isExternalUser; /**. * 登录 Boom服务. 内部用户使用 * * @param {Object} options * @param {string} options.nonce - 接入方后端返回, 通过Boom提供的op/v2/auth/signature接口. * @param {string} options.userId - 接入方的用户id,. * @param {string} options.nickname - 接入方的用户昵称,. * @param {string} options.avatar - 接入方的用户用户头像. * @param {string} options.signature - 接入方后端返回, 通过Boom提供的op/v2/auth/signature接口. * @param {string} options.expireTime - 接入方后端返回, 通过Boom提供的op/v2/auth/signature接口. * @example * ```ts * BoomMeetingExternal.login({ userId, nonce, expireTime, nickname, signature }).then(res => { if (res.code === 200) { showToast('登录成功') } else { showToast('登录失败') } }).catch(error => { console.log(error) }) *``` */ static login(options: ILoginParam): Promise<IResponse>; /** * 三方用户登录Boom服务-(带账号体系). * * @param {Object} options * @param {string} options.nonce - 接入方后端返回, 通过Boom提供的接口. * @param {string} options.extUserId - 接入方的用户id,. * @param {string} options.nickname - 接入方的用户昵称,. * @param {string} options.avatar - 接入方的用户用户头像. * @param {string} options.signature - Signature. * @param {string} options.expireTime - 接入方token过期时间,. * @example * ```ts * BoomMeetingExternal.loginExternalAccount({ extUserId, nonce, expireTime, nickname, signature }).then(res => { if (res.code === 200) { showToast('登录成功') } else { showToast('登录失败') } }).catch(error => { console.log(error) }) // signature 计算方式 使用这个库 CryptoJS function signatureEncode(msg, app_secret) { let hash = CryptoJS.HmacSHA256(msg, app_secret) let res = CryptoJS.enc.Hex.stringify(hash) return res } let strBefore = app_id + ":" + userId + ':' + nickname + ":" + avatar + ":" + expireTime + ":" + nonce let signature = signatureEncode((strBefore), app_secret) * ``` */ static loginExternalAccount(options: IExtLoginParam): Promise<unknown>; /**. * 退出Boom服务 * * @example BoomMeetingExternal.logout() */ static logout(): Promise<IResponse>; /**. * 创建房间 * * @param {Object} options * @param {Number} [options.mode=1] 房间模式 1 = 会议;2 = 直播 * @param options.room_type 房间类型 1 = 公开;0 = 非公开 * @param {String} options.room_name 房间名称 * @param {Number} options.start_time 会议开始时间戳(单位秒),不能少于当前时间戳半小时以上 * @param {Number} options.end_time 会议结束时间戳(单位秒) * @param {String} options.creator 创建者id * @param {String} options.creator_nickname 创建者昵称 * @param {Number} options.user_num 房间人数限制 0表示无限制 * @param {String} options.secret 房间密码 * @param {Boolean} [options.is_must_host= 0] 是否允许嘉宾在主持人进会前加入会议 0 允许 1 不允许 * @param {Boolean} [options.is_record=false] 是否自动开启云录,默认值为 false。 * @param {Object} [options.record] 设置云录参数 * @param {String} [options.record.notify_url] 云录回调地址 * @param {Object} [options.record.params] 云录透传参数 * @param {String} options.guests 嘉宾列表的用户id,逗号隔开 'user01,user02,user03,user04' * @param {String} options.admins 管理员列表的用户id, 传入之后可以在主持人之前开启直播, 逗号隔开 'admin01,admin02,admin03,admin04' * @param {Boolean} options.is_mini_app 是否使用小程序 默认false * @returns Promise<> * @example * ```js * BoomMeetingExternal.create({ room, mode, room_type, room_name, start_time, end_time, creator, creator_nickname, user_num, secret, is_must_host, guests, admins }) *``` * @remarks * * 创建房间说明:登录后才可创建 *错误码 - 201:结束时间和开始时间要大于当前时间且结束时间要大于结束时间 - 202:自动生成房间号失败 - 203:会议/直播已存在 - 204:会议或直播正在进行中 - 205:房间创建失败 */ static create(options: IRoomCreate): Promise<IResponse>; /**. * 加入房间 * * @param {Object} options * @param {HTMLDivElement} options.parentNode 房间插入的节点 * @param {String} options.roomId 房间号 * @param {String} options.secret 房间密码, 设置了就有(数字,四位), 默认无 * @param {String} options.user 用户ID * @param {String} options.nickname 昵称 * @param {String} options.avatar 头像 * @param {String} options.screen 是否是会议外投屏, 默认是false * @param {Boolean} options.audioEnable 打开麦克风 * @param {Boolean} options.videoEnable 打开摄像头 * @param {Number} options.identity 身份(即将废弃) 1: 主持人, 2: 嘉宾, 3: 观众, 4: 游客观众 5: 管理员 6: 普通参会者 9: 巡视员 * @param {Number} options.userType 身份 1: 主持人, 20:管理员, 21:巡视员, 30:嘉宾, 40:参会者, 50:观众(直播), 51:游客(观众) * @param {String} options.mode 模式 meeting:会议, live:房间 * @param {IJoinMeetingElectron} options.electron electron PC客户端 * @param {String} options.electron.isElectron electron electron环境 * @param {Function} options.electron.callback electron electron环境回调 * @param {IMeetingControl} options.meetingControlOptions 设置隐藏房间间内的按钮 * @param {Boolean} options.visitorDocument 展示会议内全员可上传文档入口 * @param {Number} options.isControl 会控挑屏等配置项 0: 是挑屏 1:播控 2:会控 3:调度 4: TY视频会议进入会控 5: TY学习会进入会控 * @param {Boolean} options.subVenue 是否为分会场 * @param {Boolean} options.voiceEncourage 是否开启语音激励 0:不开启,1:开启 * @param {Boolean} options.showMeetingTopic 是否展示会议主题 * @param {Boolean} options.singleTalk 是否为单聊会议 * @returns {Promise} promise<> * @example * ```ts * 入会说明:登录后才可入会,首先主持人加入房间,接着嘉宾&观众入会;若主持人未加入房间,会提示“直播暂未开始, 等待主持人加入,注意:不同角色入会需要打开新的浏览器窗口” * BoomMeetingExternal.join({roomId: '424830', nickname:'nickname'}) * * 错误码说明: * 201-查询不到房间信息 * * 202-房间信息校验失败 * * 203-会议/直播暂未开始 * * 204-房间信息获取失败 * * 205-房间容量已经达到上限 * * 210-未输入密码 * * 212-密码错误 * ``` */ static join(options: IJoinMeetingParam): Promise<IResponse>; private static private_join; /**. * 设置入会身份展示名称 * * @param {Object} options 设置入会的用户角色 * @param {String} options.sponsor 设置入会发起人身份的展示文字 * @param {String} options.host 设置入会主持人身份的展示文字 * @param {String} options.admin 设置入会管理员身份的展示文字 * @param {String} options.guest 设置入会嘉宾身份的展示文字 * @param {String} options.tourist 设置入会观众身份的展示文字 * @param {String} options.guestNameSetting 设置入会参会者列表展示区嘉宾区的展示文字 * @returns promise<> * @example * const userRoles = { sponsor:"发起人", host:"主持人", admin:"管理员", guest:"嘉宾", tourist:"观众", guestNameSetting:"嘉宾" } * BoomMeetingExternal.setRole(userRoles) */ static setRole(role: IUserRoles): Promise<IResponse>; /**. * 设置宫格最大显示窗口数 * * @param {Number} windowNumber 窗口数 (输入的值应大于等于4小于等于25) */ static setWindowNumber(windowNumber: number): Promise<IResponse>; /**. * 巡检管理员加入房间 * * @param {Object} options * @param {HTMLDivElement} options.parentNode 房间插入的节点 * @param {String} options.roomId 房间号 * @param {String} options.secret 房间密码, 设置了就有(数字,四位), 默认无 * @param {String} options.user 用户ID * @param {String} options.nickname 昵称 * @param {String} options.avatar 头像 * @param {String} options.mode 模式 meeting:会议, live:房间 * @param {Number} options.isControl 会控挑屏等配置项 0: 是挑屏 1:播控 2:会控 3:调度 4: TY视频会议进入会控 5: TY学习会进入会控 * @param {Boolean} options.subVenue 是否是分会场 * @param {IMeetingControl} options.meetingControlOptions 设置隐藏房间间内的按钮 * @example * ```ts * 巡检管理员入会说明:登录后才可入会,首先主持人加入房间,然后巡检入会;若主持人未加入房间,会提示“直播暂未开始, 等待主持人加入,注意:不同角色入会需要打开新的浏览器窗口” * BoomMeetingExternal.robotJoin({roomId: 424830, user:''user', nickname:'nickname', mode: 'live'}).catch(err => { if (err.code === 9) { console.log('参数不正确') } else if (err.code === 10) { console.log('房间不存在') } else if (err.code === 19) { console.log('房间容量已达上限, 不可加入') } else if (err.code === 34) { console.log('直播暂未开始, 等待主持人加入') } else if (err.code === 108) { console.log('请输入密码') } else if (err.code === 14) { console.log('密码错误, 请重新输入') } }); * ``` * @returns Promise */ static robotJoin(options: IJoinMeetingParam): Promise<IResponse>; /**. * 设置邀请信息 * * @param {Object} option 邀请信息 * @param {String} option.inviter 邀请人信息 * @param {String} option.inviteInfo 可复制的邀请信息 * @param {String} option.title 房间名称 * @param {String} option.productName 产品名称 * @param {String} option.time 会议时间 * @param {String} option.roomNumber 会议号 * @param {String} option.password 会议密码 * @param {String} option.awaken 邀请唤起链接 * @param {String} option.language * @param {String} option.isSeminars 是否直播 * @param {String} option.isLZ * @param {Boolean} option.onlyInvite 是否是非公开会议 * @param {Boolean} option.onlyInfoInvite 是否仅邀请信息邀请 * @example BoomMeetingExternal.setInvitationInfo(info) @returns {Promise} */ static setInvitationInfo(option: InvitationInfo): Promise<unknown>; /**. * 设置房间配置属性,可扩展 * * @param {Object} info 设置的信息 * @param {Object} info.invitationInfo 名称 * @param {String} info.invitationInfo.title * @param {String} info.invitationInfo.time * @param {String} info.invitationInfo.productName * @param {String} info.invitationInfo.roomNumber * @param {String} info.invitationInfo.password * @param {String} info.invitationInfo.awaken * @param {String} info.invitationInfo.introduceUrl * @param {String} info.invitationInfo.language * @param {String} info.invitationInfo.isSeminars * @param {String} info.invitationInfo.isLZ * @param {String} info.invitationInfo.onlyInvite * @param {Object} info.agreementAndLogoInfo logo地址 * @param {String} info.agreementAndLogoInfo.name logo地址 * @param {String} info.agreementAndLogoInfo.logo logo地址 * @param {String} info.agreementAndLogoInfo.userAgreement logo地址 * @param {String} info.agreementAndLogoInfo.privacyPolicy 隐私政策地址 * @param {Object} info.commonConfigInfo 通用config. * @param {Object} info.streamConfig 流的通用config. * @param {boolean} info.streamConfig.disableSmallStream true/false 关闭大小流 * @param {String} info.streamConfig.videoHint 'detail' | 'motion' 1.保证采集的流清晰度优先设置到流的track上面, * @param {String} info.streamConfig.sourceType 'screen' | 'camera' 2.告诉服务端这个流不需要动态降分辨率,通过特殊标识 * * @example * ```ts * let agreementAndLogoInfo = { name: 'Boom',//名称 logo: 'https://cb-web-sdk.boom.cn/static/media/setting_logo.d20d7992.png',//logo地址 userAgreement: 'https://cb-web.boom.cn/p/serviceAgreement.html',//用户协议地址 privacyPolicy: 'https://cb-web.boom.cn/train/conceal?isConceal=true',//隐私政策地址 appVersion: '0.0.1' // 当前版本 } BoomMeetingExternal.setRoomConfig({agreementAndLogoInfo:agreementAndLogoInfo}) | Parameter | Type | Description | | --------------------------------------- | ------ | ------------------------------------------------------------ | | info.invitationInfo | Object | 邀请信息 | | info.invitationInfo.title | | | | invitationInfo.time | | | | info.invitationInfo.productName | | | | info.invitationInfo.roomNumber | | | | info.invitationInfo.password | | | | info.invitationInfo.awaken | | | | info.invitationInfo.introduceUrl | | | | info.invitationInfo.language | | | | info.invitationInfo.isSeminars | | | | info.invitationInfo.onlyInvite | | | | info.agreementAndLogoInfo | | | | info.agreementAndLogoInfo.name | | | | info.agreementAndLogoInfo.logo | | | | info.agreementAndLogoInfo.userAgreement | | | | info.agreementAndLogoInfo.privacyPolicy | | | | info.commonConfigInfo | Object | | | info.streamConfig | Object | 推流信息配置 | | info.streamConfig.disableSmallStream | boolen | true/false 关闭大小流,默认值false | | info.streamConfig.videoHint | string | 'detail' / 'motion' 1.保证采集的流清晰度优先设置到流的track上面 默认值 motion | | info.streamConfig.sourceType | string | 'screen' / 'camera' 告诉服务端这个流不需要动态降分辨率,通过特殊标识 默认值 camera | *``` * @returns {Promise} Promise */ static setRoomConfig(info: any): Promise<unknown>; /**. * 离开房间 * * @returns Promise * @example BoomMeetingExternal.leave() */ static leave(): Promise<IResponse>; /**. * 结束房间 * * @returns Promise * @example BoomMeetingExternal.release() */ static release(): Promise<IResponse>; /**. * 获取参会人员列表 * * @returns Promise<> * @example * ```ts * BoomMeetingExternal.getParticipants() * ``` */ static getParticipants(): Promise<IResponse>; /**. * 主题颜色配置 * * @returns Promise<> */ static setTheme(theme: any): Promise<IResponse>; /**. * 开始云录 * 会议开始并推流后即可开始录制 * @param {String} roomNumber 会议号 * @example BoomMeetingExternal.startCloudRecord(roomNumber) @returns {Promise} */ static startCloudRecord(roomNumber: string): Promise<IResponse>; /**. * 结束云录 * @param {String} roomNumber 会议号 * @example BoomMeetingExternal.endCloudRecord(roomNumber) @returns {Promise} */ static endCloudRecord(roomNumber: string): Promise<IResponse>; /**. * 国际化配置 * * @returns Promise<> */ static setLanguage(language: any): Promise<IResponse>; /**. * 获取主持人 * * @returns Promise<> * @example * ```ts * BoomMeetingExternal.getMaster() * ``` */ static getMaster(): Promise<IResponse>; /**. * 会控按钮可配置 * * @param {IMeetingControl} options.meetingControlOptions 设置隐藏房间间内的按钮 * @param {Object} options * @param {Boolean} options.hideCamera * @param {Boolean} options.hideLoudspeaker * @param {Boolean} options.hideInvite * @param {Boolean} options.hideShare * @param {Boolean} options.hideChat * @param {Boolean} options.hideParticipant * @param {Boolean} options.hideDocument * @param {Boolean} options.hideRecord * @param {Boolean} options.hideSetting * @param {Boolean} options.hideLeaveRoom * @returns {Promise} Promise<> * @example * ```ts * BoomMeetingExternal.meetingCtrlConfig({ * hideMicrophone: false, hideCamera: false, hideLoudspeaker: false, hideInvite: true, hideShare: true, hideChat: true, hideParticipant: false, hideDocument: true, hideRecord: true, hideSetting: false, hideLeaveRoom: false }) * ``` */ static meetingCtrlConfig(options: IMeetingControl): any; /**. * 会控功能配置. join之前调用 * * @param {IMeetingControlOptions} options - // Options. * @param {Boolean} [options.cancelAutoPull] 是否取消自动拉流 * @returns {void} * @example BoomMeetingExternal.setupMeetingControlOptions({cancelAutoPull: true}) */ static setupMeetingControlOptions(options: IMeetingControlOptions): void; /**. * 截取用户图像 * * @param {String[]} ids 用户id数组 * @returns Promise<> {userId1: Base64Image1, userId2: Base64Image2 } * @example BoomMeetingExternal.snapshot(['userId1', 'userId2']).then((res)=> { console.log('res:', res) }) */ static snapshot(ids: string[]): Promise<IResponse>; /**. * 一键截图 * * @returns Promise<> */ /**. * 修改主持人 * * @param {String} id 新主持人id * @returns Promise<> */ /**. * 收回主持人 * * @returns Promise<> */ /**. * 设置联席主持人 * * @param {String} id 用户id * @returns Promise<> */ /**. * 撤销联席主持人 * * @param {String} id 用户id * @returns Promise<> */ /**. * 获取全部嘉宾 * * @returns Promise<> */ /**. * 获取全部观众 * * @returns Promise<> */ /**. * 获取联席主持人 * * @returns Promise<> */ /**. * 嘉宾音频举手/本地手放下 * * @returns Promise<> */ /**. * 嘉宾手放下 * * @param {String} id 用户id * @returns Promise<> */ /**. * 观众音频举手/本地手放下 * * @returns Promise<> */ /**. * 观众音频手放下 * * @param {String} id 用户id * @returns Promise<> */ /**. * 群体手放下 * * @returns Promise<> */ /**. * 嘉宾视频举手(废弃) * * @param {String} id 用户id * @returns Promise<> */ /**. * 同步全屏状态 * @internal * @param {Boolean} isFull: true-最大化状态 false-非最大化状态 * @param isFull * @example */ static syncFullStatus(isFull: boolean): Promise<IResponse>; /**. * 同步全屏按钮状态 * @internal * @param {Boolean} isMax: true-全屏状态 false-非全屏状态 * @param isMax * @example */ static syncMaxStatus(isMax: boolean): Promise<IResponse>; /**. * 观众群体手放下(废弃) * * @returns Promise<> */ /**. * 同意观众音频举手 * * @param {String} id 用户id * @returns Promise<> */ /**. * 同意嘉宾音频举手 * * @param {String} id 用户id * @returns Promise<> */ /**. * 同意嘉宾视频举手 * * @param {String} id 用户id * @returns Promise<> */ /**. * 开启屏幕录制 * * @returns Promise<> */ /**. * 结束屏幕录制 * * @returns Promise<> */ /**. * 更名 * * @param {String} id 用户id * @param {String} nickname 用户新昵称 * @returns Promise<> * @example BoomMeetingExternal.rename(id, name) */ static rename(id: string, nickname: string): Promise<IResponse>; /**. * 从房间踢出用户 * * @param {String} id 用户id * @returns Promise<> * @example * ```ts * BoomMeetingExternal.evictUser(id) * ``` */ static evictUser(id: string): Promise<unknown>; /**. * 开关本地摄像头 * * @returns Promise<> * @example BoomMeetingExternal.setLocalVideoEnable() */ static setLocalVideoEnable(videoEnable: boolean): Promise<IResponse>; /**. * 开关本地麦克风 * * @returns Promise<> * @example BoomMeetingExternal.setLocalAudioEnable(audioEnable: boolean) */ static setLocalAudioEnable(audioEnable: boolean): Promise<IResponse>; /**. * 开关远端摄像头 * * @param {String} id 用户id * @returns Promise<> * @example BoomMeetingExternal.muteRemoteVideoStream(id) */ private static muteRemoteVideoStream; /**. * 开关远端麦克风 * * @param {String} id 用户id * @returns Promise<> * @example BoomMeetingExternal.muteRemoteAudioStream(id) */ private static muteRemoteAudioStream; /**. * 开关扬声器 * * @returns Promise<> * @example BoomMeetingExternal.setLocalSpeaker() */ private static setLocalSpeaker; /**. * 全员静音 * * @param {Boolean} openBySelf 是否允许用户自行打开麦克风 * @returns Promise<> * @example BoomMeetingExternal.setAllMuted(openBySelf) */ static setAllMuted(openBySelf: boolean): Promise<unknown>; /**. * 结束全员静音 * * @returns Promise<> * @example BoomMeetingExternal.setAllUnMuted() */ static setAllUnMuted(): Promise<unknown>; /** * @internal */ protected static eventMap: Map<string, (data: any) => void>; /**. * 添加事件监听 * * @param {String} key 事件名称 * 'participant-joined': 用户加入, 'participant-left': 用户离开, 'room-connected': 房间连接, 'get-participants'获取会议内用户列表 'room-error': 房间错误, 'room-end': 房间结束, 结束类型: data.detail.releaseType 房间释放类型:release 释放房间 leave 离开房间 是否为自己结束会议:data.detail.isSelf 是自己结束: true 非自己结束false data.detail.meetingCommonConfig 偏好设置: openCamera 入会是否开启摄像头、openMicrophone 入会是否开启麦克风 userStatsNotice:是否开启进离会通知 'full-screen': 全屏, 'need-secret': 需要密码, 'change-master': 主持人变更 'shareEvent': 分享会议, 房间号: data.detail.roomId 'inviteEvent': 添加参会人, 房间号: data.detail.roomId 'callUserEvent': 呼叫未入会人员,返回的呼叫人员数组: data.detail, 'fullScreen': 最大化, 'exitFullScreen': 退出最大化, 'minApp': 最小化, 'doubleClick':标头双击事件, 'maxWindow': '全屏', 'exitMax':'退出全屏', 'changeClientSize':'改变会议窗口大小' 'signalChanged' : 信号源改变 data.detail.signal, customInfo: { signals:[{ name: '摄像头1', value: 's1'}, { name: '摄像头 2 ', value: 's2' }] } * @param {Function} callback 回调函数 * @example BoomMeetingExternal.on('room-end', callback) */ static on(key: string, callback: (data: any) => void): void; static off(key: string): void; private static __create; private static createIframe; private static checkIframe; private static idConvert; private static _snapshot; private static _snapshotAll; private static _startRecord; private static _stopRecord; private static _notifyRecord; private static _notifyStopRecord; /**. * 获取boom内部分享链接 * * @param {string} roomId * @returns {Promise} * @example */ private static getBoomShare; /**. * 获取会中人员列表 * * @returns * @example */ private static _getParticipants; private static _getMaster; private static _evictUser; private static _setTheme; private static _statCloud; private static _endCloud; private static _setLanguage; /**. *设置摄像头的视频分辨率,要在入会之前设置! * @param {VideoProfile} vProfile * @example *```ts * BoomMeetingExternal.setup({ appId: config.appId, baseURL: config.baseURL, domain: config.domain }) BoomMeetingExternal.setVideoProfile('720p') *``` */ static setVideoProfile(vProfile: VideoProfile): void; /**. * 参会者列表有几个tab * join 之前设置 * * @param {number} column * @example * BoomMeetingExternal.setUserListColumns(1) */ static setUserListColumns(column: number): void; /**. * 设置推流参数 * join 之前设置 * * @param {number} config * @example * BoomMeetingExternal.setUserListColumns(1) */ static setStreamConfig(config: number): void; /**. * 设置当前采用的排序规则 * * @param {number} type 1 是标品排序方式 2 是自定义排序 * @example * */ static setSortType(type: number): void; /**. * 是否显示会议主题 * join 之前设置 * * @param {boolean} meetingTopic * @example * BoomMeetingExternal.setMeetingTopic(false) */ static setMeetingTopic(meetingTopic: boolean): void; /**. * 是否为单聊模式 * join 之前设置 是单聊模式传true 非单聊传false * * @param {boolean} setSingle * @example * BoomMeetingExternal.setMeetingTopic(false) */ static setSingleTalk(setSingle: boolean): void; /**. * 直播结束后房间统计页面 * * @param {object} options * @param {string} options.roomId 房间表ID * @param {HTMLElement} options.parentNode 统计页面挂载节点 * @example * BoomMeetingExternal.staticsPage({roomId, parentNode}) */ static staticsPage(options: StaticsPageOptions): boolean; /**. * 直播结束后 视频剪辑页面 和 查看剪辑列表页面 * * @param {object} options * @param {string} options.roomId 房间表ID * @param {string} options.videoUrl 视频地址 * @param {HTMLElement} options.parentNode 视频剪辑页面挂载节点 * @returns {boolean} * @example * BoomMeetingExternal.clipPage({roomId, videoUrl, parentNode}) */ static clipPage(options: ClipPageOptions): boolean; /** * 课后评价管理页面 * @param options * @returns */ static evaluationView(options: EvaluationOptions): boolean; /**. * 开启示证 * @param options * @returns Promise * @example * BoomMeetingExternal.toggleShareScreen({enable: true, type:'camera', deviceId:''}) */ static toggleShareScreen(options: ShareScreenOptions): Promise<unknown>; /** * * @param path * @param suffix * @param parentNode */ private static createBusinessIframe; /** * 创建房间 * @param options * @returns Promise * @example * BoomMeetingExternal.createMeeting({ * parentNode: document.getElementById('container'), * }) */ static createMeeting(options: MeetingOptions): Promise<unknown>; /** * 加入房间 * @param options * @returns Promise * @example * BoomMeetingExternal.joinMeeting({ * parentNode: document.getElementById('container'), * }) */ static joinMeeting(options: MeetingOptions): Promise<unknown>; /** * 预约会议 * @param options * @returns Promise * @example * BoomMeetingExternal.appointmentMeeting({ * parentNode: document.getElementById('container'), * }) */ static appointmentMeeting(options: MeetingOptions): Promise<unknown>; /** * 共享屏幕 * @param options * @returns Promise * @example * BoomMeetingExternal.shareScreen({ * parentNode: document.getElementById('container'), * }) */ static shareScreen(options: MeetingOptions): Promise<unknown>; /** * 直播 * @param options * @returns Promise * @example * BoomMeetingExternal.liveMeeting({ * parentNode: document.getElementById('container'), * }) */ static liveMeeting(options: MeetingOptions): Promise<unknown>; /** * 云录制 * @param options * @returns Promise * @example * BoomMeetingExternal.cloudRecord({ * parentNode: document.getElementById('container'), * }) */ static cloudRecord(options: MeetingOptions): Promise<unknown>; static toggleQdtls(status: Boolean): Promise<unknown>; } declare global { interface Window { BoomMeetingExternal: any; BMQTBridge: any; electron: any; } } export { ClipPageOptions, ControlRoutesOptions, EvaluationOptions, IExtLoginParam, IJoinMeetingElectron, IJoinMeetingParam, ILoginParam, IMeetingControl, IMeetingControlOptions, IResponse, IRoomCreate, ISetupParam, IUserRoles, InvitationInfo, StaticsPageOptions, VideoProfile, BoomMeetingExternal as default };