import { default as Logger } from '../../tools/log/logger'; import { XYEmitter } from '@xylink/xy-toolkit'; import { IDeviceInfo, IDeviceList, ICurrentPermission, PermissionType, FacingMode, DEVICE_KIND, IDeviceId, ISetSpecDevice, IUsedDeviceParams, ISpecStateParams, XYDeviceEventKey, XYDeviceMode } from '../../type/index'; /** * DeviceManager模块,用于管理枚举设备列表、监听设备变动、处理设备权限等功能 * * @class DeviceManager * @extends XYEmitter 事件发送器 */ declare class DeviceManager extends XYEmitter { private navigator; logger: Logger; isNewLogger: boolean; private currentPermission; private permissionCameraStatus; private permissionPhoneStatus; private previousDeviceList; private currentDeviceList; private fullDeviceList; private systemDefaultDevice; private specifiedDevice; private usedDeviceId; private cacheUsedDeviceId; private systemDefaultDeviceId; private specifiedDefaultDeviceId; private deviceLabelMap; private currentDeviceMode; private onDeviceChangeEvent; private onUpdateFullDeviceList; constructor(logger?: Logger); /** * 获取设备权限数据 */ getDevicePermission(): ICurrentPermission; /** * 初始化设备列表和设备权限状态及监听事件 * * 调用时机:MakeCall时调用、当前实例被创建时 */ initDeviceAndPermission(): Promise; /** * 设置当前设备模式 * * @param { DEVICE_KIND } kind - 设备类型 * @param { XYDeviceMode } mode - 设备模式 */ setCurrentDeviceMode(kind: DEVICE_KIND, mode: XYDeviceMode): this; /** * 计算并缓存系统默认、指定设备两种类型设备的默认值 * * @param { DEVICE_KIND } kind - 设备类型 */ calculateDefaultDevice(kind: DEVICE_KIND): void; /** * 计算并缓存系统默认、指定设备两种类型设备的默认值 * * @param { IDefaultDeviceIdParams } params - 初始化参数 * @returns { systemDefaultDevice, specifiedDefaultDevice } - 默认设备、指定默认设备的值 */ private getDefaultDeviceImpl; /** * Diff新旧设备列表,寻找到可用的默认设备 * * 如果是新增设备,则diff设备列表,找到第一个最新的设备 * * @param { IDeviceInfo[] } preDeviceList - 上一次的设备列表 * @param { IDeviceInfo[] } curDeviceList - 最新的设备列表 * @return { IDeviceInfo | null } 默认设备 */ private diffDefaultDevice; /** * 获取默认设备ID数据 * * 区分两种类型: * 1、系统默设备模式,则获取系统默认设备 * 2、指定设备模式,则根据指定设备获取对应默认分配的设备 */ getDefaultDeviceId(): IDeviceId; /** * 获取采集音视频流时需要指定的设备信息 */ getCaptureDeviceId(): IDeviceId; /** * 缓存用户选择的设备数据,也可用作判断用户是否选择:默认系统设备 * 注意:如果用户设置的DeviceID不存在,也会持久缓存,不会做设备真实性校验 * * @param { ISetSpecDevice } deviceList - 需要指定的设备信息 */ setSpecifiedDeviceId(deviceList: ISetSpecDevice[]): void; /** * 标记指定设备时采集此设备的状态 * * @param { ISpecStateParams[] } stateList - 批量更新指定设备采集状态 */ setSpecifiedDeviceState(stateList: ISpecStateParams[]): void; /** * 基于MediaStream获取真实的设备信息,更新到设备列表 * * @param { IUsedDeviceParams } deviceList - 正在使用的设备信息,可以提供一组数据 */ updateUsedDeviceId(deviceList: IUsedDeviceParams[]): Promise; /** * 获取指定ID对应的真实DeviceId值 * * @param { IDeviceInfo[] } deviceList - 全量设备列表 * @param { string } deviceId - 指定设备ID * @param { string } defaultId - 默认设备ID * @returns { string } 设备ID */ private getReallyDeviceIdById; /** * 获取指定ID对应的真实DeviceId值 * * @param { DEVICE_KIND } kind - 设备类型 * @param { string } deviceId - 指定设备ID * @returns { string } 设备ID */ getReallyDeviceId(kind: DEVICE_KIND, deviceId: string): string; /** * 更新全量设备列表 */ updateFullDeviceList(): Promise; /** * 设置输出设备 * * @param { HTMLAudioElement } element - Audio元素节点 * @param { string } deviceId - 切换的设备ID,可能包含DEFAULT设备 */ setAudioOutputDevice(element: HTMLAudioElement, deviceId: string): Promise; /** * 更新指定设备的状态 */ private resetSpecifiedDeviceState; /** * 获取基础设备列表 * 注意:不包含DEFAULT系统默认设备,会在最后一步合并 * * @returns { Promise } 过滤无效后的基础设备列表 */ private createBaseDeviceList; /** * 获取基础的设备列表 * * @return { Promise } 设备列表 */ getOriginDeviceList(): Promise; /** * 过滤虚拟设备和通讯设备 * * @param { IDeviceList } deviceList - 设备列表 */ private filterInvalidDevice; /** * 过滤默认设备,并将默认设备对应的真实设备找到并缓存 * * @param { IDeviceList } deviceList - 设备列表 */ private filterDefaultDevice; private filterDevice; /** * 追加系统默认设备选项 */ private appendSystemDefaultDevice; /** * 缓存默认设备对应的真实设备数据 * 从BaseDeviceList中寻找到default设备对应的真实设备 * * @param { IDeviceInfo } defaultDevice - 默认设备 * @param { IDeviceInfo[] } deviceList - 设备列表 */ private setDefaultDevice; /** * 更新最新的设备列表中的选中状态(isSelected),元配置数据(originLabel, originDeviceId) */ private updateFullDeviceListStatus; /** * 基于各状态更新最终的设备状态信息 * * @param { IDeviceInfo[] } devices - 全量设备列表 * @param { ISpecifiedDeviceConfig } specifiedDevice - 指定的设备信息 * @param { string } usedId - 正在使用的设备信息 * @param { string } defaultId - 两种模式的默认设备信息 * @param { string } systemDefaultDeviceId - 系统默认设备 * @returns */ private updateDevice; /** * 通过DeviceId获取设备详情信息 * * @param { IDeviceInfo[] } devices - 全量设备列表 * @param { string } deviceId - 设备ID * @returns { IDeviceInfo | null } 设备信息 */ private getDeviceByDeviceId; /** * 通过对比,获取到即将切换的设备数据 * * @returns { ISelectedDevice } 即将切换的设备 */ private createNextDevice; /** * 更新计算系统默认和指定默认设备数据 */ private updateDefaultDeviceId; /** * 创建全量设备列表 */ private createFullDeviceList; /** * 设备变化监听函数 */ private onDeviceChange; /** * 初始化设备监听函数 */ private initDeviceEvent; /** * 移除设备监听函数 */ private removeDeviceEvent; /** * 获取手机前置/后置摄像头 * * @param { FacingMode } type - 摄像头类型,可选:FRONT、BACK,分辨是前置摄像头还是后置摄像头 * @returns { IDeviceInfo } 摄像头信息 */ getCameraDeviceByMode(type: FacingMode): Promise; /** * 设置当前麦克风/摄像头权限 * * @param { ICurrentPermission } permission - 新的权限状态 */ setDevicePermission(permission: ICurrentPermission): void; /** * 通过采集能力更新设备权限 * * @param { PermissionType } video - 摄像头权限 * @param { PermissionType } audio - 麦克风权限 */ updateDevicePermission(video: PermissionType, audio: PermissionType): void; /** * 查询权限接口 * * @param { 'microphone' | 'camera' } type - 需要检测的设备类型 */ private query; /** * 监听权限变更 * * @param { * } e - 权限变动事件 */ private handlePermissionCameraStateChanged; /** * 【私有方法】 * 监听权限变更 * * @param e 回调权限数据 */ private handlePermissionPhoneStateChanged; /** * 初始化摄像头和麦克风权限和监听事件 */ bindDevicePermissionEvent(): Promise; /** * 销毁设备管理器实例 */ destroy(): void; } export default DeviceManager;