import { FACING_MODE_LIST } from '../enum/index'; import { IReturnResult } from './base'; import { ContentMode } from './client'; import { XYDisplaySurface } from './track'; /** * 设备类型枚举列表 * * @param VIDEO video 视频设备 * @param AUDIO audio 音频设备 */ export declare enum DEVICE_TYPE { VIDEO = "video", AUDIO = "audio" } /** * 请流时,控制流的帧率 * * @param 0 无 * @param 100 低帧率 * @param 200 高帧率 */ export type IMediaQualityType = 0 | 100 | 200; /** * content采集支持分辨率 * * @param 720 1280*720 * @param 1080 1920*1080 */ export type IContentResolutionType = 720 | 1080; /** * 采集MediaStream状态 * * @param NORMAL NORMAL 正常采集状态 * @param FAILED FAILED 采集失败状态,当前流采集失败/约束失败状态 * @param DISABLED DISABLED 禁用状态,不允许采集 * @param UNKNOWN UNKNOWN 初始化状态 */ export declare enum StreamStatus { 'NORMAL' = "NORMAL", 'FAILED' = "FAILED", 'DISABLED' = "DISABLED", 'UNKNOWN' = "UNKNOWN" } /** * 自定义采集流时产生的状态 * * @param NORMAL NORMAL 采集正常 * @param RECEIVE_ONLY RECEIVE_ONLY 仅发送(无权限、无设备等无流入会情况) * @param NORMAL_AUDIO NORMAL_AUDIO 仅采集麦克风流,视频流转仅接收模式 * @param NORMAL_VIDEO NORMAL_VIDEO 仅采集摄像头流,麦克风转仅接收模式 * @param FAILED FAILED 其他异常 * @param UNKNOWN UNKNOWN 初始状态,未知情况 */ export declare enum StreamCurrentType { 'NORMAL' = "NORMAL", 'NORMAL_VIDEO' = "NORMAL_VIDEO", 'NORMAL_AUDIO' = "NORMAL_AUDIO", 'RECEIVE_ONLY' = "RECEIVE_ONLY", 'FAILED' = "FAILED", 'UNKNOWN' = "UNKNOWN" } /** * 自定义流类型 * * @param CONTENT CONTENT 共享内容流 * @param PREVIEW PREVIEW 本地预览流 * @param PIPELINE PIPELINE 建立通道流 * @param REMOTE REMOTE 推送远端画面流 */ export declare enum StreamType { 'CONTENT' = "CONTENT", 'PREVIEW' = "PREVIEW", 'PIPELINE' = "PIPELINE", 'REMOTE' = "REMOTE" } /** * 分辨率枚举列表 * * @param RS90 - 160*90 * @param RS180 - 320*180 * @param RS360 - 640*360 * @param RS720 - 1280*720 * @param RS1080 - 1920*1080 */ export declare enum StreamResolution { RS90 = 90, RS180 = 180, RS360 = 360, RS720 = 720, RS1080 = 1080 } /** * 帧率枚举列表 */ export declare enum StreamFrameRate { FR30 = 30, FR15 = 15, FR8 = 8 } /** * 分辨率等级枚举列表 */ export declare enum StreamResolutionLevel { LEVEL90 = 0, LEVEL180 = 1, LEVEL360 = 2, LEVEL720 = 3, LEVEL1080 = 4 } /** * 视频质量等级 * * @param LOW - 低画面质量,帧率会自动降低到15帧接收; * @param NORMAL - 普通画面质量,会基于带宽信息自动在30/15帧切换; * @param HIGH - 高画面质量,会优先匹配高帧率高分辨率画面; */ export declare enum VideoQuality { LOW = 0, NORMAL = 1, HIGH = 2 } /** * 流类型枚举列表 * * @param VIDEO VIDEO 视频流 * @param AUDIO AUDIO 音频流 * @param ALL ALL 音频+视频流 */ export declare enum StreamKind { VIDEO = "VIDEO", AUDIO = "AUDIO", ALL = "ALL" } /** * 流来源 * * @param SDK SDK 通过SDK内部创建 * @param CUSTOM CUSTOM 通过外部用户创建 */ export declare enum StreamOrigin { 'SDK' = "SDK", 'CUSTOM' = "CUSTOM" } /** * 约束配置方式 * * @param COMMON COMMON 通用配置 * @param ADVANCED ADVANCED 高级约束配置,强制约束采集 * @param FAILED FAILED 配置采集失败 * @param ELECTRON_COMMON ELECTRON_COMMON 采集Electron桌面共享视频流约束配置方案 */ export declare enum ConstraintMode { 'COMMON' = "COMMON", 'ADVANCED' = "ADVANCED", 'FAILED' = "FAILED", 'ELECTRON_COMMON' = "ELECTRON_COMMON" } /** * 联播模式 * * @param MULTI_RES MULTI_RESOLUTION 多路分辨率 * @param SCALE_RES SCALE_RESOLUTION 多路Scale分辨率 */ export declare enum SimulcastMode { 'MULTI_RES' = "MULTI_RESOLUTION", 'SCALE_RES' = "SCALE_RESOLUTION" } /** * 摄像头前置后置 * * @param user 前置 * @param environment 后置 */ export type IDevicePosition = (typeof FACING_MODE_LIST)[number] | ''; /** * 编码的优先级。在多个编码器存在的情况下,编码器的优先级决定了编码器的使用顺序 * 优先级的值越高,表示编码器的优先级越高,将会优先使用 * * @param VERY_LOW very-low 编解码器优先级最低 * @param LOW low 默认值,编解码器优先级较低 * @param MEDIUM medium 编码器的优先级适中 * @param HIGH high 编码器的优先级较高,使编码器在其他编码器之前使用,以便在网络带宽受限的情况下,选择最优的编码器进行编码 */ export declare enum PriorityMode { 'VERY_LOW' = "very-low", 'LOW' = "low", 'MEDIUM' = "medium", 'HIGH' = "high" } /** * 编解码器优先级 * * @property { 'video' | 'audio' } kind - 流类型,分video和audio */ export interface TCustomStream { kind: 'video' | 'audio'; } /** * 自定义流配置 * * @property { string } id - 流ID,默认是随机生成,不重复 * @property { StreamType } type - 自定义流类型 * @property { StreamStatus } status - 状态 * @property { MediaStream | null } stream - 采集设备流 * @property { string } streamId - 初始设备流Stream ID * @property { TCustomStream[] } pipeStream - 协商通道流 * @property { StreamResolution } resolution - 分辨率 * @property { StreamFrameRate } frameRate - 帧率 * @property { StreamKind } kind - 流画面种类:Video/Audio * @property { StreamOrigin } origin - 创建源:SDK/CUSTOM,默认是SDK * @property { ConstraintMode } constraintMode - 采集失败时的约束模式:COMMON/ADVANCED/FAILED,默认是COMMON * @property { SimulcastMode } simulcastMode - 联播模式:多分辨率模式或者RTPSender Scale裁剪 * @property { PriorityMode } priorityMode - 编码的优先级。在多个编码器存在的情况下,编码器的优先级决定了编码器的使用顺序 * @property { boolean } enableAspectRatio - 采集时是否支持设置视频流的宽高比, 默认支持 */ export interface IStreamConfig { id: string; type: StreamType; status: StreamStatus; stream: MediaStream | null; streamId?: string; pipeStream: TCustomStream[]; resolution: StreamResolution; frameRate: StreamFrameRate; kind?: StreamKind; origin?: StreamOrigin; constraintMode?: ConstraintMode; simulcastMode?: SimulcastMode; priorityMode?: PriorityMode; enableAspectRatio?: boolean; } /** * 流集合 * * @property { IStreamConfig[] } previewStreams 本地预览流 * @property { IStreamConfig[] } streams 发送远端流 * @property { IStreamConfig[] } pipelineStreams 协商通道流 * @property { IStreamConfig[] } contentStreams 共享内容流 */ export interface IGetMediaStreams { previewStreams: IStreamConfig[]; streams: IStreamConfig[]; pipelineStreams: IStreamConfig[]; contentStreams: IStreamConfig[]; } /** * 包含摄像头和共享视频的视频/音频的约束配置 * * TODO:需要包含People和Content的约束类型 */ export type TConstraintsConfig = { video: any; audio: any; }; /** * Map所有分辨率的约束类型 */ export type XYContentConstraintsConfigMap = { [key in StreamResolution]?: { [mode in Exclude]?: TConstraintsConfig; }; }; /** * Map所有分辨率的约束类型 */ export type XYPeopleConstraintsConfigMap = { [key in StreamResolution]?: { [mode in Exclude]?: TConstraintsConfig; }; }; /** * 初始Remote预配置,基于此配置生成Stream Config */ export type StreamsConfigMap = { kind: StreamKind; resolution: StreamResolution; status: StreamStatus; priorityMode?: PriorityMode; }; /** * Stream类采集流的状态和信息 * * @property { IStreamCurrentType } type 流的采集状态:采集正常、仅发送、其他异常 * @property { string } detail 错误消息 */ export interface IStreamCurrent { type: StreamCurrentType; detail: string | IReturnResult; } /** * publish推送流数据到Peer链接 * * @property { boolean } isShareContent 是否是共享内容流 * @property { boolean } isShareFile 是否是分享文件 * @property { boolean } isShareWhiteBoard 是否是白板 * @property { boolean } isSharePeople 是否是people流 * @property { boolean } isSettingMode 是否是设置模式 */ export interface IPublishParams { isShareContent?: boolean; isShareFile?: boolean; isShareWhiteBoard?: boolean; isSharePeople?: boolean; isSettingMode?: boolean; } /** * 封装Stream Sender * * @property { string } resolution 当前通道发送的流的分辨率 * @property { MediaStreamTrack | null } track 当前通道发送的Track流 * @property { RTCRtpSender | null } RTCSender * @property { string } status 状态 * @property { string } type 类型 */ export interface IStreamSender { resolution: StreamResolution; track: MediaStreamTrack | null; sender: RTCRtpSender; status: string; type: StreamType; id: string; } /** * 封装Stream Sender * * @property { IStreamConfig } config - 自定义流配置 * @property { MediaStreamTrack | null } track - 当前通道发送的Track流 * @property { RTCRtpSender | null } sender - RTC发送器 */ export interface ISenderConfig { config: IStreamConfig; track: MediaStreamTrack | null; sender: RTCRtpSender; } export type ISenderMap = { [key: string]: ISenderConfig; }; /** * Electron选择分享应用/屏幕资源 * * @property { unknown } appIcon - 资源icon * @property { string } display_id - 显示id * @property { string } id - 资源id * @property { string } name - 应用名称/屏幕名称 * @property { unknown } thumbnail - thumbnail type is NativeImage */ export interface XYElectronSource { appIcon: any; display_id: string; id: string; name: string; thumbnail: any; } /** * stream init配置参数,用于在初始采集视频/音频流时指定设备信息 * * @property { Object } devices 麦克风/摄像头/扬声器 设备id * @property { string } devices.audioInputValue 音频输入 * @property { string } devices.videoInValue 视频输入 * @property { string } devices.audioOutputValue 音频输出 */ export interface IStreamInitConfig { devices: { audioInputValue?: string; videoInValue?: string; audioOutputValue?: string; }; } /** * stream init第二个参数配置 * * @property { boolean } enabledCustomStream - 是否启用自定义视频流 */ export type IStreamInitParams = { enabledCustomStream?: boolean; }; /** * 质量统计数据 * * @property { number } bytesReceived - 接收的字节总数 * @property { number } bytesReceivedSecond - 每秒接收字节数 * @property { number } bytesSent - 发送的字节总数 * @property { number } bytesSentSecond - 每秒发送字节数 * @property { number } jitterSent - 发送的抖动(ms) * @property { number } jitterReceived - 接受的抖动(ms) * @property { number } audioSendJitter - 音频发送抖动 * @property { number } roundTripTime - 往返延时 (ms) * @property { number } fractionLostSent - 视频发送的丢包率 * @property { number } fractionLostReceived - 视频接受的丢包率 * @property { string } mimeType - 视频Codec类型 * @property { string } audioMimeType - 音频Codec类型 * @property { number } timestamp - 时间戳 * @property { string } networkType - 网络类型 * @property { string } localInternalIP - 本地IP地址 * @property { number } localPort - 本地端口 * @property { string } remoteIP - 远端IP地址 * @property { number } remotePort - 远端端口 * @property { [prop: string]: IReceiver } receiver - 所有接收视频的列表数据 * @property { [prop: string]: ISender } sender - 所有发送视频的列表数据 * @property { [prop: string]: IReceiver } audioReceiver - 所有接收音频的列表数据 * @property { [prop: string]: ISender } audioSender - 所有发送音频的列表数据 * @property { number } audioSendLost - 音频发送的丢包率 * @property { number } audioRecvLost - 音频接受的丢包率 */ export interface IInternals { bytesReceived: number; bytesReceivedSecond: number; bytesSent: number; bytesSentSecond: number; jitterSent: number; jitterReceived: number; audioSendJitter: number; roundTripTime: number; fractionLostSent: number; fractionLostReceived: number; mimeType: string; audioMimeType: string; timestamp: number; networkType?: string; localOuterIP?: string; localInternalIP?: string; localPort?: number; remoteIP?: string; remotePort?: number; receiver: { [prop: string]: IReceiver; }; sender: { [prop: string]: ISender; }; audioReceiver: { [prop: string]: IReceiver; }; audioSender: { [prop: string]: ISender; }; audioSendLost?: number; audioRecvLost?: number; } export type IInternels = IInternals; /** * 接收器 Receiver 统计数据 * 详情可参考:https://w3c.github.io/webrtc-stats/#dictionary-rtcreceivedrtpstreamstats-members * * @property { number } bytesReceived - 接收总量 * @property { number } bytesReceivedSecond - 每秒接收数据 * @property { number } frameHeight - 解码帧的height * @property { number } frameWidth - 解码帧的width * @property { number } framesDecoded - frame编码量 * @property { number } framesDecodedSecond - 每秒frame编码量 * @property { number } framesReceived - frame接收量 * @property { number } framesReceivedSecond - 每秒frame接收量 * @property { number } freezeCount - 冻结帧数(2025/03/25新增) * @property { boolean } isContent - 是否是分享content * @property { boolean } isSupport - 忽略 * @property { number } jitterBufferDelay - 音频样本或视频帧从接收到退出抖动缓冲区所花费的时间总和,以秒为单位 * @property { number } jitterBufferEmittedCount - 每次抖动缓冲区发出样本时,此值都会增加目标抖动缓冲区延迟。添加的目标是从抖动缓冲区发出样本时的目标延迟(以秒为单位)。要获得平均目标延迟,请除以 jitterBufferEmittedCount(2025/03/25新增) * @property { number } jitterBufferMinimumDelay - 在没有外部因素影响的情况下,基于网络特性(如抖动和丢包)所能达到的最小抖动缓冲延迟 * @property { number } jitterBufferTargetDelay - 目标抖动缓冲延迟,即 每次从抖动缓冲区输出音视频数据时的目标延迟累积值(单位:秒),平均目标延迟计算是:jitterBufferTargetDelay / jitterBufferEmittedCount * @property { number } keyFramesDecoded - 代表关键帧的总数 * @property { number } nackCount - 计算此接收器发送的否定确认(NACK)数据包的总数 * @property { string } name - 与会者昵称 * @property { number } packetsReceived - 此传输上收到的数据包总数 * @property { number } packetsReceivedSecond - 此传输上每秒收到的数据包数量 * @property { number } packetsLost - 此传输上丢失的数据包总数 * @property { number } packetsLostSecond - 此传输上每秒丢失的数据包数量 * @property { number } pliCount - 接收器发送的图片丢失指示(PLI)数据包的总数 * @property { number } timestamp - 时间戳 * @property { string } type - 与会者Type * @property { number } expResolution - 当前通道期望流分辨率 * @property { string } status - 状态 * @property { number } framesPerSecond - 此接收器解码的帧的 QP 值的总和 * @property { number } framesDropped - 丢弃的帧数,由于网络问题、解码器缓冲区溢出或其他原因而丢弃的帧的数量 * @property { string } ssrc - 同步源 (ssrc) 标识符是每个 [RFC3550] 的无符号整数值,用于标识此 stats 对象正在描述的 RTP 数据包流; * 对于出站和入站本地,ssrc 描述了分别由这些端点发送和接收的轨道的统计信息; * 对于远程入站和远程出站,ssrc 描述了由远程端点接收和发送到远程端点的轨道的统计信息; * @property { number } jitter - 视频接收抖动 * @property { string } endpointId - 参会者的callUri * @property { string } participantId - participantId * @property { string } mimeType - 编码器类型 * @property { number } audioLevel - 音频音量大小 * @property { number } insertedSamplesForDeceleration - 减速的插入样本数,用于音频流,同步音频流和视频流(或其他参考时间),插入的音频样本的数量。插入样本会导致播放速度减慢 * @property { number } insertedSamplesForDecelerationSecond - 每秒用于减速的插入样本数 * @property { number } totalSamplesReceived - 接收到的总样本数,开始到现在接收到的音频样本的总数量,用于评估接收数据的总体规模 * @property { number } totalSamplesReceivedSecond - 每秒接收到的样本总数 * @property { number } removedSamplesForAcceleration - 加速的移除样本数,同步音频流和视频流(或其他参考时间),移除的音频样本的数量。移除样本会导致播放速度加快 * @property { number } removedSamplesForAccelerationSecond - 每秒用于加速的移除样本数 * @property { number } ExpectWidth - 当前通道期望宽度 * @property { number } ExpectHeight - 当前通道期望高度 */ export interface IReceiver { bytesReceived?: number; bytesReceivedSecond?: number; frameHeight?: number; frameWidth?: number; framesDecoded?: number; framesDecodedSecond?: number; framesReceived?: number; framesReceivedSecond?: number; freezeCount?: number; isContent?: boolean; isSupport?: boolean; jitterBufferDelay?: number; jitterBufferEmittedCount?: number; jitterBufferMinimumDelay?: number; jitterBufferTargetDelay?: number; keyFramesDecoded?: number; nackCount?: number; name?: string; packetsReceived?: number; packetsReceivedSecond?: number; packetsLost?: number; packetsLostSecond?: number; pliCount?: number; timestamp?: number; type?: string; expResolution?: number; status?: string; framesPerSecond?: number; framesDropped?: number; ssrc?: string; jitter?: number; endpointId?: string; participantId?: number; mimeType?: string; audioLevel?: number; insertedSamplesForDeceleration?: number; insertedSamplesForDecelerationSecond?: number; totalSamplesReceived?: number; totalSamplesReceivedSecond?: number; removedSamplesForAcceleration?: number; removedSamplesForAccelerationSecond?: number; ExpectWidth?: number; ExpectHeight?: number; } /** * 发送器 Sender 统计数据 * 详情可以参考:https://w3c.github.io/webrtc-stats/#dictionary-rtcoutboundrtpstreamstats-members * * @property { number } bytesSent - 此RTCIceTransport上发送的有效负载字节总数 * @property { number } bytesSentSecond - 每秒发送有效负载字节数 * @property { number } frameHeight - 编码帧的高度 * @property { number } frameWidth - 编码帧的宽度 * @property { number } framesEncoded - 此RTP媒体流成功编码的帧总数 * @property { number } framesEncodedSecond - 每秒成功编码的帧数 * @property { number } framesSent - 此RTP流上发送的帧总数 * @property { number } framesSentSecond - 每秒发送的帧数 * @property { number } hugeFramesSent - 此RTP流发送的huge帧的总数 * @property { string } status - 忽略 * @property { number } keyFramesEncoded - 此RTP媒体流编码的关键帧总数 * @property { number } packetsSent - 此传输发送的数据包总数 * @property { number } packetsSentSecond - 此传输每秒发送的数据包数 * @property { number } timestamp - 时间戳 * @property { string } type - 发送器类型 * @property { number } expBandwidth - 期望带宽 * @property { StreamResolution } resolution - 分辨率 * @property { number } pliCount - 计算此发送方收到的图片丢失指示 (PLI) 数据包的总数 * @property { number } firCount - 接收方已向发送方发送的完整帧内请求 (FIR) 数据包的数量 * @property { number } nackCount - 计算此发送方收到的否定确认 (NACK) 数据包的总数 * @property { string } ssrc - 标识此 stats 对象正在描述的 RTP 数据包流; * 对于出站和入站本地,ssrc 描述了分别由这些端点发送和接收的轨道的统计信息; * 对于远程入站和远程出站,ssrc 描述了由远程端点接收和发送到远程端点的轨道的统计信息; * @property { string } mimeType - 编码器类型 * @property { number } audioLevel - 音量大小 * @property { number } packetsLost - 丢包总数 * @property { number } packetsLostSecond - 丢包率 * @property { boolean } isContent - 是否是分享content * @property { boolean } jitter - 抖动 * @property { boolean } roundTripTime - 往返延时 * @property { number } originWidth - 原始宽度 * @property { number } originHeight - 原始高度 * @property { number } originPerFrame - 帧率 */ export interface ISender { bytesSent: number; bytesSentSecond: number; frameHeight: number; frameWidth: number; framesEncoded: number; framesEncodedSecond: number; framesSent: number; framesSentSecond: number; hugeFramesSent: number; status: string; keyFramesEncoded: number; packetsSent: number; packetsSentSecond: number; timestamp: number; type: StreamType; expBandwidth: number; resolution: StreamResolution; pliCount: number; firCount: number; nackCount: number; ssrc: string; mimeType: string; audioLevel?: number; packetsLost: number; packetsLostSecond: number; isContent?: boolean; jitter?: number; roundTripTime?: number; originWidth?: number; originHeight?: number; originPerFrame?: number; } /** * 基础视频约束配置 * * @property { ConstrainDouble } frameRate 帧率配置 * @property { number } aspectRatio 视频比例 * @property { 'crop-and-scale' } resizeMode 裁剪模式,此处使用裁剪比例模式,以满足分辨率要求; * @property { number } width 采集分辨率-width * @property { number } height 采集分辨率-height */ export interface XYPeopleConfig { frameRate?: ConstrainDouble; aspectRatio?: number; resizeMode?: 'crop-and-scale'; width?: number; height?: number; } /** * 初始化视频约束设置 * * @property { string } cursor - 用于指定content分享时,是否指定显示鼠标指针的显示/隐藏或者是否需要录制鼠标 * @property { number } aspectRatio - 期待采集视频比例 * @property { 'crop-and-scale' } resizeMode - 裁剪模式,此处使用裁剪比例模式,以满足分辨率要求; * @property { ConstrainDouble } frameRate - 帧率 * @property { boolean } logicalSurface - 指示是否允许用户共享应用时采集非活跃的画面内容(生效异常) * @property { boolean } displaySurface - 指示用户分享应用的默认类型,可选:browser(浏览器标签)、monitor(屏幕)、window(应用),默认是monitor屏幕 * * API详见:https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/logicalSurface */ export interface XYContentConfig { cursor: string; aspectRatio?: number; resizeMode?: 'crop-and-scale'; logicalSurface?: boolean; frameRate?: ConstrainDouble; displaySurface?: XYDisplaySurface; } /** * 媒体通知Web对视频流的分辨率、带宽信息、帧率进行限制 * * @property { string } streamId 指定streamId进行限制 * @property { number } resolution 暂时未使用 * @property { number } bandwidth 限制streamId最大发送带宽 * @property { number } frameRate 限制streamId最大发送帧率(暂时未启用,存在帧率动态设置后,帧率起不来问题) */ export interface IStreamChange { streamId: string; resolution: number; bandwidth: number; frameRate: number; } /** * StreamChange消息内容 * * @property { string } type 消息类型 * @property { IStreamChange[] } streamChangeInfo 流限制配置信息 * @property { number } mediagroupid 是否是content或者people画面 */ export interface IStreamChangeType { type: string; streamChangeInfo: IStreamChange[]; mediagroupid: number; } /** * 缓存content和people的StreamChange配置数据 * * @property { IStreamChange[] } content content的streamChange数据 * @property { IStreamChange[] } people content的streamChange数据 */ export interface IStreamChangeListType { content: IStreamChange[]; people: IStreamChange[]; } /** * 采集控制 * * @param CAPTURE CAPTURE 启用采集 * @param KEEP KEEP 不处理 * @param FAILED FAILED 采集失败 */ export declare enum CaptureStatus { 'CAPTURE' = "CAPTURE", 'KEEP' = "KEEP", 'FAILED' = "FAILED" } /** * 视频/音频采集状态控制 */ export interface IEnabledCapture { video: CaptureStatus; audio: CaptureStatus; } export interface BaseStreamErrorParams { type: StreamKind; videoCapture: CaptureStatus; audioCapture: CaptureStatus; } export interface ICreateContentConfig { screenAudio?: boolean; } export interface IFrameRateConfig { frameRate?: ConstrainDouble; } /** * 切换设备方法额外配置 * * @property { boolean } isDefault - 可选,是否是系统默认设备,如果指定默认设备,则DeviceId可以提供空值 * @property { boolean } allowSpecifiedId - 可选,是否需要记录当前设备ID信息,默认内部的切换设备行为不需要记录,仅用户主动触发才会强制记录当前的设备ID信息 */ export interface SwitchDeviceConfig { isDefault?: boolean; allowSpecifiedId?: boolean; } /** * 控制分享Content的状态 * * @property ACQUIRING - 应答中 * @property SENDING - 允许发送Content流 * @property IDLE - 结束分享 */ export declare enum DualStreamState { 'ACQUIRING' = "ACQUIRING", 'SENDING' = "SENDING", 'IDLE' = "IDLE" } /** * 信令控制Content状态消息 */ export interface DualStreamMsg { code: string; mode: ContentMode; state: DualStreamState; type: 'DualStreamReport'; }