/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ // 运行在新的voip window import VideoType from './videoType' export default class CallSession { conversation; initiatorId; audioMuted = false videoMuted = false screenSharing = false audioOnly = false startTime startMsgUid callId // conference 相关 pin defaultAudience = false; audience = false; conference = false; advance = false; record = false; host; title; desc; /** * 通话附加信息,会议的所有参与者都能看到 */ callExtra; /** * 本地附加信息,主要用于主窗口向音视频通话窗口传递额外信息 */ extra; /** * 默认成员的视频流类型 */ defaultVideoType = VideoType.BIG_STREAM; /** * 播放来电响铃 */ playIncomingRing() { // TODO //在界面初始化时播放来电铃声 } /** * 停止响铃 */ stopIncomingRing() { // TODO //再接听/语音接听/结束媒体时停止播放来电铃声,可能有多次,需要避免出问题 } /** * 多人音视频通话中,邀请新成员 * @param {[string]} newParticipantIds * @param {boolean} autoAnswer 是否自动接听,默认 false */ inviteNewParticipants(newParticipantIds, targetClientId, autoAnswer) { } /** * 接听来电 * @deprecated 参考{@link answer} */ call() { this.answer(false, null); } /** * 接听电话 * @param {boolean} audioOnly * @param {string} callExtra 通话附加信息 */ answer(audioOnly, callExtra) { } /** * 挂断 */ hangup() { } // 回落到语音 downgrade2Voice() { } /** * 打开或关闭摄像头 * @param enable * @deprecated 请使用{@link muteVideo} */ setVideoEnabled(enable) { } /** * 打开或关闭摄像头 * @param {boolean} mute true,关闭摄像头;false,打开摄像头 */ muteVideo(mute) { } /** * 静音或取消静音 * @param {boolean} enable * @deprecated 请使用{@link muteAudio} */ setAudioEnabled(enable) { } /** * 静音或取消静音 * @param {boolean} mute true,静音;false,取消静音 */ muteAudio(mute) { } /** * 仅当桌面是有效,web无效。 * 获取可用用于共享的源,可以是screen或者某个具体的window * @param {[string]} types 媒体源类型,可选screen、window * @return {Promise} */ getDesktopSources(types) { } /** * @param {{sourceId: source.id, * minWidth: 1280, * maxWidth: 1280, * idealWidth: 1280, * minHeight: 720, * maxHeight: 720, * idealHeight: 720, * frameRate: 15, }} desktopShareOptions,sourceId 仅 pc 端有效,web 端无效;其他参数对应 getDisplayMedia(options) options.video,具体可以参考:https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia * 开始屏幕共享 */ async startScreenShare(desktopShareOptions) { } isScreenSharing() { } stopScreenShare() { } /** * @deprecated * 请在callState变为connecting 或 connected之后,调用 * @param {string} userId * @return {Subscriber} */ getPeerConnectionClient(userId) { return this.getSubscriber(userId); } /** * @deprecated 请使用{@link getParticipantProfiles} * 请在callState变为connecting 或 connected之后,调用 * @param {string} userId * @param {boolean} screenSharing * @return {Subscriber} */ getSubscriber(userId, screenSharing) { } /** * 获取参与者的通话信息列表 */ getParticipantProfiles() { } /** * 获取自己的通话信息 */ getSelfProfile() { } /** * 仅会议时有效 * 请求参与者切换听众或互动者角色 * @param {string} userId * @param {boolean} audience 切换为听众 */ requestChangeMode(userId, audience) { } /** * 仅会议时有效 * 切换听众或互动者角色 * @param {boolean} audience 是否为听众 */ switchAudience(audience) { } /** * 仅会议时有效 * 会议踢人 * @param {string} userId * @param {function ()} successCB * @param {function (errcode)} failCB */ kickoffParticipant(userId, successCB, failCB) { } /** * 仅会议时有效 * 离开会议 * @param {boolean} destroyRoom 是否销毁会议室 */ leaveConference(destroyRoom) { } /** * 关闭音视频通话窗口 */ closeVoipWindow() { } /** * 仅会议时有效 * 设置音频输入设备 * @param {string} audioDeviceId 音频设备 id */ setAudioInputDeviceId(audioDeviceId) { } /** * 仅会议时有效 * 设置音频输入设备 * @param {string} videoDeviceId 视频设备 id */ setVideoInputDeviceId(videoDeviceId) { } /** * 切换摄像头,手机端有效 * @return true,支持切换摄像头,正在切换;false,不支持切换摄像头 */ switchCamera() { } /** * 仅会议版有效 * 设置视频最大码率 * @param maxBitrateKbps */ setVideoMaxBitrate(maxBitrateKbps) { } /** * 仅会议版有效 * 只支持缩小或者恢复原大小,不支持放大 * 相对于原始视频大小按比例缩小分辨率,具体可以参考{@link https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpEncodingParameters/scaleResolutionDownBy} * @param {number} scalingFactor */ scaleVideoResolutionDownBy(scalingFactor) { } /** * 旋转自己发布的视频角度 * 请在callState变为connected之后,调用 * @param {number} ang 旋转角度,可选值为 0,90,180,270 */ rotate(ang) { } /** * 仅会议版有效 * 设置参与者的 videoType * @param {string} userId 用户 id * @param {boolean} isScreenSharing 是否是屏幕共享 * @param {VideoType} videoType 视频流类型 */ setParticipantVideoType(userId, isScreenSharing, videoType) { } /** * 强制关闭媒体流 * 正常不需要调用,仅当将通话界面直接渲染在当前界面时,需要调用 */ forceEndMedia() { } }