import Bowser$1 from 'bowser';
import EventEmitter from 'events';

declare abstract class BaseSRTC {
	/**
	 * 获取sdk编译信息
	 */
	abstract buildInfo(): BuildInfo;
	/**
	 * 获取运行环境信息
	 * @returns
	 */
	abstract getEnvInfo(): any;
	/**
	 * 频道事件通知回调
	 */
	onNotifyChannelEvent?: ((event: ChannelEvent) => void) | null;
	/**
	 * 频道外im事件通知回调
	 */
	onNotifyImEvent?: ((event: ImEvent) => void) | null;
	constructor(initParams: SdkInitParams);
	/**
	 * 加入频道的version信息
	 */
	protected get joinVersion(): string;
	/**
	 * 加入频道
	 * @param token 加入频道token
	 */
	join(token: string): Promise<BaseChannelInfo>;
	/**
	 * 离开频道
	 */
	leave(): Promise<void>;
	/**
	 * 获取频道信息
	 * @returns
	 */
	getChannelInfo(): BaseChannelInfo | null;
	/**
	 * 获取流媒体引擎的metric快照
	 * @returns
	 */
	getStreamMetric(): Record<string, any> | undefined;
	/**
	 * 获取某用户信息
	 * @returns
	 */
	getUserInfo(uid: string): BaseUserInfo;
	/**
	 * 获取频道内用户信息列表
	 * @returns
	 */
	getUsersInfo(map: true): Record<string, BaseUserInfo>;
	getUsersInfo(map: false): BaseUserInfo[];
	/**
	 * 订阅远端频道混音流
	 * @param filterUids 过滤音频的用户id
	 */
	subscribeRemoteAudioMixTrack(filterUids?: string[]): Promise<BaseTrack>;
	/**
	 * 订阅远端用户音频流
	 * @param uid 用户id
	 * @param id 流轨道id
	 */
	subscribeRemoteAudioTrack(uid: string, id: string): Promise<BaseTrack>;
	/**
	 * 订阅远端视频合成流
	 */
	subscribeRemoteVideoMcuTrack(): Promise<BaseTrack>;
	/**
	 * 订阅远端用户视频流
	 * @param uid 用户id
	 * @param id 流轨道id
	 */
	subscribeRemoteVideoTrack(uid: string, id: string): Promise<BaseTrack>;
	/**
	 * 取消订阅远端流
	 */
	unsubscribeRemoteTrack(track: BaseTrack): Promise<void>;
	/**
	 * 获取远端用户音视频流实例，一般用于订阅流后您没有持有返回的流实例，可以用此方法获取对应实例
	 * @param uid 用户id
	 * @param id 流轨道id，与desc二选一
	 * @param desc 流描述，与id二选一
	 */
	getRemoteTrack(uid: string, id?: string, desc?: string): BaseTrack;
	/**
	 * 启用频道外消息
	 * @param token 启用频道外消息token
	 * @returns im会话sid
	 */
	enableIm(token: string): Promise<string>;
	/**
	 * 关闭频道外消息
	 */
	disableIm(): Promise<void>;
}
declare abstract class BaseTrack extends EventEmitter {
	constructor(info: BaseTrackInfo, uid: string);
	/**
	 * 轨道id
	 */
	get id(): string;
	/**
	 * 轨道类型
	 */
	get kind(): TrackKind;
	/**
	 * 轨道描述
	 */
	get desc(): string;
	/**
	 * 获取流轨道信息
	 * @returns
	 */
	getInfo(): BaseTrackInfo;
	/**
	 * 轨道所属用户
	 * @returns
	 */
	getUid(): string;
	toString(): string;
}
declare abstract class BaseWebrtcTrack extends BaseTrack {
	constructor(info: BaseTrackInfo, uid: string);
	setMediaStreamTrack(mediaStreamTrack?: MediaStreamTrack): void;
	getMediaStreamTrack(): MediaStreamTrack | undefined;
}
declare class CommonChannelEventType {
	/** 频道自定义props更新，对应data为ChannelInfo */
	static readonly CHANNEL_UPDATE = "channel_update";
	/** 首次加入频道成功，对应data为ChannelInfo */
	static readonly JOIN_SUCCEED = "join_succeed";
	/** 自己信息被改变，对应data为UserInfo */
	static readonly ME_UPDATE = "me_update";
	/** 开始断线自动重连，无data */
	static readonly RECONNECTING = "reconnecting";
	/** 重连成功，断线重连成功后会触发 */
	static readonly RECONNECTED = "reconnected";
	/** 自己被强制离开频道，对应data为DisconnectEventData */
	static readonly DISCONNECTED = "disconnected";
	/** 其他用户加入频道，对应data为UserInfo */
	static readonly USER_JOIN = "user_join";
	/** 其他用户信息改变，对应data为UserInfo */
	static readonly USER_UPDATE = "user_update";
	/** 其他用户离开频道，对应data为UserLeaveEventData */
	static readonly USER_LEAVE = "user_leave";
	/** 其他用户发布流轨道，对应data为{ user: UserInfo, track: TrackInfo } */
	static readonly USER_TRACK_ADD = "user_track_add";
	/** 其他用户更新流轨道，对应data为{ user: UserInfo, track: TrackInfo } */
	static readonly USER_TRACK_UPDATE = "user_track_update";
	/** 其他用户删除流轨道，对应data为{ user: UserInfo, track: TrackInfo } */
	static readonly USER_TRACK_REMOVE = "user_track_remove";
	/** 频道内自定义消息，对应data为CustomMsgData */
	static readonly CUSTOM_MSG = "custom_msg";
	/** 流轨道没有数据，对应data为BaseTrack */
	static readonly TRACK_MUTED = "track_muted";
	/** 流轨道恢复数据，对应data为BaseTrack */
	static readonly TRACK_UNMUTED = "track_unmuted";
	/** 流轨道停止，对应data为BaseTrack */
	static readonly TRACK_ENDED = "track_ended";
}
/** 频道外事件类型 */
declare class CommonImEventType {
	/** 首次连接im成功，无data */
	static readonly ENABLE_SUCCEED = "enable_succeed";
	/** im开始断线自动重连，无data */
	static readonly RECONNECTING = "reconnecting";
	/** im重连成功，断线重连成功后会触发 */
	static readonly RECONNECTED = "reconnected";
	/** 自己被强制断开im，对应data为ImDisconnectEventData */
	static readonly DISCONNECTED = "disconnected";
	/** im消息，对应data为ImMsgData */
	static readonly IM_MSG = "im_msg";
}
declare class Logger {
	constructor(dp?: string, dclt?: string);
	setTarget(target: LogTarget): void;
	setLevel(level: LogLevel): void;
	debug(...args: any[]): void;
	info(...args: any[]): void;
	warn(...args: any[]): void;
	error(...args: any[]): void;
}
declare class RemoteVideoMcuTrack extends RemoteVideoTrack {
	constructor(info: BaseTrackInfo);
}
declare class SdkError {
	/** 错误码 */
	code: number;
	/** 错误详情 */
	msg: string;
	/** 获取前缀错误码 */
	protected prefixCode(): string;
	constructor(msg: string, code?: number);
	/**
	 * 从err转化为sdkError
	 * @param err 原始error
	 * @returns
	 */
	static fromError(err: Error): SdkError;
	toString(): string;
	toJSON(): {
		code: number;
		msg: string;
	};
}
declare enum Codec {
	/** 未知编码类型 */
	Unknown = 0,
	/** h264编码 */
	H264 = 27,
	/** h265编码 */
	H265 = 36,
	/** AAC编码 */
	AAC = 15,
	/** OPUS编码 */
	OPUS = 1398100047
}
declare function dateFormat(format: string, date?: Date): string;
declare function dct(t: string): any;
declare function genNonce(len?: number): string;
declare function getHostnameFromUrl(url: string): string;
declare function isObject(value: any): boolean;
declare function isString(value: any): boolean;
declare function isWxxcx(): boolean;
declare function propAssign<T>(target: T, income: T, assigner?: Record<keyof T, (value: any, old: any) => void>): PropChangeItem<keyof T>[];
declare function retry<T>(f: () => Promise<T>, opt: {
	/** 首次执行失败后的最大重试次数，默认10次，<=0代表不限制次数 */
	maxRetries?: number;
	/** 第一次重试间隔(ms)，默认500ms，之后会以 initialDelay * 2^n 进行重试 */
	initialDelay?: number;
	/** 每次重试前的回调，e为上次失败catch到的错误，返回false则代表放弃重试，会返回canceled */
	onRetry?: (attempt: number, e?: any) => boolean | void;
}): retryCallback<T>;
declare function sleep(ms: number): Promise<void>;
/** 频道事件通知 */
export declare class ChannelEvent {
	/** 事件类型 */
	type: CommonChannelEventType;
	/** 事件携带的数据 */
	data?: any;
	constructor(type: CommonChannelEventType, data?: any);
}
/** 扩展的频道事件 */
export declare class ChannelEventType extends CommonChannelEventType {
	/** 外设插入，对应data为MediaDeviceInfo */
	static readonly DEVICE_ADD = "device_add";
	/** 外设移除，对应data为MediaDeviceInfo */
	static readonly DEVICE_REMOVE = "device_remove";
	/** 轨道自动播放失败，对应data为BaseTrack */
	static readonly TRACK_AUTOPLAY_FAIL = "track_autoplay_fail";
}
/** 频道外事件通知 */
export declare class ImEvent {
	/** 事件类型 */
	type: CommonImEventType;
	/** 事件携带的数据 */
	data?: any;
	constructor(type: CommonImEventType, data?: any);
}
/**
 * 本地音频流轨道
 */
export declare class LocalAudioTrack extends BaseWebrtcTrack {
	constructor();
	/**
	 * 获取音量
	 */
	getVolume(): number;
	/**
	 * 播放音频(可指定播放设备)
	 */
	startPlay(opt?: AudioOutputOptions): Promise<void>;
	/**
	 * 停止播放并释放对播放设备的占用
	 */
	stopPlay(): void;
}
/**
 * 本地摄像头视频流轨道
 */
export declare class LocalCameraTrack extends LocalVideoTrack {
	constructor(captureOptions: CameraCaptureOptions);
	/**
	 * 开始采集
	 * @param opt 采集参数
	 */
	startCapture(opt?: CameraCaptureOptions): Promise<void>;
	/**
	 * 停止采集
	 */
	stopCapture(): void;
	/**
	 * 切换指定摄像头
	 * @param deviceId
	 * @returns
	 */
	changeDeviceId(deviceId: string): Promise<void>;
	/**
	 * 切换摄像头朝向(仅手机)
	 * @returns
	 */
	switchFacingMode(): Promise<void>;
}
/**
 * 本地麦克风流轨道
 */
export declare class LocalMicTrack extends LocalAudioTrack {
	constructor(captureOptions: MicCaptureOptions);
	/**
	 * 开始采集
	 * @param opt 采集参数
	 */
	startCapture(opt?: MicCaptureOptions): Promise<void>;
	/**
	 * 停止采集
	 */
	stopCapture(): void;
	/**
	 * 切换麦克风
	 * @param deviceId
	 * @returns
	 */
	changeDeviceId(deviceId: string): Promise<void>;
}
/**
 * 屏幕共享音频流轨道
 */
export declare class LocalScreenAudioTrack extends LocalAudioTrack {
	constructor(captureOptions: ScreenAudioCaptureOptions | true);
	/**
	 * 停止采集
	 */
	stopCapture(): void;
}
/**
 * 本地屏幕视频流轨道
 */
export declare class LocalScreenTrack extends LocalVideoTrack {
	constructor(captureOptions: ScreenCaptureOptions);
	/**
	 * 获取音频轨道
	 */
	getAudioTrack(): LocalScreenAudioTrack | undefined;
	/**
	 * 开始采集
	 * @param opt 采集参数
	 */
	startCapture(opt?: ScreenCaptureOptions): Promise<void>;
	/**
	 * 停止采集
	 */
	stopCapture(): void;
}
/**
 * 本地视频流轨道
 */
export declare class LocalVideoTrack extends BaseWebrtcTrack {
	constructor();
	setMediaStreamTrack(mediaStreamTrack?: MediaStreamTrack): void;
	/**
	 * 获取联播轨道（小流）
	 * @param opt 联播轨道的发布参数
	 * @param owidth 原始宽度
	 * @param oheight 原始高度
	 */
	getSimulcastTrack(opt: VideoPublishOptions, owidth?: number, oheight?: number): LocalVideoTrack;
	/**
	 * 添加播放窗口
	 */
	addPlayView(container: HTMLElement): void;
	/**
	 * 是否存在播放窗口
	 */
	hasPlayView(): boolean;
	/**
	 * 移除播放窗口
	 */
	removePlayView(container: HTMLElement): void;
	/**
	 * 移除所有播放窗口
	 */
	removeAllPlayViews(): void;
}
/**
 * 远端混音流
 */
export declare class RemoteAudioMixTrack extends RemoteAudioTrack {
	constructor(info: BaseTrackInfo, filterUids?: string[]);
	/**
	 * 混音流中过滤的uid
	 * @returns
	 */
	getFilterUids(): string[];
}
/**
 * 远端音频流轨道
 */
export declare class RemoteAudioTrack extends BaseWebrtcTrack {
	constructor(info: BaseTrackInfo, uid: string);
	/**
	 * 播放音频(可指定播放设备)
	 */
	startPlay(opt?: AudioOutputOptions): Promise<void>;
	/**
	 * 停止播放并释放对播放设备的占用
	 */
	stopPlay(): void;
}
/**
 * 远端视频流轨道
 */
export declare class RemoteVideoTrack extends BaseWebrtcTrack {
	constructor(info: BaseTrackInfo, uid: string);
	/**
	 * 添加播放窗口
	 */
	addPlayView(container: HTMLElement): void;
	/**
	 * 是否存在播放窗口
	 */
	hasPlayView(): boolean;
	/**
	 * 移除播放窗口
	 */
	removePlayView(container: HTMLElement): void;
	/**
	 * 移除所有播放窗口
	 */
	removeAllPlayViews(): void;
}
export declare class SRTC extends BaseSRTC {
	buildInfo(): BuildInfo;
	/**
	 * 获取web运行环境信息，如是否支持webrtc等
	 * @returns
	 */
	getEnvInfo(): EnvWebInfo;
	constructor(initParams: SdkInitParams);
	/**
	 * 获取设备列表
	 * @param kind
	 * @param requestPermissions
	 * @returns
	 */
	getDevices(kind?: MediaDeviceKind, requestPermissions?: boolean): Promise<MediaDeviceInfo[]>;
	/**
	 * 创建麦克风本地音频流
	 * @param preset 麦克风预设，默认为 MicPresets.music
	 */
	createLocalMicTrack(preset?: MicPreset): LocalMicTrack;
	/**
	 * 创建自定义本地音频流
	 */
	createLocalCustomAudioTrack(msTrack: MediaStreamTrack): LocalAudioTrack;
	/**
	 * 创建摄像头本地视频流
	 * @param preset 摄像头预设，默认为 CameraPresets["720p"]
	 */
	createLocalCameraTrack(preset?: CameraPreset): LocalCameraTrack;
	/**
	 * 创建屏幕共享本地视频流
	 * @param preset 屏幕共享预设，默认为 ScreenPresets["1080p"]
	 * @param audioPreset 屏幕共享音频预设，默认为 ScreenAudioPresets["default"]
	 */
	createLocalScreenTrack(preset?: ScreenPreset, audioPreset?: ScreenAudioPreset): LocalScreenTrack;
	/**
	 * 创建自定义本地视频流
	 */
	createLocalCustomVideoTrack(msTrack: MediaStreamTrack): LocalVideoTrack;
	/**
	 * 临时enable本地流轨道，如取消静音麦克风
	 */
	enableLocalTrack(track: LocalAudioTrack | LocalVideoTrack): void;
	/**
	 * 临时disable本地流轨道，如临时静音麦克风
	 * 比unpublishLocalTrack取消发布轨道轻
	 */
	disableLocalTrack(track: LocalAudioTrack | LocalVideoTrack): void;
	/**
	 * 发布本地流轨道
	 * @param track
	 * @returns
	 */
	publishLocalTrack(track: LocalAudioTrack | LocalVideoTrack, opt?: Partial<AudioPublishOptions> | Partial<VideoPublishOptions>): Promise<void>;
	/**
	 * 取消发布本地流
	 * @param track
	 */
	unpublishLocalTrack(track: LocalAudioTrack | LocalVideoTrack): Promise<void>;
	/**
	 * 订阅远端频道混音流
	 */
	subscribeRemoteAudioMixTrack(filterUids?: string[]): Promise<RemoteAudioMixTrack>;
	/**
	 * 订阅远端用户音频流
	 * @param uid 用户id
	 * @param id 流轨道id
	 */
	subscribeRemoteAudioTrack(uid: string, id: string): Promise<RemoteAudioTrack>;
	/**
	 * 订阅远端视频合成流
	 */
	subscribeRemoteVideoMcuTrack(): Promise<RemoteVideoMcuTrack>;
	/**
	 * 订阅远端用户视频流
	 * @param uid 用户id
	 * @param id 流轨道id
	 */
	subscribeRemoteVideoTrack(uid: string, id: string): Promise<RemoteVideoTrack>;
	/**
	 * 取消订阅远端流
	 */
	unsubscribeRemoteTrack(track: RemoteAudioMixTrack | RemoteAudioTrack | RemoteVideoTrack): Promise<void>;
	getRemoteTrack(uid: string, id?: string, desc?: string): RemoteAudioTrack | RemoteVideoTrack;
}
/**
 * 摄像头预设参数
 */
export declare const CameraPresets: {
	/** 分辨率1920*1080，帧率15，码率2.5Mbps */
	"1080p": CameraPreset;
	/** 分辨率1280*720，帧率15，码率1.2Mbps，createLocalCameraTrack的默认预设参数 */
	"720p": CameraPreset;
	/** 分辨率640*360，帧率15，码率550Kbps */
	"360p": CameraPreset;
	/** 分辨率320*180，帧率15，码率250Kbps */
	"180p": CameraPreset;
};
/**
 * 麦克风预设参数
 */
export declare const MicPresets: {
	/** 单声道，采样率48kHz，码率24Kbps */
	speech: MicPreset;
	/** 单声道，采样率48kHz，码率32Kbps，createLocalMicTrack的默认预设参数 */
	music: MicPreset;
	/** 双声道，采样率48kHz，码率48Kbps */
	musicStereo: MicPreset;
	/** 单声道，采样率48kHz，码率64Kbps */
	musicHighQuality: MicPreset;
	/** 双声道，采样率48kHz，码率96Kbps */
	musicHighQualityStereo: MicPreset;
};
/**
 * 屏幕共享系统音频预设参数
 */
export declare const ScreenAudioPresets: {
	/** 系统音频，码率24Kbps */
	default: ScreenAudioPreset;
};
/**
 * 屏幕共享预设参数
 */
export declare const ScreenPresets: {
	/** 分辨率1920*1080，帧率10，码率2Mbps，createLocalScreenTrack时的默认预设参数 */
	"1080p": ScreenPreset;
	/** 分辨率1280*720，帧率10，码率1.5Mbps */
	"720p": ScreenPreset;
};
/**
 * 终端类型枚举
 */
export declare enum DeviceType {
	/**
	 * 未知设备
	 */
	Unknown = 0,
	/**
	 * Windows
	 */
	Windows = 1,
	/**
	 * Android
	 */
	Android = 2,
	/**
	 * iOS
	 */
	IOS = 3,
	/**
	 * Linux
	 */
	Linux = 4,
	/**
	 * MacOS
	 */
	MacOS = 5,
	/**
	 * webrtc
	 */
	WebRTC = 6,
	/**
	 * 小程序
	 */
	XCX = 7
}
/**
 * 用户离开频道的原因
 */
export declare enum DisconnectReason {
	/** 错误 */
	Error = -1,
	/** 主动离开 */
	Self = 1,
	/** 被踢离开 */
	Kicked = 2,
	/** 被顶号 */
	Replace = 3,
	/** 心跳超时离开 */
	Timeout = 4,
	/** 频道销毁离开 */
	Destroy = 5
}
/**
 * 用户断开im的原因
 */
export declare enum ImDisconnectReason {
	/** 错误 */
	Error = -1,
	/** 主动离开 */
	Self = 1,
	/** 被踢离开 */
	Kicked = 2,
	/** 心跳超时离开 */
	Timeout = 4
}
/**
 * 日志打印等级
 */
export declare enum LogLevel {
	DEBUG = "debug",
	INFO = "info",
	WARN = "warn",
	ERROR = "error"
}
/**
 * 日志打印目标
 */
export declare enum LogTarget {
	/** 控制台打印 */
	CONSOLE = "console",
	/** 微信实时日志 */
	WXREALTIME = "wxrealtime",
	/** 不打任何日志 */
	NONE = "none"
}
/**
 * 流轨道类型
 */
export declare enum TrackKind {
	Video = "video",
	Audio = "audio"
}
export declare namespace __INNER__ {
	const BaseSRTC_I: typeof BaseSRTC;
	const CommonChannelEventType_I: typeof CommonChannelEventType;
	const isWxxcx_I: typeof isWxxcx;
	const Logger_I: typeof Logger;
	const SdkError_I: typeof SdkError;
	const propAssign_I: typeof propAssign;
	const isObject_I: typeof isObject;
	const isString_I: typeof isString;
	const sleep_I: typeof sleep;
	const retry_I: typeof retry;
	const dateFormat_I: typeof dateFormat;
	const genNonce_I: typeof genNonce;
	const getHostnameFromUrl_I: typeof getHostnameFromUrl;
	const dct_I: typeof dct;
	function hmac_I(msg: string, key: string): string;
}
/**
 * 扬声器配置
 */
export interface AudioOutputOptions {
	/**
	 * deviceId to output audio
	 *
	 * Only supported on browsers where `setSinkId` is available
	 */
	deviceId?: string;
	/**
	 * 当因权限问题自动播放失败时，禁用sdk自带的播放弹窗，手动处理
	 */
	disableAutoPlayDialog?: boolean;
}
/**
 * 音频发布配置
 */
export interface AudioPublishOptions {
	/** 描述 */
	desc: string;
	/** 编码格式 */
	codec?: Codec;
	/** 最大码率 */
	maxBitrate?: number;
	/**
	 * dtx (Discontinuous Transmission of audio), enabled by default for mono tracks.
	 */
	dtx?: boolean;
	/**
	 * red (Redundant Audio Data), enabled by default for mono tracks.
	 */
	red?: boolean;
	/**
	 * 优先级，默认音频优先
	 */
	priority?: RTCPriorityType;
	/** 自定义属性 */
	props?: Record<string, any>;
}
/**
 * sdk编译信息
 */
export interface BuildInfo {
	/** 编译时间s */
	timestamp: number;
	/** sdk版本号 */
	version: string;
}
/**
 * 摄像头采集配置
 */
export interface CameraCaptureOptions {
	/**
	 * 设备id
	 */
	deviceId?: string;
	/**
	 * webrtc专用：摄像头朝向
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode
	 */
	facingMode?: "user" | "environment" | "left" | "right";
	/**
	 * 宽
	 */
	width?: number;
	/**
	 * 高
	 */
	height?: number;
	/**
	 * 最大帧率
	 */
	frameRate?: number;
}
/**
 * 摄像头预设值
 */
export interface CameraPreset {
	capture: CameraCaptureOptions;
	publish: VideoPublishOptions;
}
/**
 * 自定义消息
 */
export interface CustomMsgData {
	/** 消息命令 */
	action: string;
	/** 消息体 */
	content: any;
	/** 发送者会话id */
	sid: string;
	/** 发送者ID */
	uid: string;
	/** 频道名(如果非频道内自定义消息，为空) */
	channel: string;
	/** 是否私发 */
	private: boolean;
}
/**
 * 强制离开事件data
 */
export interface DisconnectEventData {
	/** 离开原因 */
	reason: DisconnectReason;
	/** 错误 */
	error?: any;
}
/**
 * web环境详情
 */
export interface EnvWebInfo extends Bowser$1.Parser.ParsedResult {
	/**
	 * 是否支持webrtc
	 */
	supported: boolean;
	/**
	 * 当前上下文是否安全(https或localhost或127.0.0.1)
	 */
	secure: boolean;
	/**
	 * 是否支持获取麦克风、摄像头等媒体设备进行枚举、音视频采集、推流
	 */
	mediaDevices: boolean;
	/**
	 * 是否支持发起屏幕共享
	 */
	screenshare: boolean;
	/**
	 * 是否支持h264编码
	 */
	h264Enc: boolean;
	/**
	 * 是否支持h264解码
	 */
	h264Dec: boolean;
	/**
	 * 是否支持vp8编码
	 */
	vp8Enc: boolean;
	/**
	 * 是否支持vp8解码
	 */
	vp8Dec: boolean;
	/**
	 * 是否支持opus编码
	 */
	opusEnc: boolean;
	/**
	 * 是否支持opus解码
	 */
	opusDec: boolean;
	/**
	 * 当前支持的视频编码
	 */
	videoEncCodecs: RTCRtpCapabilities | null;
	/**
	 * 当前支持的视频解码
	 */
	videoDecCodecs: RTCRtpCapabilities | null;
	/**
	 * 当前支持的音频编码
	 */
	audeoEncCodecs: RTCRtpCapabilities | null;
	/**
	 * 当前支持的音频解码
	 */
	audeoDecCodecs: RTCRtpCapabilities | null;
	/**
	 * ua
	 */
	ua: string;
	/**
	 * 屏幕宽度
	 */
	screenWidth: number;
	/**
	 * 屏幕高度
	 */
	screenHeight: number;
	/**
	 * 可视区域宽度
	 */
	clientWidth: number;
	/**
	 * 可视区域高度
	 */
	clientHeight: number;
	/**
	 * 设备的物理像素分辨率与CSS像素分辨率之比
	 */
	devicePixelRatio: number;
}
/**
 * im强制断开事件data
 */
export interface ImDisconnectEventData {
	/** 断开原因 */
	reason: ImDisconnectReason;
	/** 错误 */
	error?: any;
}
/**
 * im频道外消息
 */
export interface ImMsgData {
	/** 消息命令 */
	action: string;
	/** 消息体 */
	content: any;
	/** 发送者im会话id */
	sid: string;
	/** 发送者ID */
	uid: string;
	/** 发送者昵称 */
	name: string;
}
/**
 * 麦克风采集配置
 */
export interface MicCaptureOptions {
	/**
	 * 设备id
	 */
	deviceId?: string;
	/**
	 * AEC回声消除
	 */
	echoCancellation?: boolean;
	/**
	 * ANS降噪
	 */
	noiseSuppression?: boolean;
	/**
	 * AGC自动增益
	 */
	autoGainControl?: boolean;
	/**
	 * 声道数，目前只支持单声道
	 */
	channelCount?: number;
	/**
	 * 采样率16k/48k，目前固定16k
	 */
	sampleRate?: number;
	/**
	 * 每个采样点大小的位数(bits per sample)，默认16
	 */
	sampleSize?: number;
	/**
	 * the latency or range of latencies which are acceptable and/or required.
	 */
	latency?: ConstrainDouble;
}
/**
 * 麦克风预设值
 */
export interface MicPreset {
	capture: MicCaptureOptions;
	publish: AudioPublishOptions;
}
/**
 * 属性更改项
 */
export interface PropChangeItem<T> {
	/** 属性名 */
	prop: T;
	/** 更改后的值 */
	value: any;
	/** 更改前的值 */
	old: any;
}
/**
 * 屏幕采集音频配置
 */
export interface ScreenAudioCaptureOptions extends Omit<MicCaptureOptions, "deviceId"> {
}
/**
 * 屏幕共享音频预设值
 */
export interface ScreenAudioPreset {
	capture: ScreenAudioCaptureOptions | true;
	publish: AudioPublishOptions;
}
/**
 * 屏幕采集配置
 */
export interface ScreenCaptureOptions {
	/**
	 * 宽
	 */
	width?: number;
	/**
	 * 高
	 */
	height?: number;
	/**
	 * 帧率
	 */
	frameRate?: number;
	/**
	 * 是否显示鼠标
	 */
	showCursor: boolean;
	/**
	 * windows专用
	 */
	rect: {
		x: number;
		y: number;
		w: number;
		h: number;
	};
}
/**
 * 屏幕共享预设值
 */
export interface ScreenPreset {
	capture: ScreenCaptureOptions;
	publish: VideoPublishOptions;
}
/**
 * sdk构造参数
 */
export interface SdkInitParams {
	/** 日志等级 */
	logLevel?: LogLevel;
	/** 日志目标 */
	logTarget?: LogTarget;
}
/**
 * 用户离开事件data
 */
export interface UserLeaveEventData {
	/** 用户id */
	uid: string;
	/** 离开原因 */
	reason: DisconnectReason;
}
/**
 * 视频发布配置
 */
export interface VideoPublishOptions {
	/** 描述 */
	desc: string;
	/** 编码格式 */
	codec?: Codec;
	/**
	 * 宽(默认采集到的宽)
	 */
	width?: number;
	/**
	 * 高(默认采集到的高)
	 */
	height?: number;
	/** 最大码率 */
	maxBitrate?: number;
	/** 最大帧率 */
	maxFramerate?: number;
	/**
	 * 优先级，默认音频优先
	 */
	priority?: RTCPriorityType;
	/**
	 * degradationPreference
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpEncodingParameters/degradationPreference
	 */
	degradationPreference?: RTCDegradationPreference;
	/** 自定义属性 */
	props?: Record<string, any>;
	simulcasts?: VideoPublishOptions[];
}
/**
 * 重试执行器函数：直接调用开始执行，.cancel()取消重试，函数失败会返回maxretry或canceled
 */
export type retryCallback<T> = (() => Promise<T>) & {
	cancel: () => void;
};
/**
 * 频道信息
 */
interface BaseChannelInfo {
	/** 应用id */
	app_id: string;
	/** 频道名 */
	channel: string;
	/** 频道扩展属性 */
	props?: Record<string, any>;
	/** 频道创建时间 */
	created_at: number;
	/** 频道更新时间 */
	updated_at: number;
	/** 白板地址 */
	white_board: string;
}
/**
 * 流轨道信息
 */
interface BaseTrackInfo {
	/** 轨道id，在stream里唯一，在全局不一定唯一 */
	id: string;
	/** 自定义描述，如摄像头大流、摄像头小流、共享桌面流等 */
	desc: string;
	/** 轨道类型 */
	kind: TrackKind;
	/** 编码类型 */
	codec: Codec;
	/** 视频宽 */
	width: number;
	/** 视频高 */
	height: number;
	/** 视频帧率 */
	fps: number;
	/** 视频角度 */
	angle: number;
	/** 码率 */
	bitrate: number;
	/** 音频采样率 */
	sample_rate: number;
	/** 流扩展属性 */
	props?: Record<string, any>;
}
/**
 * 用户信息
 */
interface BaseUserInfo {
	/** 应用id */
	app_id: string;
	/** 用户id */
	uid: string;
	/** 会中昵称 */
	name: string;
	/** 设备类型 */
	device_type: DeviceType;
	/** 设备ID */
	device_id: string;
	/** 客户端RTCsdk版本号 */
	version: string;
	/** 用户扩展属性 */
	props?: Record<string, any>;
	/** 网络 */
	net: string;
	/** 服务分组 */
	sg: string;
	/** 更新时间 */
	updated_at: number;
	/** 频道名 */
	channel: string;
	/** 会话id */
	sid: string;
	/** 是否观众，类似研讨会观众，只收流 */
	is_audience: boolean;
	/** 进入时间 */
	join_at: number;
	/** 退出时间 */
	leave_at: number;
	/** 流轨道 */
	stream_tracks?: BaseTrackInfo[];
}

export {
	BaseChannelInfo as ChannelInfo,
	BaseTrackInfo as TrackInfo,
	BaseUserInfo as UserInfo,
	CommonImEventType as ImEventType,
};

