UNPKG

@seastart/srtc-web-sdk

Version:

srtc sdk for web

1,142 lines (1,138 loc) 26.4 kB
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, };