/// import { default as default_2 } from 'https://esm.d8d.fun/eventemitter3@5.0.1/index.d.ts'; import { default as default_3 } from 'https://esm.d8d.fun/@aliyun-sls/web-track-browser@0.3.9/dist/web-track-browser.d.ts'; import { IAudioConstraints } from 'https://esm.d8d.fun/media-device@1.3.0/dist/index.d.ts'; import { IProfile } from 'https://esm.d8d.fun/aliyun-rts-sdk@2.12.3/dist/index.d.ts'; import { IStreamConfig } from 'https://esm.d8d.fun/aliyun-rts-sdk@2.12.3/dist/index.d.ts'; import { IVideoConstraints } from 'https://esm.d8d.fun/media-device@1.3.0/dist/index.d.ts'; import { LocalStream } from 'https://esm.d8d.fun/aliyun-rts-sdk@2.12.3/dist/index.d.ts'; import { RemoteStream } from 'https://esm.d8d.fun/aliyun-rts-sdk@2.12.3/dist/index.d.ts'; declare interface AliEngineCameraCapturerConfiguration { width?: number; height?: number; frameRate?: number; maxSendFrameRate?: number; bitrate?: number; cameraDirection?: AliRtcCameraDirection; deviceId?: string; } declare enum AliRtcAudioTrack { /** 无麦克风 */ AliRtcAudioTrackNo = 0, /** 麦克风 */ AliRtcAudioTrackMic = 1, /** 第二音频流 */ AliRtcAudioTrackDual = 2 } export declare interface AliRtcAuthInfo { /** 频道ID */ channelId: string; /** 用户ID */ userId: string; /** 应用ID */ appId: string; /** 随机串 */ nonce?: string; /** 时间戳 */ timestamp: number; /** 令牌 */ token: string; /** 会议id */ sessionId?: string; /** 角色鉴权值 */ role?: AliRtcSdkTokenRole; } declare interface AliRtcBeautyConfig { whiteningLevel: number; /*! 磨皮等级[0-1.0] */ smoothnessLevel: number; } declare enum AliRtcCameraDirection { /** 无效 */ CAMERA_INVALID = -1, /** 后置 */ CAMERA_REAR = 0, /** 前置 */ CAMERA_FRONT = 1 } export declare interface AliRtcCheckResult { support: boolean; detail: { isWebRTCSupported: boolean; isH264EncodeSupported: boolean; isH264DecodeSupported: boolean; isBrowserSupported: boolean; isScreenShareSupported: boolean; isSendMediaExtensionMsgSupported: boolean; }; } export declare enum AliRtcConnectionStatus { /** 初始化完成 */ AliRtcConnectionStatusInit = 0, /** 网络连接断开 */ AliRtcConnectionStatusDisconnected = 1, /** 建立网络连接中 */ AliRtcConnectionStatusConnecting = 2, /** 网络已连接 */ AliRtcConnectionStatusConnected = 3, /** 重新建立网络连接中 */ AliRtcConnectionStatusReconnecting = 4, /** 网络连接失败 */ AliRtcConnectionStatusFailed = 5 } export declare enum AliRtcConnectionStatusChangeReason { /** 未知原因 */ AliRtcConnectionChangedDummyReason = 0, /** 媒体通道变更 */ AliRtcConnectionMediaPathChanged = 1, /** 心跳超时 */ AliRtcConnectionSignalingHeartbeatTimeout = 2, /** 心跳恢复 */ AliRtcConnectionSignalingHeartbeatAlive = 3, /** DNS解析成功 */ AliRtcConnectionSignalingHttpDnsResolved = 4, /** DNS解析失败 */ AliRtcConnectionSignalingHttpDnsFailure = 5, /** GSLB请求失败 */ AliRtcConnectionSignalingGslbFailure = 6, /** GSLB请求成功 */ AliRtcConnectionSignalingGslbSuccess = 7, /** 加入频道失败 */ AliRtcConnectionSignalingJoinRoomFailure = 8, /** 加入频道成功 */ AliRtcConnectionSignalingJoinRoomSuccess = 9, /** 离开频道 */ AliRtcConnectionSignalingLeaveRoom = 10, /** 信令建立连接 */ AliRtcConnectionSignalingConnecting = 11, /** 网络连接中断 */ AliRtcConnectionChangedNetworkInterrupted = 12 } export declare class AliRtcDataChannelMsg { data: ArrayBuffer; networkTime: number; futureOrProgress: number; type: AliRtcDataMsgType; constructor(data: ArrayBuffer, type?: AliRtcDataMsgType, networkTime?: number, progress?: number); toBuffer(): ArrayBuffer; static parse(buffer: ArrayBuffer): AliRtcDataChannelMsg | undefined; } export declare enum AliRtcDataMsgType { AliEngineDataMsgNone = 0, AliEngineDataMsgMusicProgress = 1, AliEngineDataMsgCustom = 2 } declare type AliRtcDualVideoPluginOptions = VideoScalerOptions; declare class AliRtcEngine_2 extends default_2 { /** * @ignore */ static logName: string; /** * @ignore */ static logError: boolean; /** * 检查浏览器是否支持 WebRTC * @param {string} direction * @returns {Promise} */ static isSupported: (direction?: "sendonly" | "recvonly" | "sendrecv" | undefined) => Promise; /** * 检查浏览器是否支持开启大小流 * @returns {boolean} */ static isDualVideoStreamSupported: typeof VideoScalerFactory.isSupport; /** * 获取摄像头列表 * @returns {Promise} */ static getCameraList: () => Promise; static getMicrophoneList: () => Promise; static getSpeakerList: () => Promise; static getSdkVersion(): string; /** * 设置日志等级 * @param level */ static setLogLevel(level: AliRtcLogLevel): void; private static _instance?; /** * @brief 获取AliRtcEngine实例 * @param key key 可选参与,用于创建多个实例 * @details 该方法为同步调用,以单例的形式提供对象创建。 */ static getInstance(config?: AliRtcEngineConfig): AliRtcEngine_2; static AliRtcSdkChannelProfile: typeof AliRtcSdkChannelProfile; static AliRtcSdkClientRole: typeof AliRtcSdkClientRole; static AliRtcVideoStreamType: typeof AliRtcVideoStreamType; static AliRtcVideoTrack: typeof AliRtcVideoTrack; static AliRtcAudioTrack: typeof AliRtcAudioTrack; static AliRtcPublishState: typeof AliRtcPublishState; static AliRtcSubscribeState: typeof AliRtcSubscribeState; static AliRtcRawDataStreamType: typeof AliRtcRawDataStreamType; static AliRtcLogLevel: typeof AliRtcLogLevel; static AliRtcEngineLocalDeviceType: typeof AliRtcEngineLocalDeviceType; static AliRtcEngineLocalDeviceExceptionType: typeof AliRtcEngineLocalDeviceExceptionType; static AliRtcConnectionStatus: typeof AliRtcConnectionStatus; static AliRtcConnectionStatusChangeReason: typeof AliRtcConnectionStatusChangeReason; static AliRtcPlugin: typeof AliRtcPlugin; static AliRtcPluginTrackType: typeof AliRtcPluginTrackType; static AliRtcLiveTranscodingParam: typeof AliRtcLiveTranscodingParam; static AliRtcLiveTranscodingEncodeParam: typeof AliRtcLiveTranscodingEncodeParam; static AliRtcLiveTranscodingMixParam: typeof AliRtcLiveTranscodingMixParam; static AliRtcLiveTranscodingSingleParam: typeof AliRtcLiveTranscodingSingleParam; static AliRtcTranscodingClockWidget: typeof AliRtcTranscodingClockWidget; static AliRtcTranscodingImage: typeof AliRtcTranscodingImage; static AliRtcTranscodingText: typeof AliRtcTranscodingText; static AliRtcTranscodingUser: typeof AliRtcTranscodingUser; static AliRtcLiveTranscodingMixMode: typeof AliRtcLiveTranscodingMixMode; static AliRtcLiveTranscodingStreamType: typeof AliRtcLiveTranscodingStreamType; static AliRtcLiveTranscodingSourceType: typeof AliRtcLiveTranscodingSourceType; static AliRtcLiveTranscodingTaskProfile: typeof AliRtcLiveTranscodingTaskProfile; static AliRtcLiveTranscodingAudioSampleRate: typeof AliRtcLiveTranscodingAudioSampleRate; static AliRtcLiveTranscodingSegmentType: typeof AliRtcLiveTranscodingSegmentType; static AliRtcLiveTranscodingFontType: typeof AliRtcLiveTranscodingFontType; static AliRtcLiveTranscodingCropMode: typeof AliRtcLiveTranscodingCropMode; static AliRtcLiveTranscodingMediaProcessMode: typeof AliRtcLiveTranscodingMediaProcessMode; static AliRtcLiveTranscodingState: typeof AliRtcLiveTranscodingState; static AliRtcLiveTranscodingErrorCode: typeof AliRtcLiveTranscodingErrorCode; static AliRtcTrascodingPublishTaskStatus: typeof AliRtcTrascodingPublishTaskStatus; static AliRtcDataChannelMsg: typeof AliRtcDataChannelMsg; static AliRtcDataMsgType: typeof AliRtcDataMsgType; /** * @brief 销毁 {@link AliRtcEngine}实例 * @details 调用该方法将会释放所有内部使用的资源,当完成音视频通信之后都建议调用该方法释放实例.调用该方法后,你将不能再使用 {@link AliRtcEngine} 的其他方法和任何回调,如需要再次使用需要重新调用 {@link AliRtcEngine.getInstance} 方法创建一个新的实例。 * @note 该方法为同步调用,需要等待内部资源释放之后才能执行其他方法 */ destroy(): Promise; protected channelProfile: AliRtcSdkChannelProfile; protected clientRole: AliRtcSdkClientRole; protected signalingManager: SignalingManager; protected bizControl: BizControl; protected liveTranscoding: AliRtcLiveTranscoding; protected maxSignalingConnectRetryCount?: number; protected slsReporter: SLSReporter; protected connectState: AliRtcConnectionStatus; protected networkError: boolean; private _audioOnlyMode; private _authInfoWillExpireTimer; private _authInfoExpiredTimer; private _serverCheckAuthInfoTimestamp; private _localCheckAuthInfoTimestamp; constructor(config?: AliRtcEngineConfig); /** * 获取当前频道号,已经入会成功返回频道号,否则返回undefined */ get channel(): string | undefined; /** * 获取当前用户的 userId,已经入会成功返回自己的 userId,否则返回 undefined */ get userId(): string | undefined; get remoteUsers(): RemoteUser[]; get publisher(): LocalUser | undefined; get publishAudioStream(): LocalStream | undefined; get isPublishing(): boolean; private get currentRoleCanPublish(); /** * 监听 Publisher 事件 */ private addPublisherListeners; private occurError; /** * 监听 UM 事件 */ private addBizControlListeners; /** * 添加信令处理 * @returns {void} */ private addSignalingManagerListeners; private backToUnpublishStatus; /** * 处理入会远程的用户 * @param {JoinInfo[]} users * @returns {void} */ private handleUsersJoin; /** * 本地用户设备状态变化,通过信令发送给其他人 * @param {string} status * @returns {void} */ protected onLocalDeviceStatusChange(status: string): void; /** * 网络恢复后,重推; */ private resumePublishForNetworkRecovery; /** * 处理房间信令重连成功/心跳恢复 * @returns {void} */ protected onNetworkRecovery(users?: JoinInfo[]): Promise; private resumeSubList; /** * 重新订阅远端用户 * @param {string} userId * @returns {Promise} */ retrySubscribe(userId: string): Promise; /** * 处理网络异常 * @param {AliRtcError} err * @returns {void} */ protected onNetworkError(): void; /** * 处理错误 * @param {AliRtcError} err * @returns {void} */ protected onError(err: AliRtcError): void; /** * 是否开启大小流 * @param {boolean} enabled * @param {AliRtcDualVideoPluginOptions} [options] */ setEnableDualVideoStream(enabled: boolean, options?: AliRtcDualVideoPluginOptions): void; /** * 对本地流的操作预检查 */ private hadPushStream; /** * 获取当前使用的麦克风 deviceId * @returns {string | undefined} */ getCurrentMicDeviceId(): string | undefined; /** * 设置频道模式 * @param {AliRtcSdkChannelProfile} channelProfile 频道类型,默认值为 AliEngineCommunication * @note 该接口只可以在加入频道之前调用,会议中不可以重新设置,离开频道后可以重新设置 */ setChannelProfile(channelProfile: AliRtcSdkChannelProfile): void; // private startAndPublishDefaultDevices; /** * 自动启动并发布默认设备 * @param options 配置选项 * @param options.audioOnly 是否仅音频模式,为true时不会启动摄像头 * @returns Promise * @description * 1. 自动检测并启动默认摄像头(非仅音频模式时) * 2. 自动启动默认麦克风 * 3. 预览所有设备 * 4. 自动发布所有流 * 注意:如果设备已启动,会跳过相应步骤 */ startAndPublishDefaultDevices: (options?: { audioOnly?: boolean }) => Promise; /** * 设置用户角色 * @param {AliRtcSdkClientRole} clientRole 用户角色类型,默认值为 {@link AliRtcSdkClientRole.AliRtcSdkLive}(观众角色) * @note 非通信模式下角色类型才有效 */ setClientRole(clientRole: AliRtcSdkClientRole): Promise; /** * 获取用户角色 * @returns {AliRtcSdkClientRole} */ getCurrentClientRole(): AliRtcSdkClientRole; /** * 是否开启纯音频模式 * @param {boolean} audioOnly * - true:只有音频推流和拉流 * - false(默认值):音视频都支持 * @note 只可以在 {@link joinChannel} 之前设置 */ setAudioOnlyMode(audioOnly: boolean): void; setAudioRedEnabled(audioRedEnabled: boolean): void; /** * 设定鉴权信息过期事件定时器 * @param expireTimestamp 鉴权信息过期时间 * @param serverTimestamp 入会时服务端时间 */ private setCheckAuthInfoTimer; /** * 清除鉴权信息过期事件定时器 */ private clearCheckAuthInfoTimer; /** * @brief 加入频道 * @details 该方法让用户加入频道,一个频道内可以加入多个用户进行互相通话。 * @details 一般在调用该方法前会根据场景先选择频道模式,通过调用 {@link setChannelProfile} 实现,默认频道模式为通信模式 {@link AliRtcSdkChannelProfile.AliRtcSdkCommunication} * ``` javascript * // 设置频道为互动模式 * engine.setChannelProfile(AliRtcSdkChannelProfile.AliRtcInteractivelive); * // 设置角色为主播角色 * engine.setClientRole(AliRtcSdkClientRole.AliRtcSdkInteractive); * ``` * @param {AliRtcAuthInfo | string} authInfoOrToken (多参数/单参数) 认证信息,从App Server获取。 * @param {string} userName 任意用于显示的用户名称。不是User ID * @note * - 异步接口,方法执行成功则为成功入会 * - 正常情况一个Appid对应一个App,只有同一个AppId的应用可进行互相童话,不同AppId和channelID不同都不能互通 * - 当入会成功后,会触发远端用户收到 {@link AliRtcEngineEventListener.remoteUserOnLineNotify} 回调 * - 如果已在会中想重新入会,需要先调用 {@link leaveChannel} 离会,且确保方法执行成功 * - 用户加入频道后,默认订阅频道内所有其他用户的音视频流,默认推送音视频流到远端,因此将会产生计费,如果想要取消默认订阅可以 {@link joinChannel} 前调用 {@link setDefaultSubscribeAllRemoteAudioStreams} 和 {@link setDefaultSubscribeAllRemoteVideoStreams} */ joinChannel(authInfoOrToken: AliRtcAuthInfo | string, userName?: string): Promise; /** * 离开频道 * @note 如果当前不在频道内,调用 leaveChannel 不会对实例产生任何影响,但会产生消息,通知频道内其他用户 */ leaveChannel(): Promise; /** * 检查当前是否在频道中 * @returns {boolean} * - true:在频道中 * - false:不在频道中 */ isInCall(): boolean; /** * 刷新鉴权信息 * @param {AliRtcRefreshAuthInfo | string} authInfoOrToken */ refreshAuthInfo(authInfoOrToken: AliRtcRefreshAuthInfo | string): Promise; /** * 检查当前是否纯音频模式 * @returns {boolean} * - true:纯音频模式 * - false:音视频模式 */ isAudioOnly(): boolean; /** * @brief 是否推送音频流 * @param enabled 是否开启/关闭本地音频流推送 * - true: 开启音频流推送 * - false: 关闭音频流推送 * @note SDK默认设置推送音频流,在加入频道前也可以调用此接口修改默认值,并在加入频道成功时生效 * @note 加入频道后调用不会停止本地音频采集 */ publishLocalAudioStream(enabled: boolean): Promise; /** * @brief 查询是否设置推送音频流 * @return * - true: 已设置推送 * - false: 未设置推送 * @note SDK默认设置推送音频流,如果需要取消推送音频流,可以通过 {@link publishLocalAudioStream}方法设置为不推送 */ isLocalAudioStreamPublished(): boolean; /** * 设置是否默认接收音频流 * @param sub * - true: 接收用户的音频流 * - false: 停止接收用户的音频流 * @note 入会前入会后均可调用。如果在加入频道后调用 setDefaultSubscribeAllRemoteAudioStreams(false),会接收不到设置后加入频道的用户的音频流。 * @note 停止接收音频流后,如果想要恢复接收,请调用 {@link subscribeRemoteAudioStream},并指定你想要接收的远端用户ID; * @note 如果想恢复接收多个用户的音频流,则需要多次调用 {@link subscribeRemoteAudioStream}。setDefaultSubscribeAllRemoteAudioStreams(true) 只能恢复接收后面加入频道的用户的音频流。 */ setDefaultSubscribeAllRemoteAudioStreams(sub: boolean): void; /** * 停止/恢复接收所有远端音频流 * @param sub * - true: 接收所有用户的音频流 * - false: 停止接收所有用户的音频流 * @note 该接口作为订阅远端音频流的总开关,如果设置为false,则不仅当前会议中所有远端音频流都会停止订阅,后续入会的新用户也将不再订阅(即使设置了setDefaultSubscribeAllRemoteAudioStreams(true)) */ subscribeAllRemoteAudioStreams(sub: boolean): void; /** * 手动拉音频流 * @param uid uid * @param sub,默认为 true * - true: 接收指定用户的音频流 * - false: 停止接收指定用户的音频流 * @note 如果之前有调用过 subscribeAllRemoteAudioStreams(false) 对所有远端音频进行静音,在调用本 API 之前请确保你已调用 subscribeAllRemoteAudioStreams(true)。 * @note {@link subscribeAllRemoteAudioStreams} 是全局控制,{@link subscribeRemoteAudioStream} 是精细控制。 */ subscribeRemoteAudioStream(uid: string, sub: boolean): void; /** * 手动恢复远端用户音频流 * @param uid * 用于在自动播放失败等场景恢复播放 */ resumeRemoteAudioStream(uid: string): void; stopRemoteAudioPlay(uid: string): void; /** * @brief 是否推送本地视频流 * @param enabled 是否开启/关闭本地视频流推送 * - true: 开启视频流推送 * - false: 关闭视频流推送 * @note SDK默认设置推送视频流,在加入频道前也可以调用此接口修改默认值,并在加入频道成功时生效 * @note 加入频道后调用不会停止本地视频采集 */ publishLocalVideoStream(enabled: boolean): Promise; /** * @brief 查询是否设置推送视频流 * @return * - true: 已设置推送 * - false: 未设置推送 * @note SDK默认设置推送视频流,如果需要取消推送视频流,可以通过 {@link publishLocalVideoStream} 方法设置为不推送 */ isLocalVideoStreamPublished(): boolean; /** * 设置默认订阅的相机流格式,大流或小流,会覆盖单人的大小流设置 * @param {AliRtcVideoStreamType} streamType 流类型 * @note 仅支持传入 1 (默认大流)、2(默认小流),传入其他无效 * @note 当无默认类型的相机流,但有另一个,将拉取另一个 */ setRemoteDefaultVideoStreamType(streamType: AliRtcVideoStreamType): void; /** * 设置某一用户默认订阅的相机流格式,大流或小流 * @param userId 远端用户ID * @param {AliRtcVideoStreamType} streamType 流类型 * @note 仅支持传入 1 (默认大流)、2(默认小流),传入其他无效 * @note 当无默认类型的相机流,但有另一个,将拉取另一个 */ setRemoteUserVideoStreamType(userId: string, streamType: AliRtcVideoStreamType): void; /** * 设置是否默认接收视频流 * @param sub * - true: 接收用户的视频流 * - false: 不接收用户的视频流 * @note 入会前入会后均可调用。如果在加入频道后调用 setDefaultSubscribeAllRemoteVideoStreams(false),会接收不到设置后加入频道的用户的视频流。 * @note 停止接收视频流后,如果想要恢复接收,请调用 {@link subscribeRemoteVideoStream},并指定你想要接收的远端用户ID; * @note 如果想恢复接收多个用户的视频流,则需要多次调用 {@link subscribeRemoteVideoStream};setDefaultSubscribeAllRemoteVideoStreams(true) 只能恢复接收后面加入频道的用户的视频流。 */ setDefaultSubscribeAllRemoteVideoStreams(sub: boolean): void; /** * 停止/恢复接收所有远端视频流 * @param sub * - true: 接收所有用户的视频流 * - false: 停止接收所有用户的视频流 * @note 该接口作为订阅远端视频流的总开关,如果设置为false,则不仅当前会议中所有远端视频流都会停止订阅,后续入会的新用户也将不再订阅(即使设置了setDefaultSubscribeAllRemoteVideoStreams(true)) */ subscribeAllRemoteVideoStreams(sub: boolean): void; /** * 合并订阅远端音视频流 * @param uid uid * @param videoTrack 视频流类型 * @param subVideo 是否订阅视频 * @param subAudio 是否订阅音频 * @return */ subscribeRemoteMediaStream(uid: string, videoTrack: AliRtcVideoTrack, subVideo: boolean, subAudio: boolean): void; /** * @brief 手动恢复远端用户视频流 * @param uid * @param videoTrack * 用于在自动播放失败等场景恢复播放 */ resumeRemoteMediaStream(uid: string, videoTrack: AliRtcVideoTrack): void; /** * @brief 订阅目标频道,指定用户的流 * @param channelId 目标频道 * @param uid 用户ID,从App server分配的唯一标示符 * @param track 订阅的视频流类型 * @param sub_audio 是否订阅远端用户的音频流 * - true:订阅指定用户的音频流 * - false:停止订阅指定用户的音频流 * @param sub 是否订阅远端用户的流 * - true:订阅指定用户的流 * - false:停止订阅指定用户的流 */ /** * @brief 获取远端在线用户列表 * @return 当前频道内所有在线用户userid列表 * @note 若当前频道ChannelProfile设置为 {@link AliRtcSdkChannelProfile.AliRtcSdkInteractiveLive} 模式,只有设置角色为 {@link AliRtcSdkClientRole.AliRtcSdkInteractive} 的用户为在线用户,本方法不返回角色为 {@link AliRtcSdkClientRole.AliRtcSdkLive} 的用户 */ getOnlineRemoteUsers(): string[]; /** * @brief 查询远端用户状态 * @details 通过 uid 查询指定远端用户的状态信息. * @param uid 用户ID。从App server分配的唯一标示符 * @return 返回一个远端用户对象。详见{@link RemoteUser} */ getUserInfo(uid: string): AliRtcRemoteUserInfo | undefined; /** * @brief 查询用户是否在线 * @param uid 用户ID,从App server分配的唯一标示符。不可为NULL * @return * - true: 用户在线 * - false: 用户不在线 * @note 根据特定的UserID,查询该用户是否在线。 */ isUserOnline(uid: string): boolean; /** * @brief 开始屏幕共享 * @param config 开启屏幕共享的配置 * @note 可以通过 config 选择是否开启音频或使用外部自定义 MediaStream * @note 自定义 MediaStream 仅支持一个视频流和一个音频流 */ startScreenShare(config?: AliRtcScreenShareStartConfig): Promise; /** * @brief 停止屏幕共享 */ stopScreenShare(): Promise; /** * @brief 设置屏幕流视频编码属性 * @details 该方法用于设置屏幕流视频编码属性对应的视频参数,如分辨率、帧率、码率、等 所有设置的参数都有相应的范围限制,如果设置的参数不在有效范围内,SDK会自动调节 * @param config 预定义的屏幕共享编码属性, * @note * - 该方法在入会前和入会后都可以调用,如果每次入会只需要设置一次屏幕流视频编码属性,建议在入会前调用 */ setScreenShareConfiguration(config: AliRtcScreenShareConfiguration): Promise; /** * @breif 设置屏幕流采集内容提示 * @param contentHint 设置屏幕流内容提示,用于提升在不同内容场景下的视频编码质量 [参考文档](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/contentHint) */ setScreenShareContentHint(contentHint: string): Promise; /** * @brief 是否推送屏幕分享 * @param enabled 是否开启/关闭本地屏幕分享推送 * - true: 开启屏幕分享推送 * - false: 关闭屏幕分享推送 * @param config 开启屏幕共享的配置 * @note SDK默认设置推送屏幕分享,在加入频道前也可以调用此接口修改默认值,并在加入频道成功时生效 * @note 加入频道后调用不会停止本地屏幕采集 */ publishLocalScreenShareStream(enabled: boolean, config?: AliRtcScreenShareStartConfig): Promise; /** * @brief 查询是否设置推送屏幕分享 * @return - true: 已设置推送 - false: 未设置推送 * @note SDK默认设置不推送屏幕分享,如果需要推送屏幕共享,可以通过{@link startScreenShare}方法开启屏幕共享推送 */ isScreenSharePublished(): boolean; /** * @brief 设置共享音频的音量大小 * @param volume 共享音频音量大小,取值范围[0, 100] */ setAudioShareVolume(volume: number): void; /** * 开启音量检测功能 * @param {number} interval 检测间隔,单位: ms * @note 建议设置为300ms~500ms,取值 ≤0 表示不启用音量检测功能 */ enableAudioVolumeIndication(interval: number): void; /** * 停止/恢复本地音频数据发送 * @param {boolean} mute 停止或恢复本地音频数据发送 * - true:静音本地音频 * - false(默认值):取消静音 */ muteLocalMic(mute?: boolean): void; /** * 停止/恢复远端指定用户的音频流的播放 * @param {string} uid 用户ID, 从 App server 分配的唯一标示符 * @param {boolean} mute 停止或恢复远端的音频播放 * - true:停止播放 * - false(默认值):恢复播放 * @note 拉流和解码不受影响,支持 {@link joinChannel} 之前和之后设置 */ muteRemoteAudioPlaying(uid: string, mute?: boolean): void; /** * 停止/恢复远端的所有音频流的播放 * @param {boolean} mute 停止或恢复远端的音频播放 * - true:停止播放 * - false(默认值):恢复播放 * @note 拉流和解码不受影响,支持 {@link joinChannel} 之前和之后设置 */ muteAllRemoteAudioPlaying(mute?: boolean): void; /** * @brief 开启音频采集 * @details 此接口可以控制提前打开音频采集,如果不设置,则SDK会自动控制音频采集设备: * - 如果打开推送音频流{@link publishLocalAudioStream},SDK在入会后会打开音频采集 * - 如果关闭推送音频流{@link publishLocalAudioStream},SDK在入会后不会打开音频采集 * @param {IAudioConstraints} audioConstraints 音频采集参数 */ startAudioCapture(audioConstraints?: IAudioConstraints): Promise; /** * @brief 设置音频采集参数 * @param constraints 音频采集参数 */ setAudioConstraints(constraints: IAudioConstraints): Promise; /** * 关闭音频采集 * @note 调用此接口后,入会后、离会再入会,采集设备保持关闭状态 */ stopAudioCapture(): void; /** * 切换麦克风 * @param {string} deviceId 麦克风设备ID * @param {MediaStreamAudioTrack} audioTrack 音频轨道 * @note 传入 audioTrack 则会使用传入的音频轨道 */ switchMicrophone(deviceId: string, audioTrack?: MediaStreamAudioTrack): Promise; /** * 设置录音音量 * @param {VolumeSettings} volumeSettings 录音音量,取值范围[0,100] * - 0:静音 * - <100:减小音量 * - >100:放大音量 */ setRecordingVolume(volume: number): void; /** * @brief 设置播放音量 * @param volume 播放音量,取值范围[0,100], 0:静音;100:原始音量 * @note 注意此方法与 {@link setRemoteAudioVolume} 相互影响,以后调用的一个为准 */ setPlayoutVolume(volume: number): void; /** * @brief 设置播放音量 * @param userId 用户ID * @param volume 播放音量,取值范围[0,100], 0:静音;100:原始音量 * @note 注意此方法与 {@link setPlayoutVolume} 相互影响,以后调用的一个为准 */ setRemoteAudioVolume(userId: string, volume: number): void; /** * 设置麦克风 profile * * @param {AudioProfileKey} profileKey * @return {Promise} */ setAudioProfile(profileKey: AudioProfileKey): Promise; /** * @brief 获取当前用户或远端用户的音频轨道 * @param {string} userId 远端用户 userId * @return {MediaStreamTrack} 音频轨道 * */ getAudioTrack(userId?: string): Promise; /** * 为本地预览设置渲染元素和视频流 * @param {AliRtcLocalView} view 渲染元素,null 则为停止显示 * @param {AliRtcVideoTrack} track 视频流类型 */ setLocalViewConfig(view: AliRtcLocalView, track: AliRtcVideoTrack): Promise; /** * @brief 采集偏好设置 * @param cameraCapturerConfiguration 偏好设置 * - width: 设置采集分辨率宽度 默认 1280 * - height: 设置采集分辨率高度 默认 720 * - frameRate: 设置采集帧率 默认 30 * - bitrate: 设置采集码率 默认 2000 * - cameraDirection: 设置采集方向,前置或后置摄像头 * - deviceId: 设置采集相机ID */ setCameraCapturerConfiguration(cameraCapturerConfiguration: AliEngineCameraCapturerConfiguration): Promise; /** * @breif 设置摄像头采集内容提示 * @param contentHint 设置视频内容提示,用于提升在不同内容场景下的视频编码质量 [参考文档](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/contentHint) */ setCameraCapturerContentHint(contentHint: string): Promise; /** * 禁用或启用摄像头采集 * @param enabled * - true : 启用摄像头采集 * - false : 禁用摄像头采集 */ enableLocalVideo(enabled?: boolean): Promise; /** * 是否将停止摄像头流数据发送 * @param mute * - true:停止发送摄像头流数据 * - false:表示恢复正常 */ muteLocalCamera(mute: boolean): Promise; /** * 是否将停止屏幕共享流数据发送 * @param mute * - true:停止发送屏幕共享流数据 * - false:表示恢复正常 */ muteLocalScreen(mute: boolean): Promise; /** * 设置远端视频显示视图 * @param {AliRtcLocalView} view 渲染元素 * @param {AliRtcVideoTrack} track 视频流类型 * @param {string} uid 用户ID, 从App server分配的唯一标示符 * @note 支持joinChannel之前和之后切换窗口。如果 view 传入 null,则停止显示 */ setRemoteViewConfig(view: AliRtcLocalView, uid: string, track: AliRtcVideoTrack): void; /** * 检查camera是否打开 * @return {boolean} * - true: 摄像头已打开 * - false: 摄像头没有打开 * @note 该接口用于检查当前camera的状态 */ isCameraOn(): boolean; /** * 切换摄像头 * @param {string} deviceId 摄像头设备ID * @param {MediaStreamVideoTrack} videoTrack 视频流 * @note 若不传 deviceId 则前后摄像头切换,传入 videoTrack 则会使用传入的 videoTrack */ switchCamera(deviceId?: string, videoTrack?: MediaStreamVideoTrack): Promise; /** * 获取摄像头设备ID * @return {string} 摄像头设备ID */ getCurrentCameraDeviceId(): string | undefined; /** * @brief 开启摄像头预览 * @details 开启摄像头预览并自动打开摄像头 * @note 如果没有调用{@link setLocalViewConfig}设置显示的view,则无法预览,但不影响推流。 * 可以在{@link joinChannel}之前就开启预览会自动打开摄像头。 */ startPreview(): Promise; /** * @brief 开启屏幕共享预览 * @details 开启屏幕共享预览并自动打开屏幕共享 * @param config 开启屏幕共享的配置 * @note 如果没有调用{@link setLocalViewConfig}设置显示的view,则无法预览,但不影响推流。 * 可以在{@link joinChannel}之前就开启预览会自动打开屏幕共享。 */ startPreviewScreen(config?: AliRtcScreenShareStartConfig): Promise; /** * @brief 停止本地视频预览 */ stopPreview(): Promise; /** * @brief 停止本地屏幕共享预览 */ stopPreviewScreen(): Promise; /** * @brief 获取当前用户或远端用户的视频轨道 * @param {AliRtcVideoTrackConfig} config 视频轨道配置 * @return {MediaStreamTrack} 视频轨道 * */ getVideoTrack(config: AliRtcVideoTrackConfig): Promise; /** * @brief 开启旁路直播 * @details SDK提供了开启旁路直播的功能,可以把实时音视频流经过混流、混音处理转为标准直播流并推送至指定CDN供应商 * @param streamUrl 推流地址 * @param transcoding 推流所需参数, 详细定义见{@link AliRtcLiveTranscodingParam} */ startPublishLiveStream(streamUrl: string, transcoding: AliRtcLiveTranscodingParam): Promise; /** * @brief 更新旁路直播相关参数 * @details SDK提供了更新旁路直播的功能,用于实时更新旁路直播参数 * @param streamUrl 推流地址 * @param transcoding 推流所需参数, 详细定义见{@link AliRtcLiveTranscodingParam} */ updatePublishLiveStream(streamUrl: string, transcoding: AliRtcLiveTranscodingParam): Promise; /** * @brief 更新旁路直播相关参数 * @details SDK提供了更新旁路直播的功能,用于实时更新旁路直播参数 * @param taskId 任务Id * @param transcoding 推流所需参数, 详细定义见{@link AliRtcLiveTranscodingParam} * @return * - 0 : 成功 * - 非0 : 失败 * - ERR_INNER(-1) : SDK内部错误,可能的情况为SDK未初始化或者SDK销毁后调用 * - 其他 : 返回值参考官网错误码 */ updatePublishLiveStreamWithTaskId(taskId: string, transcoding: AliRtcLiveTranscodingParam): Promise; /** * @brief 停止旁路直播 * @details SDK提供了停止旁路直播的功能 * @param streamUrl 推流地址 */ stopPublishLiveStream(streamUrl: string): Promise; /** * @brief 停止旁路直播 * @details SDK提供了停止旁路直播的功能 * @param taskId 任务Id */ stopPublishLiveStreamWithTaskId(taskId: string): Promise; /** * 获取旁路直播状态 * @param streamUrl 推流地址 * @return 路直播状态 */ /** * @brief 设置是否启用媒体扩展信息 * @param enabled 是否启用媒体扩展,需要在加入房间之前调用 */ setEnableMediaExtensionMsg(enabled: boolean): void; /** * @brief 发送媒体扩展信息 * @details SDK提供了发送和接收媒体扩展信息的功能,接收端参考 {@link AliRtcEngineEventListener.mediaExtensionMsgReceived},使用场景: * - 使用媒体扩展信息传递时间戳,计算端到端的网络延迟,或者跟自身其他业务做数据同步 * - 使用媒体扩展信息传递描述信息。目前可以传递最多 4k Byte数据,可以用来传输少量数据,建议使用Json或者纯字符串; * - 内部使用SEI扩展协议来实现; * * @param message 媒体扩展信息,长度限制为最大4K字节 * @param repeatCount 重复次数,代表消息冗余度,用于防止网络丢包导致的消息丢失,-1为无限传输 * * @note 启用此能力会增加客户端性能开销,如有需求需要在加入房间之前调用 setEnableMediaExtensionMsg * @note 使用媒体扩展信息时需要复用音视频数据通道,因此必须控制自定义消息的发送频率和消息数据长度,使用限制如下: * - 每秒最多发送profile条消息,因为sei信息是放到h264/h265流中传输,有视频帧编码才能附加扩展信息; * - 为了不影响媒体数据的传输质量,自定义消息体长度限制为4k Byte,可以用来传输少量信息; * - sendMediaExtensionMsg函数中repeatCount参数为自定义消息冗余度,若大于1,则会发送多次, * - 防止网络丢包导致的消息丢失,此时房间里的其他人也会收到多次相同的消息,需要去重 * - 发送的自定义消息,在旁路直播时,房间里的订阅者也一样会收到 * - 同一时间只有一条MediaExtensionMsg在传输,多次调用sendMediaExtensionMsg,新调用的数据会覆盖前一次的数据; */ sendMediaExtensionMsg(message: ArrayBuffer, repeatCount: number): Promise; /** * @brief 发送媒体扩展信息 * @details SDK提供了发送和接收媒体扩展信息的功能,接收端参考 {@link AliRtcEngineEventListener.mediaExtensionMsgReceived},使用场景: * - 使用媒体扩展信息传递时间戳,计算端到端的网络延迟,或者跟自身其他业务做数据同步 * - 使用媒体扩展信息传递描述信息。目前可以传递最多 4k Byte数据,可以用来传输少量数据,建议使用Json或者纯字符串; * - 内部使用SEI扩展协议来实现; * * @param message 媒体扩展信息,长度限制为最大4K字节 * @param repeatCount 重复次数,代表消息冗余度,用于防止网络丢包导致的消息丢失,-1为无限传输 * @param payloadType [5, 100..254]范围 payloadType=5等于使用sendMediaExtensionMsg 接口 * * @note 启用此能力会增加客户端性能开销,如有需求需要在加入房间之前调用 setEnableMediaExtensionMsg * @note 使用媒体扩展信息时需要复用音视频数据通道,因此必须控制自定义消息的发送频率和消息数据长度,使用限制如下: * - 每秒最多发送profile条消息,因为sei信息是放到h264/h265流中传输,有视频帧编码才能附加扩展信息; * - 为了不影响媒体数据的传输质量,自定义消息体长度限制为4k Byte,可以用来传输少量信息; * - sendMediaExtensionMsg函数中repeatCount参数为自定义消息冗余度,若大于1,则会发送多次, * - 防止网络丢包导致的消息丢失,此时房间里的其他人也会收到多次相同的消息,需要去重 * - 发送的自定义消息,在旁路直播时,房间里的订阅者也一样会收到 * - 同一时间只有一条MediaExtensionMsg在传输,多次调用sendMediaExtensionMsg,新调用的数据会覆盖前一次的数据; */ sendMediaExtensionMsgEx(message: ArrayBuffer, repeatCount: number, payloadType: number): Promise; static Plugin: typeof AliRtcPlugin; /** * @brief 开启音视频处理算法插件 * @details RTC采用插件件形式提供音视频增强及特效能力,可通过[官网组件文档](https://help.aliyun.com/document_detail/261183.html) 进行组件下载,参考插件集成文档集成进RTC引擎; * @param plugin 插件库 * @param option 插件初始化参数值,请阅读插件库接入文档 * @note * - 入会前入会后均可调用; * - 如果重复调用会报错; */ enablePlugin(plugin: AliRtcPlugin, options?: any): void; /** * @brief 关闭音视频处理算法插件 * @param name 插件名称,通过 plugin.name 获取 * @note * - 入会前入会后均可调用; * - 重复调用返回错误; */ removePlugin(name: string): void; /** * @brief 根据插件ID设置插件 * @param name 插件名称,通过 plugin.name 获取 * @param option 插件初始化参数值,请阅读插件库接入文档 */ setPluginOption(name: string, option: any): void; /** * @brief 根据插件ID获取插件内部信息 * @param name 插件名称,通过 plugin.name 获取 */ getPluginOption(name: string): any; /** * 美颜功能是否有效 * @return * - true: 美颜功能有效 * - false: 无效 */ isBeautyAvailable(): boolean; /** * 美颜功能是否开启 * @return * - true: 美颜功能已开启 * - false: 已关闭 */ isBeautyEnabled(): boolean; /** * @brief 开启或关闭美颜功能, 并设置美颜效果参数 * @param enable * - true: 开启美颜功能 * - false: 关闭美颜功能 * @param config 美颜效果参数 */ setBeautyEffect(enable: boolean, config: AliRtcBeautyConfig): void; /** * @brief 开启/关闭虚拟背景替换功能 * @details 需要集成美颜插件; * @param enable 是否开启; * @param path 虚拟背景本地图片路径,支持JPG,PNG 格式; * * @note * - 与背景虚化为替换关系,如开启虚拟背景开关后再次开启背景虚化,则只有背景虚化效果; */ enableBackgroundExchange(enable: boolean, path: string): void; /** * @brief 开启/关闭虚拟背景虚化功能 * @details 需要集成美颜插件; * 需要集成美颜插件,背景替换与背景虚化不可同时使用,如开启虚拟背景开关后再次开启背景虚化,则只有背景虚化效果; * @param enable 是否开启; * * @note * - 与虚拟背景为替换关系,如开启背景虚化开关后再次开启虚拟背景,则只有虚拟背景效果; */ enableBackgroundBlur(enable: boolean): void; setParameter(parameter: string): void; getParameter(): string; /** * @brief 发送 DataChannel 消息 * @param dataChannelMsg 伴奏控制消息 */ sendDataChannelMessage(dataChannelMsg: AliRtcDataChannelMsg): void; } declare interface AliRtcEngineConfig { env?: AliRtcEnv; webTrack?: boolean | AliRtcWebTrackConfig; maxSignalingConnectRetryCount?: number; } declare interface AliRtcEngineEventListener { /** * @brief 网络连接状态改变 * @param status 连接状态 * @param reason 连接状态变化原因 */ connectionStatusChange: (status: AliRtcConnectionStatus, reason: AliRtcConnectionStatusChangeReason) => void; /** * @brief 本地设备异常回调 * @param deviceType 设备类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceType} * @param exceptionType 设备异常类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType} * @param msg 异常时携带的信息 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用 */ localDeviceException: (localDeviceType: AliRtcEngineLocalDeviceType, localDeviceExceptionType: AliRtcEngineLocalDeviceExceptionType, description: string) => void; /** * @brief 用户鉴权信息即将过期通知,收到后30秒鉴权过期 * @note 该回调在鉴权信息30秒前触发,收到该回调后应该及时更新鉴权信息,参考 {@link AliRtcEngine.refreshAuthInfo} */ /** * 被服务器踢出/会议结束频道的消息 * @param code 原因参考{@link AliRtcEngine.AliRtcOnByeType} */ bye: (code: AliRtcOnByeType) => void; /** * @brief 远端用户(通信模式)/(互动模式,主播角色)加入频道回调 * @details 该回调在以下场景会被触发 * - 通信模式:远端用户加入频道会触发该回调,如果当前用户在加入频道前已有其他用户在频道中,当前用户加入频道后也会收到已加入频道用户的回调 * - 互动模式: * - 远端主播角色用户加入频道会触发该回调,如果当前用户在加入频道前已有其他主播在频道中,当前用户加入频道后也会收到已加入频道主播的回调 * - 远端观众角色调用 {@link AliRtcEngine.setClientRole} 切换为主播角色 {@link AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive},同时设置了推流时,会触发该回调 * * @param uid 用户ID,从App server分配的唯一标示符 * @param elapsed 用户加入频道时的耗时 * @note 互动模式下回调行为 * - 主播间可以互相收到加入频道回调 * - 观众可以收到主播加入频道回调 * - 主播无法收到观众加入频道回调 */ remoteUserOnLineNotify: (uid: string, elapsed: number) => void; /** * @brief 远端用户(通信模式)/(互动模式,主播角色)离开频道回调 * @details 该回调在以下场景会被触发 * - 通信模式:远端用户离开频道会触发该回调 * - 互动模式: * - 远端主播角色 {@link AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive} 离开频道 * - 远端主播切换调用 {@link AliRtcEngine.setClientRole} 切换为观众角色 {@link AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive},会触发该回调 * - 通信模式和互动模式主播角色情况下,当长时间收不到远端用户数据,超时掉线时,会触发该回调 * * @param uid 用户ID,从App server分配的唯一标示符 * @param reason 用户离线的原因,详见 {@link AliRtcEngine.AliRtcUserOfflineReason} */ remoteUserOffLineNotify: (uid: string, aliRtcUserOfflineReason: AliRtcUserOfflineReason) => void; /** * @brief 远端用户的音视频流发生变化回调 * @details 该回调在以下场景会被触发 * - 当远端用户从未推流变更为推流(包括音频和视频) * - 当远端用户从已推流变更为未推流(包括音频和视频) * - 互动模式下,调用 {@link AliRtcEngine.setClientRole} 切换为主播角色 {@link AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive},同时设置了推流时,会触发该回调 * * @param uid 用户ID,从App server分配的唯一标示符 * @param audioTrack 音频流类型,详见 {@link AliRtcEngine.AliRtcAudioTrack} * @param videoTrack 视频流类型,详见 {@link AliRtcEngine.AliRtcVideoTrack} * @note 该回调仅在通信模式用户和互动模式下的主播角色才会触发 */ remoteTrackAvailableNotify: (uid: string, aliRtcAudioTrack: AliRtcAudioTrack, aliRtcVideoTrack: AliRtcVideoTrack) => void; /** * @brief 远端用户静音/取消静音回调 * @param uid 远端用户ID * @param isMute 该用户是否静音 * - true: 静音 * - false: 取消静音 */ userAudioMuted: (uid: string, isMute: boolean) => void; /** * @brief 对端用户发送视频黑帧数据发送通知 * @param uid 执行muteVideo的用户ID * @param isMute * - true: 推流黑帧 * - false: 正常推流 * @note 该接口用于对端用户发送视频黑帧数据时的回调 */ userVideoMuted: (uid: string, isMute: boolean) => void; /** * @brief 对端用户发送屏幕黑帧数据发送通知 * @param uid 执行muteVideo的用户ID * @param isMute * - true: 推流黑帧 * - false: 正常推流 * @note 该接口用于对端用户发送屏幕黑帧数据时的回调 */ userScreenMuted: (uid: string, isMute: boolean) => void; /** * 音量反馈 * @param {Array} speakers 用户音量对象数组 * @param {string} speaker.userId 用户ID * @param {number} speaker.volume 音量 * @note userId 为空字符串时代表是本地麦克风采集的音量 */ audioVolume: (speakers: { userId: string; volume: number; }[]) => void; /** * 发布视频流的数据统计 * @param aliRtcStats 统计信息 */ aliRtcStats: (aliRtcStats: any) => void; /** * 音频推流变更回调 * @param track 流标识 * @param oldState 之前的推流状态 * @param newState 当前的推流状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ audioPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number, channel: string) => void; /** * 音频订阅情况变更回调 * @param uid 用户ID * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ audioSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; /** * 视频推流变更回调 * @param oldState 之前的推流状态 * @param newState 当前的推流状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ videoPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number, channel: string) => void; /** * 次要流推流变更回调 * @param oldState 之前的推流状态 * @param newState 当前的推流状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ dualStreamPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number, channel: string) => void; /** * 屏幕分享推流变更回调 * @param oldState 之前的推流状态 * @param newState 当前的推流状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ screenSharePublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number, channel: string) => void; /** * DataChannel 推流变更回调 * @param oldState 之前的推流状态 * @param newState 当前的推流状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ dataPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number, channel: string) => void; /** * 相机流订阅情况变更回调 * @param uid 用户ID * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ videoSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; /** * 大小流订阅情况变更回调 * @param uid 用户ID * @param oldStreamType 之前的订阅状态 * @param newStreamType 当前的订阅状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ subscribeStreamTypeChanged: (uid: string, oldStreamType: AliRtcVideoStreamType, newStreamType: AliRtcVideoStreamType, elapseSinceLastState: number, channel: string) => void; /** * 屏幕分享流订阅情况变更回调 * @param uid 用户ID * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ screenShareSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; /** * DataChannel 订阅情况变更回调 * @param uid 用户ID * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 * @param elapseSinceLastState 状态变更时间间隔(毫秒) * @param channel 当前频道 */ dataSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; /** * 收到媒体扩展信息回调 * @param uid 用户ID,媒体信息发送用户的ID * @param message 媒体扩展信息 * @param payloadType payload类型,sendMediaExtensionMsg返回5,sendMediaExtensionMsgEx发送的会返回具体类型 * @note 当一端通过 {@link AliRtcEngine.sendMediaExtensionMsg} 发送信息后,其他端通过该回调接收数据 */ mediaExtensionMsgReceived: (uid: string, message: ArrayBuffer, payloadType: number) => void; /** * @brief 用户鉴权信息即将过期通知,收到后30秒鉴权过期 * @note 该回调在鉴权信息30秒前触发,收到该回调后应该及时更新鉴权信息,参考 {@link AliRtcEngine.refreshAuthInfo:} */ authInfoWillExpire: () => void; /** * @brief 用户调用需要鉴权的接口,服务端返回信息过期 * @note 该回调触发代表鉴权信息已过期,想要继续在会中,需要重新入会,参考 {@link AliRtcEngine.joinChannel:name:onResultWithUserId:} */ authInfoExpired: () => {}; /** * 远程用户的音频自动播放失败 * @param uid * @note 应该在收到该回调时弹出弹窗引导用户点击页面进行播放,用户点击页面后 SDK 会自动尝试播放 */ remoteAudioAutoPlayFail: (uid: string) => void; /** * 远程用户的视频自动播放失败 * @param uid * @note 应该在收到该回调时弹出弹窗引导用户点击页面进行播放,用户点击页面后 SDK 会自动尝试播放 */ remoteVideoAutoPlayFail: (uid: string, videoTrack: AliRtcVideoTrack) => void; /** * 远程用户的音频播放出错 * @param uid 用户ID * @param reason 出错原因,可选 */ remoteAudioPlayError: (uid: string, reason: string | undefined) => void; /** * 远程用户的视频播放出错 * @param uid 用户ID * @param reason 出错原因,可选 */ remoteVideoPlayError: (uid: string, reason: string | undefined) => void; /** * rtc 传输数据统计 * @param stats 统计信息 */ rtcStats: (stats: any) => void; /** * 发布视频流的数据统计 * @param aliRtcStats 统计信息 */ rtcLocalVideoStats: (stats: AliRtcLocalVideoStats[]) => void; /** * 发布音频流的数据统计 * @param aliRtcStats 统计信息 */ rtcLocalAudioStats: (stats: AliRtcLocalAudioStats[]) => void; /** * 订阅视频流的数据统计 * @param aliRtcStats 统计信息 */ rtcRemoteVideoStats: (stats: AliRtcRemoteVideoStats[]) => void; /** * 订阅远端音频流的数据统计 * @param aliRtcStats 统计信息 */ rtcRemoteAudioStats: (stats: AliRtcRemoteAudioStats[]) => void; /** * @brief 错误通知 * @deprecated 请使用 occurError * @details 如果engine出现error,通过这个回调通知app * @param error 错误类型,参考 {@link AliRtcError} * @param uid 用户 Id,不一定存在 */ onOccurError: (error: AliRtcError, uid?: string) => void; /** * @brief 错误通知 * @details 如果engine出现error,通过这个回调通知app * @param error 错误类型,参考 {@link AliRtcError} * @param uid 用户 Id,不一定存在 */ occurError: (error: AliRtcError, uid?: string) => void; /** * @brief 收到数据通道消息 * @param uid 用户ID * @param message 消息 */ dataChannelMsg: (uid: string, message: AliRtcDataChannelMsg) => void; } export declare enum AliRtcEngineLocalDeviceExceptionType { /** 未知异常类型 */ AliEngineLocalDeviceExceptionTypeUnknown = 0, /** 麦克风打开失败 */ AliEngineLocalDeviceExceptionTypeMicOpenFail = 1, /** 麦克风被打断 */ AliEngineLocalDeviceExceptionTypeMicInterrupt = 2, /** 麦克风无权限 */ AliEngineLocalDeviceExceptionTypeMicAuthFail = 3, /** 无可用麦克风 */ AliEngineLocalDeviceExceptionTypeMicNotAvailable = 4, /** 扬声器打开失败 */ AliEngineLocalDeviceExceptionTypeSpeakerOpenFail = 5, /** 扬声器被打断 */ AliEngineLocalDeviceExceptionTypeSpeakerInterrupt = 6, /** 无可用扬声器 */ AliEngineLocalDeviceExceptionTypeSpeakerNotAvailable = 7, /** 音频设备异常 */ AliEngineLocalDeviceExceptionTypeAudioDeviceException = 8, /** 摄像头打开失败 */ AliEngineLocalDeviceExceptionTypeCameraOpenFail = 9, /** 摄像头被打断 */ AliEngineLocalDeviceExceptionTypeCameraInterrupt = 10, /** 摄像头无权限 */ AliEngineLocalDeviceExceptionTypeCameraAuthFail = 11, /** 显示设备异常 */ AliEngineLocalDeviceExceptionTypeDisplayException = 12, /** 视频设备异常 */ AliEngineLocalDeviceExceptionTypeVideoDeviceException = 13 } export declare enum AliRtcEngineLocalDeviceType { /** 未知设备类型 */ AliEngineLocalDeviceTypeUnknown = 0, /** 麦克风设备 */ AliEngineLocalDeviceTypeMic = 1, /** 扬声器设备 */ AliEngineLocalDeviceTypeSpeaker = 2, /** 音频设备 */ AliEngineLocalDeviceTypeAudioDevice = 3, /** 摄像头设备 */ AliEngineLocalDeviceTypeCamera = 4, /** 显示设备 */ AliEngineLocalDeviceTypeDisplay = 5, /** 视频设备 */ AliEngineLocalDeviceTypeVideoDevice = 6 } declare enum AliRtcEnv { pre = "pre", prod = "prod" } declare class AliRtcError extends Error { _code: number; _extra?: any; static fromRtsError(error: any): AliRtcError; static fromError(error: any, code?: number, fallbackMessage?: string): AliRtcError; constructor(code: number, message: string, extra?: any); get code(): number; set code(code: number); get reason(): string; get extra(): any; } export declare enum AliRtcErrorCode { /**************************************************** * 入会错误码 ****************************************************/ /** 已经加入频道 */ ERR_JOIN_ALREADY_JOINED = 16843521, /** AppId不存在,请在控制台创建应用 */ ERR_JOIN_BAD_APPID = 33620481, /** AppId已失效,请在控制台重新启用应用 */ ERR_JOIN_INVALID_APPID = 33620482, /** * 频道不存在,请尝试重新加入频道 * 如会议发起者入会后又很快离会,第二个人随后入会,发现会议已经不存在了。 */ ERR_JOIN_BAD_CHANNEL = 33620484, /** 频道已经失效(目前频道有效期为48小时),请重新生成频道鉴权令牌(Token) */ ERR_JOIN_INVALID_CHANNEL = 33620483, /** Token无效。 请重新生成频道鉴权令牌(Token) */ ERR_JOIN_BAD_TOKEN = 33620485, /** 加入频道超时,请检查网络连接是否正常 */ ERR_JOIN_TIMEOUT = 16908804, /** 参数错误,{@link AliRtcAuthInfo}中的字段为空或者timestamp<=0,请检查字段是否完整 */ ERR_JOIN_ERR_JOIN_BAD_PARAMBAD = 16974081, /** 加入频道失败 */ ERR_JOIN_CHANNEL_FAILED = 16974338, /**************************************************** * 日志模块错误码 ****************************************************/ /** 日志模块已经初始化 */ ERR_LOG_ALREADY_INIT = 16974085, /** 日志模块根路径错误,请检查路径是否存在或路径是否具有写入权限 */ ERR_LOG_ROOT_PATH_ERROR = 16974086, /**************************************************** * 音频设备错误码 ****************************************************/ /** * 采集设备初始化失败、采集设备媒体服务异常、音频设备被占用。 * - Mac端和Windows端查看系统设置中音频设备是否有能量条 * - iOS端和Android端确认是否被其他应用占用 * - 如果都正常,请重启设备 */ ERR_MIC_OPEN_FAIL = 17040388, /** * 播放设备初始化失败、播放设备媒体服务异常、音频设备被占用。 * - Mac端和Windows端查看系统设置中音频设备是否有能量条 * - iOS端和Android端确认是否被其他应用占用 * - 如果都正常,请重启设备 */ ERR_SPEAKER_OPEN_FAIL = 17040389, /** 系统性能不足、采集设备媒体服务异常、音频设备被占用。建议重启应用或重启设备 */ ERR_MIC_INTERRUPT = 17040390, /** 系统性能不足,播放设备媒体服务异常,音频设备被占用。建议重启应用或重启设备 */ ERR_SPEAKER_INTERRUPT = 17040391, /** 麦克风设备未授权,建议去系统设置中,打开麦克风授权,并且重新加入频道 */ ERR_MIC_AUTH_FAIL = 17040392, /** 无可用的音频采集设备,检查是否接入了可用的麦克风,并检查系统设置中,该设备是否被禁用 */ ERR_MIC_NOT_AVAILABLE = 17040393, /** 无可用的音频播放设备,检查是否接入了可用的扬声器或耳机,并检查系统设置中,该设备是否被禁用 */ ERR_SPEAKER_NOT_AVAILABLE = 17040400, /**************************************************** * 视频设备错误码 ****************************************************/ /** 采集设备初始化失败,检查系统相机是否可用,移动端App是否占用了相机 */ ERR_CAMERA_OPEN_FAIL = 17039620, /** 采集设备未授权,建议去系统设置中,打开摄像头授权,并且重新加入频道 */ ERR_CAMERA_AUTH_FAIL = 17039621, /** 采集过程中出现异常,Mac、Winodows电脑相机采集灯熄灭,设备被强制中断。建议重新加入频道或者重启App */ ERR_CAMERA_INTERRUPT = 17039622, /** 无可用的视频采集设备,检查是否接入了可用的摄像头,并检查系统设置中,该设备是否被禁用 */ ERR_CAMERA_NOT_AVAILABLE = 17039623, /** 渲染设备初始化失败,检查Windows端显卡驱动是否需要升级,移动端手机型号或者Android平板盒子等外设是否支持OpenGL */ ERR_VIDEO_DISPLAY_OPEN_FAIL = 17039873, /** 渲染过程中出现异常,系统异常错误导致渲染引擎报错,重新加入频道或者重启App */ ERR_VIDEO_DISPLAY_INTERRUPT = 1064992, /**************************************************** * 网络错误码 ****************************************************/ /** 媒体通道建立失败,检查网络连接是否正常 */ ERR_ICE_CONNECTION_CONNECT_FAIL = 17105409, /** 媒体通道重连失败,检查网络连接是否正常 */ ERR_ICE_CONNECTION_RECONNECT_FAI = 17105410, /** 媒体通道mobility失败,应用层需要重走入会流程 */ ERR_ICE_CONNECTION_MOBILITY_FAIL = 17105411, /** 信令心跳超时,检查网络连接是否正常 */ ERR_ICE_CONNECTION_HEARTBEAT_TIMEOUT = 16908812, /** * 低延时互动直播模式相关错误码 */ /** 低延时互动直播信令失败 */ ERR_LATENCY_LIVE_COMMUNICATION_FAILED = 17235971, /** 低延时互动直播媒体设置错误 */ ERR_LATENCY_LIVE_MEIDASETTING_FAILED = 17235972, /** 低延时互动直播当前房间没有主播推流 */ ERR_LATENCY_LIVE_NONE_BROADCASTER = 17235973, /** 低延时互动直播错误,应用层需要重新创建新的SDK实例 */ ERR_LATENCY_LIVE_NEED_RESTART = 17235974, /** 低延时互动直播错误,应用层需要稍等一定时间(自定义间隔)重新创建新的SDK实例 */ ERR_LATENCY_LIVE_NEED_RESTART_AGAIN_LATER = 17235975, /** 低延迟互动直播服务不可用或者服务降级,客户端应该选择其它方式拉超大方会流,即不从cdn sfu拉流 */ ERR_LATENCY_LIVE_SERVICE_UNAVAILABLE = 17235976, /** 低延迟互动直播网络中断错误,销毁当前sdk实例重新创建sdk后重新走订阅流程 */ ERR_LATENCY_LIVE_MEDIACONNECTION_INTERRUPTION = 17235977, /**************************************************** * 推流相关错误码 ****************************************************/ /** 推流无效 */ ERR_SDK_PUBLISH_INVAILD = 16974597, /** 未进入频道推流失败 */ ERR_SDK_PUBLISH_NOT_JOIN_CHANNEL = 16843782, /** 推送音频流失败 */ ERR_SDK_PUBLISH_AUDIO_STREAM_FAILED = 16843856, /** 推送视频流失败 */ ERR_SDK_PUBLISH_VIDEO_STREAM_FAILED = 16843857, /** 推送小流失败 */ ERR_SDK_PUBLISH_DUAL_STREAM_FAILED = 16843858, /** 推送屏幕共享失败 */ ERR_SDK_PUBLISH_SCEEN_SHARE_FAILED = 16843859, /** 屏幕共享配置错误 */ ERR_SDK_PUBLISH_SCREEN_SHARE_CONFIG_ERROR = 16843860, /**************************************************** * 订阅相关错误码 ****************************************************/ /** 订阅无效 */ ERR_SDK_SUBSCRIBE_INVAILD = 16974852, /** 未进入频道订阅错误 */ ERR_SDK_SUBSCRIBE_NOT_JOIN_CHANNEL = 16844112, /** 订阅音频流失败 */ ERR_SDK_SUBSCRIBE_AUDIO_STREAM_FAILED = 16844113, /** 订阅视频流失败 */ ERR_SDK_SUBSCRIBE_VIDEO_STREAM_FAILED = 16844114, /** 订阅小流失败 */ ERR_SDK_SUBSCRIBE_DUAL_STREAM_FAILED = 16844115, /** 订阅屏幕共享失败 */ ERR_SDK_SUBSCRIBE_SCREEN_SHARE_FAILED = 16844116, /** 订阅 DataChannel 失败 */ ERR_SDK_SUBSCRIBE_DATA_FAILED = 16844117, /** 订阅 DataChannel 过程中报错 */ ERR_SDK_SUBSCRIBE_DATA_ERROR = 16844118, /**************************************************** * 其他错误码 ****************************************************/ /** SDK状态错误,建议销毁SDK重新创建实例。 */ ERR_SDK_INVALID_STATE = 16974340, /** 参数不匹配 */ ERR_INVALID_ARGUMENTS = 16974083, /** Session已经被移除,建议销毁实例之后重新创建实例并加入频道。 */ ERR_SESSION_REMOVED = 33620229, /** 互动模式下设置角色错误 */ ERR_SDK_UPDATE_ROLE_CHANNEL = 16908801, /** SDK内部错误 */ ERR_INNER = -1, /************************************************************************************/ /******************************** 旁路直播错误码 start ********************************/ /************************************************************************************/ /** * MPU任务发布成功 */ ERR_SDK_MPU_TASK_PUBLISH_OK = 0, /** * MPU任务流未找到 */ ERR_SDK_MPU_TASK_STREAM_NOT_FOUND = 17825793, /** * MPU任务流已存在 */ ERR_SDK_MPU_TASK_STREAM_ALREADY_EXIST = 17825794, /** * MPU任务无效参数 */ ERR_SDK_MPU_TASK_INVALID_PARAM = 17825795, /** * MPU任务内部错误 */ ERR_SDK_MPU_TASK_INTERNAL_ERROR = 17825796, /** * MPU任务rtmp服务错误 */ ERR_SDK_MPU_TASK_RTMP_SERVER_ERROR = 17825797, /** * MPU任务rtmp流地址错误 */ ERR_SDK_MPU_TASK_RTMP_STREAM_URL_ERROR = 17825798, /** * MPU任务发布超时 */ ERR_SDK_MPU_TASK_PUBLISH_TIMEOUT = 17825799, /** * MPU任务发布成功 */ ERR_SDK_MPU_TASK_NOT_AUTHORIZED = 17825800, /************************************************************************************/ /******************************** 旁路直播错误码 end ********************************/ /************************************************************************************/ /************************************************************************************/ /******************************** 跨频道转推错误码 start ******************************/ /************************************************************************************/ /** * 检测到本地状态不对,没入会,角色错误,频道模式错误 */ ERR_SDK_CHANNEL_RELAY_STATE_ERROR = 18874369, /** * 服务端返回436,源通道模式不匹配 */ ERR_SDK_CHANNEL_RELAY_SRC_NOT_ALLOW = 18874370, /** * 服务端返回437,目标通道不存在或者模式不匹配 */ ERR_SDK_CHANNEL_RELAY_JOIN_DEST_FAILED = 18874371, /** * 服务端返回438,token无效 */ ERR_SDK_CHANNEL_RELAY_TOKEN_INVALID = 18874372, /** * 服务端返651,session不是主播 */ ERR_SDK_CHANNEL_RELAY_ROLE_ERROR = 18874373, /** * 服务端400,参数错误 */ ERR_SDK_CHANNEL_RELAY_INVALID_PARAM = 18874374, /** * 服务端返回440,不能转推到本频道 */ ERR_SDK_CHANNEL_RELAY_TO_SELF_ERROR = 18874375 } declare class AliRtcLiveTranscoding { authInfo?: AliRtcAuthInfo; private slsReporter; constructor(slsReporter: SLSReporter); private doRequest; setAuthInfo(authInfo: AliRtcAuthInfo): void; clear(): void; startPublishLiveStream(streamUrl: string, transcodingParam: AliRtcLiveTranscodingParam): Promise; startPublishLiveStreamWithTaskId(taskId: string, transcodingParam: AliRtcLiveTranscodingParam): Promise; updatePublishLiveStream(streamUrl: string, transcodingParam: AliRtcLiveTranscodingParam): Promise; updatePublishLiveStreamWithTaskId(taskId: string, transcodingParam: AliRtcLiveTranscodingParam): Promise; stopPublishLiveStream(streamUrl: string): Promise; stopPublishLiveStreamWithTaskId(taskId: string): Promise; refreshAuthInfo(authInfo: AliRtcRefreshAuthInfo): void; } export declare enum AliRtcLiveTranscodingAudioSampleRate { LiveTranscoding_HZ_48000 = 48000, LiveTranscoding_HZ_44100 = 44100, LiveTranscoding_HZ_32000 = 32000, LiveTranscoding_HZ_16000 = 16000, LiveTranscoding_HZ_8000 = 8000 } export declare enum AliRtcLiveTranscodingCropMode { /*! 缩放模式 */ LiveTranscodingOrigin = 0, /*! 剪裁 */ LiveTranscodingCrop = 1, /*! 填充 */ LiveTranscodingFill = 2 } export declare class AliRtcLiveTranscodingEncodeParam { videoWidth: number; videoHeight: number; videoFramerate: number; videoBitrate: number; videoGop: number; audioSamplerate: AliRtcLiveTranscodingAudioSampleRate; audioBitrate: number; audioChannels: number; constructor(videoWidth: number, videoHeight: number, videoFramerate?: number, videoBitrate?: number, videoGop?: number, audioSamplerate?: AliRtcLiveTranscodingAudioSampleRate, audioBitrate?: number, audioChannels?: number); } export declare enum AliRtcLiveTranscodingErrorCode { LiveTranscodingErrorPublishOk = 0, LiveTranscodingErrorStreamNotFound = 17825793, LiveTranscodingErrorStreamAlreadyExist = 17825794, LiveTranscodingErrorInvalidParam = 17825795, LiveTranscodingErrorInternalError = 17825796, LiveTranscodingErrorRtmpServerError = 17825797, LiveTranscodingErrorRtmpStreamUrlError = 17825798, LiveTranscodingErrorPublishTimeout = 17825799, LiveTranscodingErrorNotAuthorized = 17825800 } export declare enum AliRtcLiveTranscodingFontType { NOTO_SERIF_CJKSC_REGULAR = 0, ALIBABA_PUHUITI_REGULAR = 1, ALIBABA_PUHUITI_BOLD = 2, ALIBABA_PUHUITI_Heavy = 3, ALIBABA_PUHUITI_LIGHT = 4, ALIBABA_PUHUITI_MEDIUM = 5 } export declare enum AliRtcLiveTranscodingMediaProcessMode { /*! 通用模式 */ LiveTranscodingNormal = 0, /*! 虚拟背景模式 */ LiveTranscodingVirtualBackground = 1 } export declare enum AliRtcLiveTranscodingMixMode { /*! 单路模式 */ LiveTranscodingSingle = 0, /*! 混流模式 */ LiveTranscodingMix = 1 } export declare class AliRtcLiveTranscodingMixParam { taskProfile: AliRtcLiveTranscodingTaskProfile; encodeParam?: AliRtcLiveTranscodingEncodeParam; users: AliRtcTranscodingUser[]; backgroundColor: number; backgrounds: AliRtcTranscodingImage[]; watermarks: AliRtcTranscodingImage[]; clockWidgets: AliRtcTranscodingClockWidget[]; cropMode?: AliRtcLiveTranscodingCropMode; mediaProcessMode?: AliRtcLiveTranscodingMediaProcessMode; constructor(taskProfile: AliRtcLiveTranscodingTaskProfile); } export declare class AliRtcLiveTranscodingParam { /*! 旁路模式 */ mixMode: AliRtcLiveTranscodingMixMode; /*! 路模式单路参数 */ singleParam?: AliRtcLiveTranscodingSingleParam; /*! 旁路模式混流参数 */ mixParam?: AliRtcLiveTranscodingMixParam; constructor(mixMode?: AliRtcLiveTranscodingMixMode, singleParam?: AliRtcLiveTranscodingSingleParam, mixParam?: AliRtcLiveTranscodingMixParam); toJson(type: MPU_TASK_TRANSACTION_TYPE, authInfo: AliRtcAuthInfo, taskId: string, streamUrl?: string, messageId?: string): { [key: string]: any; }; } export declare enum AliRtcLiveTranscodingSegmentType { /*! 无人像分割 */ LiveTranscodingNoBody = 0, /*! 人像分割 */ LiveTranscodingBody = 1 } export declare class AliRtcLiveTranscodingSingleParam { userId?: string; streamType?: AliRtcLiveTranscodingStreamType; sourceType?: AliRtcLiveTranscodingSourceType; constructor(uid?: string, streamType?: AliRtcLiveTranscodingStreamType, sourceType?: AliRtcLiveTranscodingSourceType); } export declare enum AliRtcLiveTranscodingSourceType { /*! 相机流 */ LiveTranscodingCamera = 0, /*! 屏幕流 */ LiveTranscodingShareScreen = 1 } export declare enum AliRtcLiveTranscodingState { LiveTranscodingState_IDLE = 0, LiveTranscodingState_CONNNECT = 1, LiveTranscodingState_RUNNING = 2, LiveTranscodingState_RECOVERING = 3, LiveTranscodingState_FAILURE = 4, LiveTranscodingState_END = 5 } export declare enum AliRtcLiveTranscodingStreamType { /*! 原始流 */ LiveTranscodingOrigin = 0, /*! 音频 */ LiveTranscodingAudio = 1, /*! 视频 */ LiveTranscodingVideo = 2 } export declare enum AliRtcLiveTranscodingTaskProfile { LiveTranscoding_Profile_1IN_1080P = 0, LiveTranscoding_Profile_1IN_720P = 1, LiveTranscoding_Profile_1IN_360P = 2, LiveTranscoding_Profile_2IN_1080P = 3, LiveTranscoding_Profile_2IN_720P = 4, LiveTranscoding_Profile_2IN_360P = 5, LiveTranscoding_Profile_4IN_1080P = 6, LiveTranscoding_Profile_4IN_720P = 7, LiveTranscoding_Profile_4IN_360P = 8, LiveTranscoding_Profile_9IN_1080P = 9, LiveTranscoding_Profile_9IN_720P = 10, LiveTranscoding_Profile_9IN_360P = 11, LiveTranscoding_Profile_12IN_1080P = 12, LiveTranscoding_Profile_12IN_720P = 13, LiveTranscoding_Profile_12IN_360P = 14, LiveTranscoding_Profile_16IN_1080P = 15, LiveTranscoding_Profile_16IN_720P = 16, LiveTranscoding_Profile_16IN_360P = 17, LiveTranscoding_Profile_Mixed = 9999 } declare interface AliRtcLocalAudioStats { track: AliRtcAudioTrack; stats: any; } export declare class AliRtcLocalStreamInfo extends default_2 { type: AliRtcRawDataStreamType; originVideoTrack?: MediaStreamTrack; videoSource?: VideoStreamSource; private _videoMuted; originAudioTrack?: MediaStreamTrack; audioSource?: AudioStreamSource; private _audioMuted; private _targetVideoTrack?; private _targetDualVideoTrack?; private _targetAudioTrack?; private _publishVideoStream?; private _publishDualVideoStream?; private _publishAudioStream?; private _previewStream?; plugins: AliRtcPlugin[]; private _profileManager?; cameraVideoConstraints?: IVideoConstraints; micAudioConstraints?: IAudioConstraints; private get profileManager(); get audioProfile(): AudioProfileKey | undefined; constructor(type: AliRtcRawDataStreamType); private onVideoTrackEnded; private onAudioTrackEnded; updateSource(newStream: LocalStream, newVideoSource?: VideoStreamSource, newAudioSource?: AudioStreamSource): Promise; get currentProfile(): string | undefined; get currentVideoTrack(): MediaStreamTrack | undefined; get currentDualVideoTrack(): MediaStreamTrack | undefined; get publishVideoStream(): LocalStream | undefined; get publishDualVideoStream(): LocalStream | undefined; get currentAudioTrack(): MediaStreamTrack | undefined; get publishAudioStream(): LocalStream | undefined; get previewStream(): LocalStream | undefined; /** * 更新 VideoTrack * @param videoTrack */ updateVideoTrack(videoTrack?: MediaStreamTrack, force?: boolean): Promise; /** * 更新 DualVideoTrack * @param videoTrack * @param force */ updateDualVideoTrack(videoTrack?: MediaStreamTrack, force?: boolean): Promise; /** * 更新 AudioTrack * @param audioTrack */ updateAudioTrack(audioTrack?: MediaStreamTrack, force?: boolean): Promise; /** * 设置音频流静音 * @param muted */ setAudioMuted(muted: boolean): void; get isAudioMuted(): boolean; /** * 设置视频流静音 * @param muted */ setVideoMuted(muted: boolean): void; get isVideoMuted(): boolean; process(localStreamInfos: AliRtcLocalStreamInfo[]): Promise; /** * 停止视频流 */ stopVideo(): void; /** * 停止音频流 */ stopAudio(): void; /** * 停止视频流和音频流 */ stop(): void; /** * 应该在执行完 plugin 后调用 * @param profileName * @param profileValue */ updateVideoProfile(profileName?: string, profileValue?: Partial, skipConstraints?: boolean): Promise; get videoProfile(): string | undefined; setVideoContentHint(hint?: string): void; /** * 应该在执行完 plugin 后调用 * @param profileName */ updateAudioProfile(profileKey: AudioProfileKey): Promise; /** * 复制视频 profile 到指定 LocalStream * @param publishStream */ cloneVideoProfile(publishStream: LocalStream): Promise; addPlugin(plugin: AliRtcPlugin): void; removePlugin(plugin: AliRtcPlugin): boolean; } declare interface AliRtcLocalStreamListener { videotrackended: () => void; audiotrackended: () => void; } declare interface AliRtcLocalVideoStats { track: AliRtcVideoTrack; streamType?: AliRtcVideoStreamType; stats: any; } declare type AliRtcLocalView = string | HTMLVideoElement | string[] | HTMLVideoElement[] | null; export declare enum AliRtcLogLevel { DEBUG = 0, INFO = 1, API = 2, WARNING = 3, ERROR = 4, NONE = 5 } /** * @brief OnBye类型枚举 */ declare enum AliRtcOnByeType { /** 当前user被踢出channel */ AliRtcOnByeBeKickedOut = 1, /** channel已结束,需要离开会议 */ AliRtcOnByeChannelTerminated = 2, /** 相同userID在其他设备joinChannel,当前设备被下线 */ AliRtcOnByeUserReplaced = 3 } export declare abstract class AliRtcPlugin extends default_2 { name: string; options: any; type: AliRtcPluginType; streamType: AliRtcRawDataStreamType; trackType: AliRtcPluginTrackType; zIndex: number; private _isEnable; lastInputAudioTrack?: MediaStreamTrack; lastOutputAudioTrack?: MediaStreamTrack; lastInputVideoTrack?: MediaStreamTrack; lastOutputVideoTrack?: MediaStreamTrack; private _hasCleared; constructor(name: string, streamType?: AliRtcRawDataStreamType, trackType?: AliRtcPluginTrackType); get initOptions(): {}; getOptions(): any; abstract setOptions(options: any): void; abstract isSupported(version: string): boolean; init(): Promise; enable(): void; disable(): void; get isEnable(): boolean; protected audioUpdated(streamInfo: AliRtcLocalStreamInfo): boolean; protected videoUpdated(streamInfo: AliRtcLocalStreamInfo): boolean; execute(streamInfo: AliRtcLocalStreamInfo, streamInfos: AliRtcLocalStreamInfo[]): Promise; abstract shouldUpdate(streamInfo: AliRtcLocalStreamInfo, streamInfos: AliRtcLocalStreamInfo[]): boolean; abstract process(streamInfo: AliRtcLocalStreamInfo, streamInfos: AliRtcLocalStreamInfo[]): Promise; clear(_streamInfo?: AliRtcLocalStreamInfo): void; } declare interface AliRtcPluginListener { enabled: () => void; disabled: () => void; updated: () => void; ready: () => void; overload: (info: any) => void; error: (error: any) => void; unsupported: () => void; } export declare enum AliRtcPluginTrackType { AUDIO = 0, VIDEO = 1, BOTH = 2 } export declare enum AliRtcPluginType { PRE_PROCESSOR = 0, POST_PROCESSOR = 1 } export declare enum AliRtcPublishState { /** 0: SDK初始推流状态 */ AliRtcStatePublishIdle = 0, /** 1: 未推流状态,可能是因为: * - 已设置停止推送媒体流 * - 推送媒体流失败 */ AliRtcStateNoPublish = 1, /** 2: 推流链接建立过程中 */ AliRtcStatePublishing = 2, /** 3: 推流成功 */ AliRtcStatePublished = 3 } export declare enum AliRtcRawDataStreamType { /** 相机流 */ AliRtcSdkStreamTypeCapture = 0, /** 屏幕共享流 */ AliRtcSdkStreamTypeScreen = 1 } export declare type AliRtcRefreshAuthInfo = Pick; declare interface AliRtcRemoteAudioStats { uid: string; track: AliRtcAudioTrack; stats: any; } export declare class AliRtcRemoteUserInfo { private remoteUser; constructor(remoteUser: RemoteUser); get userId(): string; get displayName(): string; get isMuteAudioPlaying(): boolean; get hasAudio(): boolean; get hasCamera(): boolean; get hasCameraLarge(): boolean; get hasCameraSmall(): boolean; get hasScreenShare(): boolean; get isAudioSubscribing(): boolean; get isVideoSubscribing(): boolean; get isVideoLargeSubscribing(): boolean; get isVideoSmallSubscribing(): boolean; get isScreenSubscribing(): boolean; get audioElement(): HTMLAudioElement | undefined; } declare interface AliRtcRemoteVideoStats { uid: string; track: AliRtcVideoTrack; streamType?: AliRtcVideoStreamType; stats: any; } declare interface AliRtcScreenShareConfiguration { frameRate?: number; bitrate?: number; } declare interface AliRtcScreenShareStartConfig { audio?: boolean; videoTrack?: MediaStreamVideoTrack; audioTrack?: MediaStreamAudioTrack; } export declare enum AliRtcSdkChannelProfile { /** 普通通信模式 */ AliRtcSdkCommunication = "communication", /** 直播模式(大方会模式) */ AliRtcSdkInteractiveLive = "interactive_live", /** 低延迟互动直播模式 */ AliRtcSdkInteractiveWithLowLatencyLive = "cdn_live" } export declare enum AliRtcSdkClientRole { /** 互动角色 */ AliRtcSdkInteractive = "interactive", /** 观众角色 */ AliRtcSdkLive = "live" } /** 角色鉴权 主播pub|观众sub|转推流鉴权(跨房间转推中使用)relay */ declare type AliRtcSdkTokenRole = 'pub' | 'sub' | 'relay'; export declare enum AliRtcSubscribeState { /** 初始状态 */ AliRtcStateSubscribeIdle = 0, /** 未订阅 */ AliRtcStateNoSubscribe = 1, /** 订阅中 */ AliRtcStateSubscribing = 2, /** 已订阅 */ AliRtcStateSubscribed = 3 } export declare class AliRtcTranscodingClockWidget { x: number; y: number; fontSize: number; zOrder: number; fontColor: number; fontType: AliRtcLiveTranscodingFontType; constructor(x: number, y: number, fontSize: number); constructor(x: number, y: number, fontSize: number, zOrder: number); constructor(x: number, y: number, fontSize: number, zOrder: number, fontColor: number); constructor(x: number, y: number, fontSize: number, zOrder: number, fontColor: number, fontType: AliRtcLiveTranscodingFontType); toJson(videoWidth: number, videoHeight: number): { x: number; y: number; fonttype: AliRtcLiveTranscodingFontType; fontsize: number; fontcolor: number; zorder: number; }; } export declare class AliRtcTranscodingImage { static DisplayType: typeof DisplayType; url: string; x: number; y: number; width: number; height: number; alpha: number; display: DisplayType; zOrder: number; constructor(url: string, x: number, y: number, width: number, height: number); constructor(url: string, x: number, y: number, width: number, height: number, zOrder: number); constructor(url: string, x: number, y: number, width: number, height: number, zOrder: number, alpha: number); constructor(url: string, x: number, y: number, width: number, height: number, zOrder: number, alpha: number, display: DisplayType); toJson(videoWidth: number, videoHeight: number): { url: string; alpha: number; display: DisplayType; x: number; y: number; width: number; height: number; zorder: number; }; } export declare class AliRtcTranscodingText { text: string; x: number; y: number; fontSize: number; zOrder: number; fontColor: number; fontType: AliRtcLiveTranscodingFontType; constructor(text: string, x: number, y: number, fontSize: number); constructor(text: string, x: number, y: number, fontSize: number, zOrder: number); constructor(text: string, x: number, y: number, fontSize: number, zOrder: number, fontColor: number); constructor(text: string, x: number, y: number, fontSize: number, zOrder: number, fontColor: number, fontType: AliRtcLiveTranscodingFontType); toJson(videoWidth: number, videoHeight: number): { text: string; x: number; y: number; fonttype: AliRtcLiveTranscodingFontType; fontsize: number; fontcolor: number; zorder: number; }; } export declare class AliRtcTranscodingUser { userId: string; x: number; y: number; width: number; height: number; zOrder?: number; sourceType?: AliRtcLiveTranscodingSourceType; segmentType: AliRtcLiveTranscodingSegmentType; images: AliRtcTranscodingImage[]; texts: AliRtcTranscodingText[]; constructor(userId: string, x: number, y: number, width: number, height: number); constructor(userId: string, x: number, y: number, width: number, height: number, zOrder: number); constructor(userId: string, x: number, y: number, width: number, height: number, zOrder: number, sourceType: AliRtcLiveTranscodingSourceType); toJson(index: number, videoWidth: number, videoHeight: number, mediaProcessMode?: AliRtcLiveTranscodingMediaProcessMode): { [key: string]: any; }; } export declare enum AliRtcTrascodingPublishTaskStatus { /*! 任务开始 */ TrascodingPublishTaskStatusStart = 0, /*! 任务更新 */ TrascodingPublishTaskStatusUpdate = 1, /*! 任务已停止 */ TrascodingPublishTaskStatusStop = 2 } declare enum AliRtcUserOfflineReason { /** 用户主动离开 */ AliRtcUserOfflineQuit = 0, /** 因过长时间收不到对方数据包,超时掉线 */ AliRtcUserOfflineDropped = 1, /** 用户身份从主播切换为观众时触发 */ AliRtcUserOfflineBecomeAudience = 2 } export declare enum AliRtcVideoStreamType { /** 无,在OnSubscribeStreamTypeChanged回调表示当前未订阅 */ AliRtcVideoStreamTypeNone = 0, /** 高码率,高分辨率流(大流) */ AliRtcVideoStreamTypeHigh = 1, /** 低码率,低分辨率流(小流) */ AliRtcVideoStreamTypeLow = 2 } export declare enum AliRtcVideoTrack { /** 无视频流 **/ AliRtcVideoTrackNo = 0, /** 相机流 **/ AliRtcVideoTrackCamera = 1, /** 屏幕共享流 **/ AliRtcVideoTrackScreen = 2, /** 相机流和屏幕共享流 **/ AliRtcVideoTrackBoth = 3 } declare interface AliRtcVideoTrackConfig { userId?: string; streamType: AliRtcRawDataStreamType; } declare interface AliRtcWebTrackConfig { biz: string; extraParams?: string; } declare class AudioLevelMonitor extends default_2 { private audioContext; private stream; private sourceNode?; private analyser?; constructor(); getLevel(): number; /** * 开启监听 audio level 的变化 * * @param {MediaStreamTrack} track 音频轨 * @param {number} [interval=1000] 检测间隔,单位毫秒,默认 1000ms */ start(track: MediaStreamTrack, interval?: number): void; stop(): void; dispose(): void; } declare interface AudioLevelMonitorListener { audioLevel: (level: number) => void; } declare interface AudioMixerPluginOptions { audio?: number; screen?: number; } /** * ------------------ 模式 ----- 采样率 ----- 声道 ----- 码率(kbps) ----- * * standard: 标准音质 48000 单声道 64 * * high: 高音质 48000 单声道 128 * * standard-stereo: 立体声音质 48000 双声道 80 * * high-stereo: 立体声高音质 48000 双声道 192 */ declare type AudioProfileKey = 'standard' | 'high' | 'standard-stereo' | 'high-stereo'; declare enum AudioStreamSource { Microphone = 0, Screen = 1, Mixed = 2 } declare class BizControl extends default_2 { /** * @ignore */ static logName: string; protected self: LocalUser; protected userMap: RemoteUserMap; private usersViewMap; rtsManager: RtsManager; protected localStreamManager: LocalStreamManager; protected authInfo?: AliRtcAuthInfo; protected signalingManager: SignalingManager; pluginManager: PluginManager; private audioMixerPlugin?; private dualVideoPlugin?; private blankAudioPlugin?; protected slsReporter: SLSReporter; private statsMonitorId?; private autoSubAudio; private autoSubVideo; private autoSubScreen; private wantSubAudio; private wantSubVideo; private wantSubScreen; private defaultStreamType; private audioMuted; private playoutVolume; private refreshUrlTimer?; private audioVolumeIndicationInterval; private indicationTimer; private parameter; constructor(config: BizControlConfig); private addSignalingManagerListener; isAutoSubAudio(): boolean; setAutoSubAudio(value: boolean): void; isAutoSubVideo(): boolean; setAutoSubVideo(value: boolean): void; isAutoSubScreen(): boolean; setAutoSubScreen(value: boolean): void; isWantSubAudio(): boolean; setWantSubAudio(value: boolean): void; isWantSubVideo(): boolean; setWantSubVideo(value: boolean): void; isWantSubScreen(): boolean; setWantSubScreen(value: boolean): void; setRemoteDefaultVideoStreamType(type: AliRtcVideoStreamType): void; setRemoteUserVideoStreamType(userId: string, type: AliRtcVideoStreamType): void; setAudioMuted(mute: boolean): void; setLocalViewConfig(view: AliRtcLocalView, track: AliRtcVideoTrack): void; setRemoteViewConfig(uid: string, view: AliRtcLocalView, track: AliRtcVideoTrack): void; get channel(): string | undefined; get userId(): string | undefined; get remoteUsers(): RemoteUser[]; /** * 获取推流对象,只能是自己 */ get publisher(): LocalUser | undefined; get isSubscribing(): boolean; /** * 处理远端用户推流状态变化 * @param {string} userId * @param {string} displayname * @param {string} callid * @param {string} pullStreamUrl * @param {TrackInfo[]} tracks * @returns {void} */ onRemotePublishStateChange(publishInfo: PublishUser): void; /** 定期更新所有人的推拉流地址,便于重连 * @param pushStreamUrl 已有的推流地址,根据地址中的过期时间来设置定时器 * @private */ private setTimeoutToUpdateAllStreamUrls; /** * 登陆成功后初始化用户管理,创建自己 * @param {AliRtcAuthInfo} authInfo * @param {JoinResult} data * @returns {Promise} */ init(authInfo: AliRtcAuthInfo, data: JoinResult): void; leave(): Promise; /** * 离会后清除所有数据 * @returns {Promise} */ clear(): Promise; private startStatsMonitor; private stopStatsMonitor; /** * 添加远端用户 * @param {string} userId * @param {string} displayName * @returns {void} */ addUser(userId: string, displayName: string, reason: SubscribeReason): RemoteUser; /** * 执行添加远端用户 * @param {string} userId * @param {string} displayName * @returns {RemoteUser} */ private executeAddUser; /** * 远端用户设备状态变化 * @param {DeviceStatusChangeType} event * @param {string} userId */ private onRemoteDeviceStatusChange; /** * 远端流数据采集上报 * @param {any} stat */ private onRemoteStatReport; /** * rts 单 PC 订阅超限 */ private onSubscribeExceeds; /** * 移除远端用户 * @param {LeaveInfo} user * @returns {Promise} */ removeLeftUser(user: LeaveInfo): Promise; /** * 更新远端用户数据 * @param {JoinInfo[]} users * @returns {{joinList: JoinInfo[], leaveList: LeaveInfo[], presentList: JoinInfo[]}} */ updateUsers(users: JoinInfo[]): { joinList: JoinInfo[]; leaveList: LeaveInfo[]; presentList: JoinInfo[]; }; /** * 根据 userId 获取 RemoteUser * @param {string} userId * @returns {RemoteUser | undefined} */ getRemoteUser(userId: string): RemoteUser | undefined; /** * 更新远端用户设备信息 * @param {RemoteUserStatus} user * @returns {boolean} true: 用户状态改变 false: 用户状态没有改变 */ updateRemoteUserDeviceStatus(user: RemoteUserStatus): void; updateAudioWant(uid: string, sub: boolean): void; updateVideoWant(uid: string, sub: boolean): void; updateScreenWant(uid: string, sub: boolean): void; private stopIndication; private startIndication; setEnableDualVideoStream(enabled: boolean, options?: AliRtcDualVideoPluginOptions): void; setAudioVolume(options: AudioMixerPluginOptions): void; enableAudioVolumeIndication(interval: number): void; setPlayoutVolume(volume: number): void; refreshAuthInfo(authInfo: AliRtcRefreshAuthInfo): void; setEnableMediaExtensionMsg(enable: boolean): void; setAudioRedEnabled(enable: boolean): void; setParameter(parameter: string): void; getParameter(): string; sendDataChannelMessage(message: AliRtcDataChannelMsg): Promise; } declare interface BizControlConfig { slsReporter: SLSReporter; signalingManager: SignalingManager; } declare interface BizControlListener { [ClientEventType.RtsSubscribeExceeds]: (userId: string, options?: SubscribeOptions) => void; [DeviceStatusChange.Remote]: (event: DeviceStatusChangeType, userId: string) => void; [ClientEventType.PullStreamStats]: (userId: string, stat: any, pullStreamUrl: string) => void; remoteTrackAvailableChange: (uid: string, aliRtcAudioTrack: AliRtcAudioTrack, aliRtcVideoTrack: AliRtcVideoTrack) => void; audioSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; videoSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; screenSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; dataSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number, channel: string) => void; userAudioMuted: (uid: string, isMute: boolean) => void; userVideoMuted: (uid: string, isMute: boolean) => void; userScreenMuted: (userId: string, isMute: boolean) => void; audioVolume: (speakers: { userId: string; volume: number; }[]) => void; rtcLocalVideoStats: (stats: AliRtcLocalVideoStats[]) => void; rtcLocalAudioStats: (stats: AliRtcLocalAudioStats[]) => void; rtcRemoteVideoStats: (stats: AliRtcRemoteVideoStats[]) => void; rtcRemoteAudioStats: (stats: AliRtcRemoteAudioStats[]) => void; rtcStats: (stats: any) => void; remoteAudioAutoPlayFail: (uid: string) => void; remoteVideoAutoPlayFail: (uid: string, track: AliRtcVideoTrack) => void; remoteAudioPlayError: (uid: string, reason?: string) => void; remoteVideoPlayError: (uid: string, reason?: string) => void; remoteSubscribeError: (error: AliRtcError, uid?: string) => void; occurError: (error: AliRtcError, uid?: string) => void; remoteDataChannelMessage: (uid: string, message: AliRtcDataChannelMsg) => void; } declare enum ClientEventType { PullStreamStats = "remoteStat", RtsSubscribeExceeds = "rtsSubscribeExceeds", UserJoined = "userJoined", UserLeft = "userLeft", Bye = "bye", MuteAudio = "muteAudio", UnmuteAudio = "unmuteAudio", MuteVideo = "muteVideo", UnmuteVideo = "unmuteVideo", MuteScreen = "muteScreen", UnmuteScreen = "unmuteScreen", Error = "error" } declare enum CmdType { Add = 0, Del = 1, Update = 2, None = 100 } declare enum CodecType { OPUS = "opus", H264 = "H264", UNKNOWN = "" } declare enum ConnectionLatencyStage { CREATE_ENGINE = "create_engine", JOIN = "join", WANT_INSERT_PUB_TASK = "wantInsertPubTask", INSERT_PUB_TASK = "InsertPubTask", HANDLE_PUB_TASK = "HandlePubTask", RECV_NOTIFY_PUBLISH = "RecvNotifyPublish", INSERT_SUB_TASK = "InsertSubTask", HANDLE_SUB_TASK = "HandleSubTask", FIRST_REMOTE = "first_remote" } declare enum ConnectionLatencyStatus { START = "start", SEND_SIG = "send_sig", RECV_RST = "recv_rst", END = "end", RECEIVED = "received", DECODED = "decoded", PLAYED = "played" } /** * websocket链接状态 */ declare enum CONNECTSTATUS { DISCONNECTED = 0, CONNECTING = 1, CONNECTED = 2 } declare interface DeviceStatus { micOpen: boolean; micInterrupted: boolean; cameraOpen: boolean; screenShare: boolean; audioDisable: boolean; videoDisable: boolean; screenDisable: boolean; backgroundMode: boolean; accompanyPlaying: boolean; } declare enum DeviceStatusChange { Local = "local-device-status-change", Remote = "remote-device-status-change" } declare type DeviceStatusChangeType = ClientEventType.MuteAudio | ClientEventType.UnmuteAudio | ClientEventType.MuteScreen | ClientEventType.UnmuteScreen | ClientEventType.MuteVideo | ClientEventType.UnmuteVideo; declare enum DisplayType { NOT_DISPLAY = 0, ALWAYS = 1, WHEN_NO_VIDEO = 2 } declare interface IResponse { version: number; code: number; msgtype: MessageType; tid: string; isproxy?: boolean; } declare interface ISendPackage { version: number; msgtype: MessageType; tid: string; header: { appid: string; channelid: string; sessionid: string; userid: string; displayName?: string; clientversion?: string; platform?: string; }; data: { seq: number; l1ip?: string; status?: string; clientrole?: string; configure?: { clientrole?: AliRtcSdkClientRole; channelprofile: AliRtcSdkChannelProfile; }; auth?: SendPackageAuthInfo; sessionid?: string; pushstreamurl?: string; users?: any[]; }; } /** * 服务端通知的远端用户信息 */ declare interface JoinInfo { displayname: string; session: string; userid: string; callid: string; clientrole?: string; subscribe?: { pullstreamurl: string; }; tracks?: TrackInfo[]; } declare interface JoinResult { pushstreamurl: string; tid: string; users: JoinInfo[]; timestamp: number; } declare interface LeaveInfo { userid: string; leavecode: AliRtcUserOfflineReason; reason: string; } declare class LocalProfileManager { private defaultProfile; profile?: string; profileMap: Map; audioProfile?: AudioProfileKey; contentHint?: string; constructor(defaultProfile?: IProfile); updateProfile(profileKey: string, profileValue?: Partial): void; get videoProfile(): string | undefined; updateAudioProfile(profileKey: AudioProfileKey): void; setContentHint(videoTrack: MediaStreamTrack | undefined, contentHint?: string): void; /** * 更新源流 Constraints * 更新 PeerConnectiong Sender 相关配置 * @param stream */ setVideoProfile(originVideoTrack: MediaStreamTrack | undefined, target: LocalStream | undefined, skipConstraints?: boolean): Promise; } declare type LocalStreamConfig = Omit<_LocalStreamConfig, 'custom'>; declare interface _LocalStreamConfig extends IStreamConfig { videoProfile?: string; screenProfile?: string; } declare class LocalStreamManager extends default_2 { /** * @ignore */ static logName: string; private pluginManager; private slsReporter; private publishingCameraVideoStream; private publishingScreenVideoStream; cameraStreamInfo: AliRtcLocalStreamInfo; screenStreamInfo: AliRtcLocalStreamInfo; private streamInfos; private _audioCaptureDisabled; private _cameraCaptureDisabled; private _publishLocalAudioStreamEnabled; private _publishLocalVideoStreamEnabled; private _publishLocalScreenStreamEnabled; constructor(pluginManager: PluginManager, slsReporter: SLSReporter); get hasCamera(): boolean; get audioCaptureDisabled(): boolean; set audioCaptureDisabled(closed: boolean); get cameraCaptureDisabled(): boolean; set cameraCaptureDisabled(closed: boolean); setAudioMuted(muted: boolean): void; get isAudioMuted(): boolean; setCameraMuted(muted: boolean): void; get isCameraMuted(): boolean; setScreenMuted(muted: boolean): void; get isScreenMuted(): boolean; get publishLocalAudioStreamEnabled(): boolean; set publishLocalAudioStreamEnabled(enable: boolean); get publishLocalVideoStreamEnabled(): boolean; set publishLocalVideoStreamEnabled(enable: boolean); get publishLocalScreenStreamEnabled(): boolean; set publishLocalScreenStreamEnabled(enable: boolean); updateStreams(): Promise; private setAvailableCameraDeviceId; private setAvailableMicrophoneDeviceId; /** * 创建 LocalStream * @param {LocalStreamConfig} params 创建 LocalStream 的配置 * @returns {LocalStream} 当前创建的 LocalStream */ createLocalStream(params: LocalStreamConfig): Promise; /** * 停止推流,底层调用 rts publishStop,不会导致 DC 马上关闭。适合暂时停推的场景 * @param {StopPublishOptions} options * @returns {Promise} 如果返回了 audio,则表示需要更新音频流 */ stopLocalStream(options: StopPublishOptions): Promise; get publishStreams(): PublishStreamInfo; createHTTPPublishStream(): Promise<{ publishStream: LocalStream | undefined; videoSmallStream: LocalStream | undefined; screenStream: LocalStream | undefined; vMsid: string | undefined; }>; /** * 停止所有流 */ stop(): void; /** * 设置摄像头流 profile * @param {LocalStream | null} stream * @param {string} profileKey * @param {IProfile} profile */ setVideoProfile(profileKey?: string, profile?: Partial, skipConstraints?: boolean): Promise; /** * 设置摄像头流 content hint * @param {string} hint * @note 不传则尝试复用之前的 hint */ setVideoContentHint(hint?: string): void; /** * 设置音频流 profile * @param {string} profileKey */ setAudioProfile(profileKey: AudioProfileKey): Promise; /** * 设置屏幕共享流 profile * @param {LocalStream} stream * @param {string} profileKey * @param {IProfile} profile */ setScreenProfile(profileKey?: string, profile?: Partial): Promise; setScreenContentHint(hint?: string): void; /** * 设置 cameraVideoConstraints * @param {IVideoConstraints} cameraVideoConstraints */ setCameraVideoConstraints(cameraVideoConstraints: IVideoConstraints): void; /** * 设置 micAudioConstraints * @param {IAudioConstraints} micAudioConstraints */ setMicAudioConstraints(micAudioConstraints: IAudioConstraints): void; } declare interface LocalStreamManagerListener { trackended: (type: TrackEvent_2) => {}; publishupdate: () => {}; } declare class LocalUser extends User { /** * @ignore */ static logName: string; private _url; private joinTime; private _isPublishing; private publishPromise; private previewElements; private screenPreviewElements; private streamManager; private dc; protected streamTracks?: TrackInfo[]; protected publishId: string; protected signalingManager: SignalingManager; traceId: string; private monitorTimerId?; private monitorDataCache; private trackTraceIdMap; private candidateDataCache; private pcMediaStatsMap; protected slsReporter: SLSReporter; private audioPubState; private videoPubState; private videoSmallPubState; private screenPubState; private dataPubState; private parameter; constructor(config: LocalUserConfig); get url(): string; set url(value: string); get joined(): boolean; get isPublishing(): boolean; get publishStreams(): PublishStreamInfo; get cameraTrack(): MediaStreamTrack | undefined; get screenTrack(): MediaStreamTrack | undefined; get audioTrack(): MediaStreamTrack | undefined; get hasCamera(): boolean; get hasMicrophone(): boolean; get hasScreenShare(): boolean; get hasCameraTrackInMS(): boolean; get hasCameraDualTrackInMS(): boolean; get hasScreenTrackInMS(): boolean; get hasAudioTrackInMS(): boolean; get cameraDirection(): string | undefined; get audioCaptureDisabled(): boolean; get cameraCaptureDisabled(): boolean; get publishLocalVideoStreamEnabled(): boolean; get publishLocalAudioStreamEnabled(): boolean; get publishLocalScreenStreamEnabled(): boolean; setPublishLocalAudioStreamEnabled(enable: boolean): void; setPublishLocalVideoStreamEnabled(enable: boolean): void; setPublishLocalScreenStreamEnabled(enable: boolean): void; initInfo(authInfo: AliRtcAuthInfo, pushStreamUrl: string): void; setVideoProfile(profile?: VideoProfileWithSendFramerate): Promise; setVideoContentHint(hint: string): void; setScreenContentHint(hint: string): void; setAudioProfile(profileKey: AudioProfileKey): Promise; setScreenProfile(profile?: Partial): Promise; setCameraDirection(direction: AliRtcCameraDirection): void; setCameraDeviceId(deviceId: string): void; muteLocalCamera(mute: boolean): void; muteLocalMic(mute: boolean): void; muteLocalScreen(mute: boolean): void; setMicrophoneDeviceId(deviceId: string): void; setMicrophoneConstraints(constraints: MediaTrackConstraints): void; updatePubId(): void; clearPublishState(): void; leave(): Promise; /** * 销毁,停止推流 * @returns {Promise} */ clear(): Promise; resetElement(element: HTMLVideoElement): void; setPreviewElement(previewParams: PreviewConfig): void; startDefaultCamera(audioOnly: boolean): Promise; startDefaultAudio(): Promise; /** * 为本地预览设置渲染元素和视频流 * @param {AliRtcLocalView} view 渲染元素,null 则为停止显示 * @param {AliRtcVideoTrack} track 视频流类型 */ setViewConfig(elements: null | HTMLVideoElement[], track: AliRtcVideoTrack): void; /** * 开启摄像头采集 * @param params * @returns */ startCameraCapture(): Promise; /** * 关闭摄像头采集 * @note 调用此接口后,入会后、离会再入会,采集设备保持关闭状态 */ stopCameraCapture(): Promise; /** * 开启麦克风采集 * @param params * @returns */ startAudioCapture(): Promise; /** * 关闭音频采集 * @note 调用此接口后,入会后、离会再入会,采集设备保持关闭状态 */ stopAudioCapture(): Promise; /** * 预览本地流 * @param {PreviewConfig} previewParams * @returns {Promise} */ preview(previewParams: PreviewConfig): Promise; /** * 在所有预览容器中预览当前流 * @param {boolean} screen 是否指定预览辅流 */ previewAll(previewAllParams?: PreviewAllConfig): Promise; /** * 停止预览本地流 */ stopPreview(previewParams?: StopPreviewConfig): void; /** * 恢复推流 * @returns {Promise} */ resumePublish(): Promise; createLocalStream(params: LocalStreamConfig): Promise; stopLocalStream(options: PublishOptions): Promise; private compareAndPublish; private reportAudioProfile; private reportVideoProfile; private reportScreenProfile; private updateDataChannel; private publishDataChannel; /** * 开始推流 * @param isResume 是否是恢复推流 * @returns */ startPublish(isResume?: boolean, reason?: PublishReason): Promise; /** * 重新执行 progress 并触发 publishupdate */ updateStreams(): Promise; /** * 对比本地流和正在推流,进行推流更新 * @param isResume 是否是恢复推流 */ publishUpdate(reason?: PublishReason): Promise; private syncPublishToRoomServer; private refreshPushStreamUrl; /** * 推流,用于 rts subscribe/publish 被调用后,此时 DataChannel 已存在 * @param {LocalStream} stream * @returns {Promise} */ publishAdd(stream: LocalStream, extra: PublishExtraParams, isResume?: boolean, retryTimes?: number): Promise; /** * 替换推流 Track(仅限于替换已存在的 Track 类型) * @param {LocalStream} stream * @returns {Promise} */ publishReplace(stream: LocalStream, extra?: PublishExtraParams): Promise; /** * 停止推某些轨,不销毁 DataChannel 和 LocalStream,用于非销毁场景 * @param {PublishOptions} options * @returns {Promise} */ publishDeleteTracks(options: PublishOptions): Promise; /** * 停止推流,不销毁 LocalStream,用于非销毁场景 * @returns {Promise} */ publishStop(): Promise; /** * 停止推流,销毁 DataChannel,用于销毁的场景 * @returns {Promise} */ unPublish(): Promise; /** * 事件通知本地的设备使用状态 */ reportSelfDeviceStatus(): void; /** * 从localStream 中获取当前的设备状态 * @returns {string} */ private getDeviceStatus; private onTrackEnd; private resetPreviewElements; private resetSecondayPreviewElements; getMediaStats(id: string): any; private reportPublishMonitor; private reportNetwork; private startStreamMonitor; /** * 停止本地流数据采集 */ private stopStreamMonitor; /** * 清除本地流 * @returns {void} */ clearStream(): void; /** * 获取当前使用的摄像头 deviceId * @returns {string | undefined} */ getCurrentCameraDeviceId(): string | undefined; /** * 获取当前使用的摄像头 deviceId * @returns {string | undefined} */ getCurrentMicDeviceId(): string | undefined; enableAudioVolumeIndication(interval: number): void; sendSEI(message: ArrayBuffer, repeatCount: number, payloadType: number): Promise; sendDataChannelMessage(message: AliRtcDataChannelMsg): Promise; getStats(): Promise<{ audio: AliRtcLocalAudioStats[]; video: AliRtcLocalVideoStats[]; candidate: any; }>; } declare interface LocalUserConfig { rtsManager: RtsManager; localStreamManager: LocalStreamManager; slsReporter: SLSReporter; signalingManager: SignalingManager; pluginManager: PluginManager; audioVolumeIndicationInterval: number; parameter: { [key: string]: any; }; } /** * 日志埋点类,调用LogReporter进行日志埋点 * 在入会之前,会将埋点缓存,入会后以每200ms一条的速度将缓存的埋点按顺序上报 */ declare class LogClient { protected tracker?: default_3; protected param?: any; protected msgCacheArr: any[]; protected index: number; protected stsOpt?: any; protected slsToken?: SLSSTSToken; protected ossToken?: OSSSTSToken; protected ntpClock: NTPClient; constructor(); private createTracker; start(info: AliRtcAuthInfo): void; updateToken(slsToken: SLSSTSToken, ossToken?: OSSSTSToken): void; /** * 断开连接 */ stop(): void; /** * 发送一条日志 * @param {any} log */ sendReport(log: any): void; /** * 初始化公共参数 */ protected initParam(info: AliRtcAuthInfo): void; } declare interface LogInfo { [key: string]: string | number; } declare interface MediaTrackInfo { ssrc: string; msid: string; red: number; codec: CodecType; sample?: number; pt: number; type?: CmdType; } declare enum MessageType { KEEPALIVE = "keepalive", JOINCHANNEL = "joinchannel", NOTIFYJOIN = "notifyjoin", NOTIFYSTATUS = "notifystatus", STATUSREPORT = "statusreport", LEAVECHANNEL = "leavechannel", NOTIFYLEAVE = "notifyleave", NOTIFYPUBLISH = "notifypublish", BYE = "bye", RECONNECT = "reconnect", PUBLISH = "publish", REFRESHURL = "refreshurl", UNSUBSCRIBE = "unsubscribe", ROLEUPDATE = "roleupdate" } declare enum MPU_TASK_TRANSACTION_TYPE { MPU_TASK_TRANSACTION_START = 0, MPU_TASK_TRANSACTION_UPDATE = 1, MPU_TASK_TRANSACTION_STOP = 2, MPU_TASK_TRANSACTION_LIST = 3, MPU_TASK_TRANSACTION_POLLING = 4, MPU_TASK_TRANSACTION_ACKNOWLEDGE = 5, MPU_TASK_TRANSACTION_END = 6 } declare enum MsidType { Audio = "sophon_audio", VideoLarge = "sophon_video_camera_large", VideoSmall = "sophon_video_camera_small", Screen = "sophon_video_screen_share", Data = "sophon_data" } declare class NTPClient { private static instance; private ntpClock; private constructor(); static getInstance(): NTPClient; now(): number; } declare interface OSSSTSToken { access_key_id: string; access_key_secret: string; security_token: string; region_endpoint: string; bucket_name: string; expiration: number; } declare interface OSSToken { access_key_id: string; access_key_secret: string; security_token: string; region_endpoint: string; bucket_name: string; expiration: number; } declare class PackageCreater { protected authInfo: AliRtcAuthInfo; protected userName: string; protected seqIndex: number; constructor(authInfo: AliRtcAuthInfo, userName: string); get roleAuth(): SendPackageAuthInfo | undefined; refreshAuthInfo(authInfo: AliRtcAuthInfo): void; getSeqIndex(): number; /** * 创建一个心跳包 * @returns */ createKeepAlivePackage(): ISendPackage; /** * 创建一个用于发送入会消息的Package * @returns */ createJoinPackage(): ISendPackage; /** * 创建一个用于发送离会消息的Package * @returns */ crateLeavePackage(): ISendPackage; createStatusPackage(status: string): ISendPackage; /** * 创建一个用于发送推流消息的Package * @returns */ createPublishPackage(): ISendPackage; createRoleUpdatePackage(): ISendPackage; createReconnectPackage(data?: ReconnectData): ISendPackage; createRefreshUrlPackage(): ISendPackage; /** * 创建一个Response包 * @param {string} tid Notify消息的tid * @param {MessageType} msgType 消息类型 * @returns {IResponse} */ createResponsePackage(tid: string, msgType: MessageType): IResponse; /** * * @param messageType * @returns */ protected createBaseSendPackage(messageType: MessageType): ISendPackage; } declare type Parameter = { [key: string]: any; }; declare class PluginManager extends default_2 { private plugins; add(plugin: AliRtcPlugin, options?: any): void; remove(name: string): void; removeAll(): void; get(name: string): AliRtcPlugin | undefined; has(name: string): boolean; getAll(): AliRtcPlugin[]; } declare interface PluginManagerListener { added: (plugin: AliRtcPlugin) => void; removed: (plugin: AliRtcPlugin) => void; updated: (plugin: AliRtcPlugin) => void; } declare interface PreviewAllConfig { primary?: boolean; screen?: boolean; } declare interface PreviewConfig { videoElement: HTMLVideoElement; screen?: boolean; } declare interface PublishExtraParams { vMsid?: string; aMsid?: string; isVideoSmall?: boolean; isScreen?: boolean; isAudio?: boolean; } declare interface PublishInfo { type: PublishType; userid: string; sessionid: string; displayname: string; pubid?: string; resume?: boolean; subscribe: { signal: string; pullstreamurl: string; }; l1ip?: string; callid: string; tracks: TrackInfo[]; traceid?: string; signaltid?: string; } declare type PublishOptions = StreamOptions & { vMsid?: string; }; declare enum PublishReason { MANUAL = 0, JOIN_CHANNEL = 1, ROLE_CHANGE = 2, RECONNECT = 3 } declare interface PublishStreamInfo { audio?: LocalStream; video?: LocalStream; videoSmall?: LocalStream; screen?: LocalStream; videoProfile?: LocalProfileManager; screenProfile?: LocalProfileManager; } declare enum PublishType { Add = "add", Delete = "delete", Replace = "replace", Stop = "stop", UnPublish = "unpublish" } declare interface PublishUser { callid: string; clientrole?: string; displayname: string; subscribe?: { pullstreamurl: string; }; pubid?: string; tracks?: TrackInfo[]; userid: string; sessionid?: string; } declare interface ReconnectData { role?: RoleForReconnectData; auth?: SendPackageAuthInfo; publish?: { users: [PublishInfo]; }; } declare interface RefreshInfo { pushstreamurl?: string; users?: RefreshUser[]; } declare interface RefreshUrlResult extends SignalingResult { pushstreamurl?: string; users?: RefreshUser[]; } declare interface RefreshUser { userid: string; subscribe: { pullstreamurl: string; }; } declare interface RemoteMediaTrackInfo extends MediaTrackInfo { subscribeState?: RemoteTrackSubscribeState; } declare class RemoteStreamInfo extends default_2 { /** * @ignore */ static logName: string; protected audioInfo: RemoteMediaTrackInfo; protected videoLargeInfo: RemoteMediaTrackInfo; protected videoSmallInfo: RemoteMediaTrackInfo; protected screenInfo: RemoteMediaTrackInfo; protected dataInfo: RemoteMediaTrackInfo; protected audioVolume: number; protected audioMuted: boolean; protected userStatus?: DeviceStatus; constructor(); /** * 远端流音频轨道信息 * @returns */ getAudioInfo(): RemoteMediaTrackInfo; /** * 远端流视频轨道信息 * @returns */ getVideoSmallInfo(): RemoteMediaTrackInfo; /** * 远端流视频轨道信息 * @returns */ getVideoLargeInfo(): RemoteMediaTrackInfo; /** * 远端流屏幕共享轨道信息 * @returns */ getScreenInfo(): RemoteMediaTrackInfo; getDataInfo(): RemoteMediaTrackInfo; get subscribingInfos(): RemoteMediaTrackInfo[]; get hasTrack(): boolean; /** * 远端流是否包含音频轨道 * @returns */ get hasAudio(): boolean; /** * 远端流是否包含视频轨道 * @returns */ get hasVideo(): boolean; /** * 远端流是否包含视频大流轨道 * @returns */ get hasVideoLarge(): boolean; /** * 远端流是否包含视频小流轨道 * @returns */ get hasVideoSmall(): boolean; /** * 远端流是否包含屏幕共享轨道 * @returns */ get hasScreen(): boolean; get hasData(): boolean; /** * 是否订阅远端流音频轨道 * @returns */ get isAudioSubscribed(): boolean; get isAudioSubscribing(): boolean; /** * 是否订阅远端流视频轨道 * @returns */ get isVideoSubscribed(): boolean; get isVideoSubscribing(): boolean; /** * 是否订阅远端流视频大流轨道 * @returns */ get isVideoLargeSubscribed(): boolean; get isVideoLargeSubscribing(): boolean; /** * 是否订阅远端流视频小流轨道 * @returns */ get isVideoSmallSubscribed(): boolean; get isVideoSmallSubscribing(): boolean; /** * 是否订阅远端流屏幕共享轨道 * @returns */ get isScreenSubscribed(): boolean; get isScreenSubscribing(): boolean; get isDataSubscribed(): boolean; get isDataSubscribing(): boolean; get audioCodec(): CodecType; get videoCodec(): CodecType; get audioTrackInfo(): AliRtcAudioTrack; get videoTrackInfo(): AliRtcVideoTrack; updateTracks(tracks?: TrackInfo[]): UpdateTracksResult; protected updateRemoteTrackSsrc(audioSsrc: string, videoLargeSsrc: string, videoSmallSsrc: string, screenSsrc: string, dataSsrc: string): void; markRemoteTrackSubscribing(option: SubscribeOptions): any; updateRemoteTrackSubState(option: SubscribeOptions): any; /** * 更新远端用户设备状态 * @param status * @returns {boolean} 状态改变返回true,否则返回false */ updateRemoteUserDeviceStatus(status: string): boolean; } declare interface RemoteSubscribeOptions { remoteUser: RemoteUser; options: SubscribeOptions; } declare enum RemoteTrackSubscribeState { NotSubscribe = 0, Subscribing = 1, Subscribed = 2 } declare class RemoteUser extends User { /** * @ignore */ static logName: string; remoteCallid: string; remoteUserInfo: AliRtcRemoteUserInfo; protected localUser?: LocalUser; protected lastPubId: string; protected stream?: RemoteStream; protected screenStream?: RemoteStream; private viewMap; private audioTrack?; private audioElement?; protected subscribed: boolean; protected mediaStream?: MediaStream; protected secondaryMediaStream?: MediaStream; protected prevSubConfig?: SubConfig; protected signalingManager: SignalingManager; protected slsReporter: SLSReporter; private wantSubAudio; private wantSubVideo; private wantSubScreen; private defaultVideoStreamType; private audioMuted; private playoutVolume; private playoutGainNode?; private audioSubState; private videoSubState; private videoLargeSubState; private videoSmallSubState; private screenSubState; private dataSubState; private dc; private dcMsgWaitingPieces; streamInfo: RemoteStreamInfo; private _streamUrl; private parameter; private monitorTimerId?; private monitorDataCache; private trackTraceIdMap; constructor(config: RemoteUserConfig); get streamUrl(): string; set streamUrl(value: string); isWantSubAudio(): boolean; setWantSubAudio(value: boolean): void; isWantSubVideo(): boolean; setWantSubVideo(value: boolean): void; isWantSubScreen(): boolean; setWantSubScreen(value: boolean): void; setRemoteDefaultVideoStreamType(type: AliRtcVideoStreamType): void; setAudioMuted(value: boolean): void; getAudioElement(): HTMLAudioElement | undefined; private handleAudioContextSuspended; setPlayoutVolume(value: number): void; getAudioMuted(): boolean; get hasAudioTrack(): boolean; get hasVideoTrack(): boolean; get hasVideoLargeTrack(): boolean; get hasVideoSmallTrack(): boolean; get hasScreenTrack(): boolean; get isAudioSubscribing(): boolean; get isVideoSubscribing(): boolean; get isVideoLargeSubscribing(): boolean; get isVideoSmallSubscribing(): boolean; get isScreenSubscribing(): boolean; get isDataSubscribing(): boolean; get audioEnabled(): boolean; get videoEnabled(): boolean; get screenEnabled(): boolean; get getAudioTrack(): MediaStreamAudioTrack | undefined; get getCameraStream(): RemoteStream | undefined; get getScreenStream(): RemoteStream | undefined; setViewConfig(view: AliRtcLocalView, track: AliRtcVideoTrack): void; /** * 销毁 * @returns {Promise} */ clear(needStopSub?: boolean): Promise; /** * 更新远端用户的设备状态 * @param {string} status * @returns {void} */ updateRemoteUserDeviceStatus(status: string): void; /** * 更新远端用户的推流状态,已经停止推流的 tracks 要 delete,或者整体 stop * @param {string} callid * @param {string} pullStreamUrl * @param {TrackInfo[]} tracks * @returns {Promise} */ updateRemoteTracks(callid: string, pullStreamUrl: string, _pubid: string, tracks?: TrackInfo[]): Promise; /** * 订阅远端流 * @param {SubscribeOptions} options * @returns {Promise} 返回可播放的 MediaStream,可能为空。如果同时订阅了主流和辅流,只会返回主流对应的 MediaStream */ subscribe(options?: SubscribeOptions, reason?: SubscribeReason, startTs?: number): Promise; /** * 订阅远端流 * @param {SubscribeOptions} options 订阅配置 * @param {boolean} secondary 是否订阅辅流 * @returns {Promise} */ private subscribeProxy; /** * 移除对某些轨道的订阅 * @param {UnSubscribeOptions} options 取消订阅轨道配置 * @returns {Promise} */ private subscribeDeleteTracks; /** * 移除对某些轨道的订阅 * @param {Partial} deleteTrack 删除订阅配置 * @returns {Promise} */ private subscribeDeleteProxy; /** * 用保存的订阅参数恢复订阅 */ restore(): void; resumeAudio(): Promise; resumeVideo(videoTrack?: AliRtcVideoTrack): Promise; resumePlay(): void; /** * 停止订阅远端流 * @param {string} userId * @param {UnSubscribeOptions} options * @returns {Promise} */ stopSubscribe(options?: UnSubscribeOptions): Promise; /** * 停止对某个拉流 URL 的订阅 * @param {url} pullStreamUrl * @returns {Promise} */ private doStopSubscribe; private updateStream; private updateScreenStream; private clearStream; private clearScreenStream; private onDataChannelMessage; private onDataChannelError; private dataChannelConnected; private subscribeDataChannel; private subscribeStopDataChannel; getRetryOptions(): RemoteSubscribeOptions | undefined; /** * 尝试更新订阅 * 1. 需要新增订阅的情况:想要订阅 & 没有正在订阅 & 远端有流 */ updateSubscribe(reason: SubscribeReason): { addOption: SubscribeOptions; deleteOption: SubscribeOptions; }; private handleAutoPlayFailed; private handleAudioPaused; private handleVideoPlayFailded; private playAudio; stopPlayAudio(): void; playAll(isScreen?: boolean, isReplace?: boolean): void; /** * 播放 */ private play; stopPlayAll(isScreen?: boolean): void; /** * 是否开启声音 * @param {boolean} enable * @returns {void} */ toggleAudio(enable?: boolean): void; /** * 是否开启画面 * @param {boolean} enable * @returns {void} */ toggleVideo(enable?: boolean): void; /** * 是否开启画面 * @param {boolean} enable * @returns {void} */ toggleScreen(enable?: boolean): void; getStats(): Promise<{ audio: AliRtcRemoteAudioStats[]; video: AliRtcRemoteVideoStats[]; }>; /** * 开启音量检测 * @param {number} interval 时间间隔 */ enableAudioVolumeIndication(interval: number): void; private reportSubscribeMonitor; private startStreamMonitor; /** * 停止本地流数据采集 */ private stopStreamMonitor; } declare interface RemoteUserConfig { userId: string; displayName: string; rtsManager: RtsManager; usersViewMap: { [key: string]: RemoteUserViewMap; }; slsReporter: SLSReporter; signalingManager: SignalingManager; localUser?: LocalUser; audioVolumeIndicationInterval: number; playoutVolume: number; parameter: { [key: string]: any; }; } declare interface RemoteUserMap { [userId: string]: RemoteUser; } declare interface RemoteUserStatus { userid: string; status: string; } declare interface RemoteUserViewMap { cameraViews: HTMLVideoElement[]; screenViews: HTMLVideoElement[]; } declare interface RoleForReconnectData { channelprofile?: AliRtcSdkChannelProfile; clientrole?: AliRtcSdkClientRole; } /** * RoomServerMessageCenter支持的事件 */ declare interface RoomServerListener { onJoinChannelResult: (data: any) => void; onPublishResult: (code: number, tid: string, description: string) => void; onNotifyJoin: (users: JoinInfo[]) => void; onNotifyStatus: (users: RemoteUserStatus[]) => void; onLeaveResult: (code: number, tid: string) => void; onRoleUpdateResult: (code: number, tid: string, description: string) => void; onRefreshUrlResult: (data: any) => void; onNotifyLeave: (users: LeaveInfo[]) => void; onNotifyPublish: (users: PublishUser[]) => void; onStatusReport: (code: number, tid: string, description: string) => void; onBye: (reason: AliRtcOnByeType, description: string) => void; onKeepAliveRsp: () => void; onConnectFail: (err: AliRtcError) => void; onNetworkError: (err: AliRtcError) => void; onAuthInvalid: () => void; onReconnectStart: () => void; onReconnectFail: (err: AliRtcError) => void; onReconnectSuccess: (users: JoinInfo[]) => void; onError: (err: AliRtcError) => void; } /** * RoomServer消息中心 * 负责发送和接收信令数据,消息重发、回复Response */ declare class RoomServerMessageCenter extends default_2 { static logName: string; protected authInfo: AliRtcAuthInfo; protected userName: string; protected channelProfile: AliRtcSdkChannelProfile; protected clientRole: AliRtcSdkClientRole; private slsReporter; protected wsClient: Socket; protected packageCreater: PackageCreater; protected keepAliveTimer: number; protected packageCache: Map; protected isFirstConnect: boolean; protected aliveChecker: number; protected reconnectData?: ReconnectData; constructor(authInfo: AliRtcAuthInfo, userName: string, channelProfile: AliRtcSdkChannelProfile, clientRole: AliRtcSdkClientRole, slsReporter: SLSReporter, maxConnectRetryCount?: number); get retryCount(): number; /** * 开始连接信令 * @param roomserverurl */ start(roomserverurl: string): void; /** * 开始心跳计时器,并自动发送心跳包 */ startKeepAlive(): void; /** * 停止心跳计时器 */ stopKeepAlive(): void; /** * 发送入会、重连前所缓存信息 */ sendPkgCache(): void; /** * 发送离开房间 */ leave(): void; /** * 透明通道消息上报 * @param status */ reportStatus(status: string): void; /** * 发送推流消息 */ publish(_pubInfo: PublishInfo): void; /** * 更新角色 */ roleUpdate(role: string): void; /** * 更新推拉流地址 * @param {RefreshInfo} info */ refreshUrl(info: RefreshInfo): void; refreshAuthInfo(authInfo: AliRtcAuthInfo): void; /** * 关闭websocket连接,并销毁 */ close(): void; /** * 通过此方法发送数据到业务信令 * 此方法会自动保存发送的package,并做重发. * response包不要通过此方法发送 * @param pkg */ protected sendPackage(pkg: ISendPackage): void; /** * 更新重连 payload * @param {ReconnectData} reconnectData */ updateReconnectData(reconnectData?: ReconnectData): void; /** * 收到websocket连接成功的消息 * ws连接建立成功后立刻发送join消息 */ protected onOpen(): void; /** * 收到业务信令消息 * @param event */ protected onMessage(event: MessageEvent): void; /** * 收到错误消息 * @param event */ protected onError(event: Event): void; /** * 连接失败 */ protected onConnectFail(): void; /** * 鉴权失败 */ protected onAuthInvalid(): void; /** * 网络异常 */ protected onNetworkError(): void; /** * 收到websocket断开消息 * @param event */ protected onClose(event: CloseEvent): void; protected onKeepAliveRsp(): void; protected onReconnectStart(): void; protected onReconnectFail(): void; /** * 处理 Keepalive 心跳,加速判断网络异常 */ protected checkAlive(): void; /** * 处理收到的业务信令 * @param response */ protected onRecvMessage(response: any): void; /** * 收到入会消息的response * @param response */ protected onJoinResult(response: any): void; /** * 收到离开消息的response * @param response */ protected onLeaveResult(response: any): void; /** * 收到publish消息的response * @param response */ protected onPublishResult(response: any): void; /** * 收到roleUpdate消息的response * @param response */ protected onRoleUpdateResult(response: any): void; /** * 收到 refreshurl 消息的response * @param response */ protected onRefreshUrlResult(response: any): void; /** * 收到重联消息的response * @param response */ protected onReconnectResult(response: any): void; /** * 收到业务信令下发的消息 * @param response */ protected onNotifyJoin(response: any): void; /** * 收到业务信令下发的透明通道消息 * @param response */ protected onNotifyStatus(response: any): void; /** * 收到远端用户离开的通知 * @param response */ protected onNotifyLeave(response: any): void; /** * 收到远端用户推流的通知 * @param response */ protected onNotifyPublish(response: any): void; /** * 收到statusreport的response * @param response */ protected onStatusReport(response: any): void; /** * 收到被踢出频道的消息 * @param {any} response */ protected onBye(response: any): void; } declare class RoomServerSignaling extends default_2 { /** * @ignore */ static logName: string; protected messageCenter?: RoomServerMessageCenter; protected authInfo?: AliRtcAuthInfo; protected userName?: string; protected channelProfile: AliRtcSdkChannelProfile; protected clientRole: AliRtcSdkClientRole; private slsReporter; protected reconnectData?: ReconnectData; protected roomServerUri: string; constructor(channelProfile: AliRtcSdkChannelProfile, clientRole: AliRtcSdkClientRole, slsReporter: SLSReporter, env?: AliRtcEnv); /** * 更新重连数据 * @param {ReconnectData} reconnectData */ private updateReconnectData; /** * 释放资源 */ reset(): void; /** * 加入频道 * @param {AliRtcAuthInfo} authInfo * @returns */ join(authInfo: AliRtcAuthInfo, userName: string, maxConnectRetryCount?: number): Promise; /** * 离开频道 * @returns */ leave(): Promise; /** * 开始推流 * @param pubInfo * @returns */ publish(pubInfo: PublishInfo): Promise; roleUpdate(role: AliRtcSdkClientRole): Promise; setChannelProfile(channelProfile: AliRtcSdkChannelProfile): void; /** * 更新推流地址 */ refreshUrl(info: RefreshInfo): Promise; /** * 上报设备状态 * @param status */ reportStatus(status: string): Promise; protected handleSignalError(code: number, description: string, errorCode?: AliRtcErrorCode): AliRtcError; refreshAuthInfo(authInfo: AliRtcAuthInfo): Promise; /** * 初始化MessageCenter,增加事件监听 */ protected initMessageCenter(): void; } declare class RtsManager extends default_2 { /** * @ignore */ static logName: string; private rts; private encodedInsertableStreams; private audioRedEnabled; private localStreamManager; private slsReporter; private _rtsReconnecting; private _rtsPeerConnectionType; private connecting; private connected; private _pcTraceId; private _localJoinTime; private connectionResolve?; private connectingPromise?; private dcResolve?; private dcReject?; private dcConnectingPromise?; private _publishingTracks; private parameter; constructor(localStreamManager: LocalStreamManager, slsReporter: SLSReporter, parameter: Parameter); private addRTSListener; /** * 更新鉴权信息,传入一个新的带鉴权的 URL,RTS 会去除鉴权信息做更新 * @param newUrlWithAuth */ updateAuth(newUrlWithAuth: string): void; get pcTraceId(): string; set localJoinTime(time: number); setEncodedInsertableStreams(enable: boolean): void; setAudioRedEnabled(enable: boolean): void; clear(): void; private startConnect; private setConnected; get isConnecting(): boolean; get isConnected(): boolean; get publishingTracks(): TrackInfo[]; private getPubMsid; private updatePublishingTracks; private httpPublish; waitPublishSender(streamUrl: string, isAudio?: boolean, msid?: string): Promise; getPublishVideoStats(streamUrl: string, msid?: string): Promise; getPublishAudioStats(streamUrl: string, msid?: string): Promise; publishAdd(streamUrl: string, stream: LocalStream, callId: string, extra?: PublishExtraParams, isResume?: boolean, waitSender?: boolean, reason?: PublishReason): Promise; publishDelete(streamUrl: string, options: PublishOptions): Promise; publishReplace(streamUrl: string, stream: LocalStream, extra?: PublishExtraParams): Promise; publishStop(streamUrl: string): Promise; publishAddDataChannel(streamUrl: string): Promise; publishStopDataChannel(streamUrl: string, datachannel: any): Promise; unpublish(): Promise; /** * 获取 sub/subAdd config * @param {ISubscribeConfig | ISubConfigItem} options * @returns {Omit} */ private getSubConfig; private httpSubscribe; private subscribeAdd; subscribeDelete(subscribeOptions: RemoteSubscribeOptions): Promise<{ url: string; stream: any; } | undefined>; subscibeStop(streamUrl: string): Promise; subscribeAddDataChannel(streamUrl: string): Promise; subscribeStopDatachannel(streamUrl: string, datachannel: any): Promise; publish(streamUrl: string, callId: string, isResume?: boolean, reason?: PublishReason): Promise<{ traceId: string; l1ip?: string; }>; private reportSubscribeLatency; subscribe(remoteSubscribeOptions: RemoteSubscribeOptions, reason: SubscribeReason, callId: string, remoteCallId: string, startTs: number): Promise; getSubscribeVideoStats(streamUrl: string, msid?: string): Promise; getSubscribeAudioStats(streamUrl: string, msid?: string): Promise; getStreamByMsid(config: any): LocalStream | RemoteStream; getDatachannelByMsid(config: { url: string; msid?: string; }): any; getPCStats(): Promise; sendSEI(streamUrl: string, data: ArrayBuffer, repeatCount: number, payloadType: number): Promise; } declare interface RtsManagerEventListener { reconnecting: (type: RtsPeerConnectionType) => {}; disconnected: () => {}; connected: (isReconnected: boolean, type: RtsPeerConnectionType) => {}; subscribeexceeds: () => {}; seimessage: (url: string, payloadType: number, data: ArrayBuffer) => {}; } declare enum RtsPeerConnectionType { PUBLISH = "publish", SUBSCRIBE = "subscribe" } declare interface SendPackageAuthInfo { timestamp: number; nonce?: string; token: string; tokenrole: AliRtcSdkTokenRole; } declare class SignalingManager extends default_2 { /** * @ignore */ static logName: string; protected signaling?: RoomServerSignaling; protected authInfo?: AliRtcAuthInfo; protected userName?: string; protected channelProfile: AliRtcSdkChannelProfile; protected clientRole: AliRtcSdkClientRole; protected env: AliRtcEnv; protected maxConnectRetryCount?: number; stsManager: StsManager; private slsReporter; constructor(channelProfile: AliRtcSdkChannelProfile, clientRole: AliRtcSdkClientRole, slsReporter: SLSReporter, env?: AliRtcEnv); reset(): void; /** * 向业务信令发送入会 * @param {AliRtcAuthInfo} authInfo * @returns */ join(authInfo: AliRtcAuthInfo, userName?: string, maxConnectRetryCount?: number, timeRecorder?: TimeRecorder): Promise; retryJoin(): void; /** * 向业务信令发送离会 * @returns */ leave(): Promise; /** * 推流 * @param pubInfo * @returns */ publish(pubInfo: PublishInfo): Promise; /** * 通过透明通道发送设备状态 * @param {string} status * @returns */ reportStatus(status: string): Promise; /** * 切换角色 * @param {AliRtcSdkClientRole} role * @returns */ setClientRole(role: AliRtcSdkClientRole): Promise; /** * 切换模式 * @param {AliRtcSdkChannelProfile} channelProfile */ setChannelProfile(channelProfile: AliRtcSdkChannelProfile): void; /** * 更新推流url * @param {RefreshInfo} info * @returns */ refreshUrl(info: RefreshInfo): Promise; refreshAuthInfo(authInfo: AliRtcRefreshAuthInfo): Promise; /** * 监听业务信令相关的事件 */ protected initSignaling(): void; /** * 收到心跳消息 */ protected onKeepAliveRsp(): void; /** * 收到远端用户入会消息 * @param {JoinInfo[]} users */ protected onNotifyJoin(users: JoinInfo[]): void; /** * 收到远端用户的透明通道消息 * @param {RemoteUserStatus[]} users */ protected onNotifyStatus(users: RemoteUserStatus[]): void; /** * 收到远端用户的离会消息 * @param {LeaveInfo[]} users */ protected onNotifyLeave(users: LeaveInfo[]): void; /** * 收到远端用户推流状态变化消息 * @param {PublishInfo[]} users */ protected onNotifyPublish(users: PublishUser[]): void; /** * 收到被踢掉消息 * @param {string} reason * @param {string} description */ protected onBye(reason: AliRtcOnByeType, description: string): void; /** * 收到连接失败消息 * @param {AliRtcError} err */ protected onConnectFail(err: AliRtcError): void; /** * 收到网络异常消息 * @param {AliRtcError} err */ protected onNetworkError(err: AliRtcError): void; /** * 收到网络异常消息 */ protected onAuthInvalid(): void; protected onReconnectStart(): void; /** * 收到重连成功消息 * @param {JoinInfo[]} users */ protected onReconnectSuccess(users: JoinInfo[]): void; /** * 收到重连失败消息 */ protected onReconnectFail(err: AliRtcError): void; /** * 收到错误消息 * @param {AliRtcError} err */ protected onError(err: AliRtcError): void; } declare interface SignalingResult { tid: string; code?: number; message?: string; } /** * 日志埋点类 * 每个埋点暴露对应的接口 */ declare class SLSReporter { private engine; protected logClient: LogClient; protected authInfo?: AliRtcAuthInfo; private ntpClock; private static staticClient; private static getLogClient; static reportOSSUpload(sessionId: string, date: string, responseCode?: number): void; constructor(engine: WrappedAliRtcEngine); private customFields; /** * 设置通用字段 * @param fields 字段键值对 */ setCustomFields(fields: { [key: string]: any; }): void; /** * 获取通用字段 * @param key 字段键 * @returns 字段值或undefined */ getCustomField(key: string): any; /** * 开始建立连接 * @param authInfo */ start(info: AliRtcAuthInfo): void; updateToken(token: SLSSTSToken, ossToken?: OSSSTSToken): void; /** * 断开连接 */ stop(): void; reportPublishMonitor(callId: string, traceId: string, msid: string, track: MediaStreamTrack | undefined, stats: any[]): void; reportSubscribeMonitor(callId: string, remoteId: string, traceId: string, msid: string, stats: any[]): void; reportNetworkMonitor(candidates: any[]): void; /** * 加入房间成功埋点 * @param {number} joinTime * @param {number} result * @param {string} tid */ reportJoin(result: number, timeRecord: TimeRecorder, tid?: string): void; /** * Join 链接细节 */ reportJoinConnection(logInfo: LogInfo): void; /** * 用户离开频道事件埋点 * @param {number} leaveTime * @param {number} result * @param {string} tid */ reportLeave(leaveTime: number, result: number, tid: string): void; /** * 推流事件上报 * @param {string} callid * @param {boolean} isLargeVideo * @param {boolean} isSmallVideo * @param {boolean} isScreenShare * @param {boolean} isAudio * @param {number} result * @param {string} tid * @param {number} pubTime */ reportPublish(isRepublish: boolean, url: string, callid: string, isLargeVideo: boolean, isSmallVideo: boolean, isScreenShare: boolean, isAudio: boolean, result: number | undefined, pcTraceId: string, traceId: string, startTime: number): void; /** * 首包上报 * @param {string} callid * @param {number} startTime * @param {number} publishTime * @param {number} joinTime * @param {string} tckid * @param {string} pcTraceId * @param {string} traceId * @param {PublishReason} reason */ reportPublishFirstPacket(isRepublish: boolean, callid: string, startTime: number, publishTime: number, joinTime: number, tckid: string, pcTraceId: string, traceId: string, reason: PublishReason): void; /** * 停止推流事件上报 * @param {string} callid * @param {number} unpubTime * @param {number} result * @param {string} tid */ reportUnpublish(callid: string, unpubTime: number, result: number, tid: string): void; /** * 订阅事件埋点 * @param {string} callid * @param {string} remoteid * @param {boolean} isLargeVideo * @param {boolean} isSmallVideo * @param {boolean} isScreenShare * @param {boolean} isAudio * @param {number} result * @param {string} tid * @param {number} subTime */ reportSubscribe(callid: string, remoteid: string, isLargeVideo: boolean, isSmallVideo: boolean, isScreenShare: boolean, isAudio: boolean, result: number, tid: string, subTime: number, logInfo: LogInfo): void; reportSubscribeFirstPacket(isResume: boolean, callid: string, remoteid: string, trackId: string, logInfo: LogInfo): void; reportSubscribeFirstFrame(isResume: boolean, callid: string, remoteid: string, trackId: string, logInfo: LogInfo): void; /** * 停止订阅事件埋点 * @param {string} callid * @param {string} remoteid * @param {number} unsubTime * @param {number} result * @param {string} tid */ reportUnsubscribe(callid: string, remoteid: string, unsubTime: number, result: number, tid: string): void; reportMute(callid: string, enable: boolean, type: 'audio' | 'video' | 'screen'): void; /** * 更新角色埋点 * @param {string|undefined} or 旧的角色 * @param {string} nr 新的角色 */ reportRoleUpdate(or: string | undefined, nr: string): void; /** * 更新角色埋点 * @param {string|undefined} or 旧的角色 * @param {string} nr 新的角色 */ reportRoleUpdateResult(or: string | undefined, nr: string, ctm: number, result: number): void; /** * 设置camera videoprofile */ reportVideoProfile(profile: string): void; /** * 设置screenshare videoprofile */ reportScreenProfile(profile: string): void; /** * 错误事件埋点 * @param err */ reportError(err: any): void; /** * 错误事件埋点 * @param err */ reportWarning(msg: string): void; reportRoomServerEvent(isRequest: boolean, type: string, requestId: string, content: any): void; reportTranscodingError(result: number, taskid: string): void; reportBye(result: number): void; reportAudio(error: any, cost: number, deviceName: string): void; reportScreen(error: any, cost: number): void; reportScreenStop(error: any): void; reportSwitchCamera(deviceId: string): void; reportPublishProfile(trackId: string, logInfo: LogInfo): void; reportSDKCreated(startTs: number): void; reportJoinInvoked(authInfo: AliRtcAuthInfo): void; reportJoinResult(error: any): void; reportSTSResult(code: number, startTs: number): void; reportLeaveInvoked(): void; reportSEIMessage(payloadType: number, length: number, repeatCount: number, delay: number, isKey: boolean): void; /** * 接通耗时事件(12001) * 用stage和status来区分接通过程中各个时间节点。 * @param state * @param status * @param calid * @param tckid */ reportConnectionLatencyEvent(stage: Stage, status: ValidStatusMap[Stage], calid: string, tckid: string, tm?: number, ntptm?: number, http?: boolean): void; /** * 日志埋点 * 在埋点中增加tm字段,表示发生埋点的客户端本地时间 * @param {any} param 埋点内容 */ protected log(param: any): void; /** * 将Object转换成string * @param {any} data * @returns {string} */ protected data2String(data: any): string; } declare interface SLSSTSToken { access_key_id: string; access_key_secret: string; expiration: number; log_store_debug: string; log_store_stats: string; project: string; region_endpoint: string; security_token: string; } declare interface SLSToken { access_key_id: string; access_key_secret: string; security_token: string; region_endpoint: string; project: string; log_store_stats: string; log_store_debug: string; expiration: number; } /** * Websocket类 */ declare class Socket extends default_2 { /** * @ignore */ static logName: string; protected ws?: WebSocket; protected socketStatus: CONNECTSTATUS; protected wsUrl: string; protected lastConnectStartTime: number; protected maxConnectRetryCount: number; connectRetryCount: number; protected gotErr: boolean; protected closedByInvoke: boolean; protected isReconnecting: boolean; protected networkAvailableChecked: boolean; private reconnectTimeoutId; constructor(maxConnectRetryCount?: number); get connectUrl(): string; /** * 返回websocket连接的状态 */ get connectStatus(): CONNECTSTATUS; /** * 开始连接 * @param wsUrl */ start(wsUrl: string): void; /** * 发送消息 * @param pkg */ send(pkg: ISendPackage | IResponse): boolean; /** * 主动断开连接 */ close(): void; reconnect(): void; /** * 连接成功 * @param event */ protected onOpen(event: Event): void; /** * 收到消息 * @param event */ protected onMessage(event: MessageEvent): void; /** * 收到错误 * @param event */ protected onError(event: Event): void; /** * 连接断开 * @param event */ protected onClose(event: CloseEvent): Promise; /** * 初始化websocket */ protected initWebSocket(): void; /** * 反初始化websocket */ protected uninitWebsocket(): void; } /** * Socket的支持的事件 */ declare interface SocketListener { onOpen: (event: Event) => void; onMessage: (event: MessageEvent) => void; onError: (event: Event) => void; onClose: (event: CloseEvent) => void; onConnectFail: () => void; onAuthInvalid: () => void; onNetworkError: () => void; onReconnectStart: () => void; onReconnectFail: (event: Event) => void; } declare interface StopPreviewConfig { videoElement?: HTMLVideoElement; primary?: boolean; screen?: boolean; } declare type StopPublishOptions = StreamOptions; declare interface StreamListener { [DeviceStatusChange.Remote]: (event: DeviceStatusChangeType) => void; error: (err: AliRtcError) => void; } declare interface StreamOptions { audio?: boolean; video?: boolean; screen?: boolean; data?: boolean; } declare class StsManager extends default_2 { static logName: string; private env; private authInfo?; private timer?; private slsReporter; private expiration; private skipTime; constructor(slsReporter: SLSReporter, env: AliRtcEnv); refreshAuthInfo(authInfo: AliRtcAuthInfo): void; private requestToken; startSTSUpdate(authInfo: AliRtcAuthInfo): void; clear(): void; } declare interface StsManagerListener { onTokenUpdate: (ossToken: OSSToken, slsToken: SLSToken) => void; } declare interface SubConfig { isAudioSubscribing: boolean; isVideoSubscribing: boolean; isScreenSubscribing: boolean; audioEnabled: boolean; videoEnabled: boolean; screenEnabled: boolean; } declare type SubscribeOptions = StreamOptions & { aMsid?: string; vMsid?: string; }; declare enum SubscribeReason { InRoom = "inRoom", Join = "join", Publish = "publish", User = "user", Resume = "resume", Retry = "retry", Reconnect = "reconnect" } declare interface TimeRecorder { start: number; [key: string]: number; } declare enum TrackEvent_2 { VideoTrackEnded = "videoTrackEnded", AudioTrackEnded = "audioTrackEnded", ScreenTrackEnded = "screenTrackEnded" } declare interface TrackInfo { ssrc: string; codec: string; msid?: MsidType; type: string; from?: string | undefined; userdata?: string; trackId?: string; attr?: Record; pt?: number; } declare type UnSubscribeOptions = SubscribeOptions; declare interface UpdateTracksResult { restoreSub?: boolean; } declare class User extends default_2 { protected uid: string; protected name: string; protected rtsManager: RtsManager; callId: string; protected audioLevelMonitor: AudioLevelMonitor; protected audioVolumeIndicationInterval: number; constructor(userId: string, displayname: string, rtsManager: RtsManager, interval: number); get userId(): string; get displayname(): string; protected createCallId(): void; setUserInfo(uid: string, displayName: string): void; refreshUserInfo(uid: string): void; /** * 获取音频 level */ getAudioLevel(): number; enableAudioVolumeIndication(interval: number): void; /** * 销毁用户,清空数据 */ clear(): void; } declare interface UserListener { [DeviceStatusChange.Local]: (status: string) => void; [DeviceStatusChange.Remote]: (event: DeviceStatusChangeType, userId: string) => void; [ClientEventType.PullStreamStats]: (userId: string, stat: any, pullStreamUrl: string) => void; [ClientEventType.RtsSubscribeExceeds]: (userId: string, options?: SubscribeOptions) => void; [TrackEvent_2.VideoTrackEnded]: () => void; [TrackEvent_2.AudioTrackEnded]: () => void; [TrackEvent_2.ScreenTrackEnded]: () => void; remoteTrackAvailableChange: (uid: string, aliRtcAudioTrack: AliRtcAudioTrack, aliRtcVideoTrack: AliRtcVideoTrack) => void; audioSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number) => void; videoSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number) => void; screenSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number) => void; dataSubscribeStateChanged: (uid: string, oldState: AliRtcSubscribeState, newState: AliRtcSubscribeState, elapseSinceLastState: number) => void; audioPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number) => void; videoPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number) => void; dualStreamPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number) => void; screenPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number) => void; dataPublishStateChanged: (oldState: AliRtcPublishState, newState: AliRtcPublishState, elapseSinceLastState: number) => void; localDeviceException: (localDeviceType: AliRtcEngineLocalDeviceType, localDeviceExceptionType: AliRtcEngineLocalDeviceExceptionType, description: string) => void; publishDataError: (error: AliRtcError) => void; remoteAudioAutoPlayFail: (uid: string) => void; remoteVideoAutoPlayFail: (uid: string, track: AliRtcVideoTrack) => void; remoteAudioPlayError: (uid: string, reason?: string) => void; remoteVideoPlayError: (uid: string, reason?: string) => void; remoteSubscribeError: (error: AliRtcError) => void; occurError: (error: AliRtcError) => void; remoteDataChannelMessage: (uid: string, message: AliRtcDataChannelMsg) => void; } declare type ValidStatusMap = { [ConnectionLatencyStage.CREATE_ENGINE]: ConnectionLatencyStatus.START | ConnectionLatencyStatus.END; [ConnectionLatencyStage.JOIN]: ConnectionLatencyStatus.START | ConnectionLatencyStatus.SEND_SIG | ConnectionLatencyStatus.RECV_RST | ConnectionLatencyStatus.END; [ConnectionLatencyStage.FIRST_REMOTE]: ConnectionLatencyStatus.RECEIVED | ConnectionLatencyStatus.DECODED | ConnectionLatencyStatus.PLAYED; [ConnectionLatencyStage.RECV_NOTIFY_PUBLISH]: any; [ConnectionLatencyStage.HANDLE_PUB_TASK]: ConnectionLatencyStatus.START | ConnectionLatencyStatus.END; [ConnectionLatencyStage.HANDLE_SUB_TASK]: ConnectionLatencyStatus.START | ConnectionLatencyStatus.END; }; declare type VideoProfileWithSendFramerate = Partial; declare interface VideoScaler { getVideoTrack: () => MediaStreamTrack; updateOptions: (options: VideoScalerOptions) => void; dispose: () => void; } declare class VideoScalerFactory { static isSupport(): boolean; /** * 获取实例 * @param {MediaStreamTrack} videoTrack * @param {IProfile} profile * @return {VideoScaler} */ static getInstance(videoTrack: MediaStreamTrack, options: VideoScalerOptions): VideoScaler; } declare interface VideoScalerOptions { width: number; height: number; frameRate: number; } declare enum VideoStreamSource { Camera = 0, Screen = 1, Image = 2 } declare const WrappedAliRtcEngine: typeof AliRtcEngine_2; declare type WrappedAliRtcEngine = InstanceType; export { WrappedAliRtcEngine as AliRtcEngine } export default WrappedAliRtcEngine; export { }