UNPKG

nertc-web-sdk

Version:

NeRTC SDK for web

1,205 lines (1,162 loc) 30.7 kB
/* * Copyright (c) 2021 NetEase, Inc. All rights reserved. */ import { Client } from './client' /** * 网络连接状态。包括: * - `DISCONNECTED`:网络连接已断开。 * - `CONNECTING`:建立网络连接中。 * - `CONNECTED`:网络已连接。 * - `DISCONNECTING`:网络连接断开中。 * * 参考 [[Client.getConnectionState]] */ export declare type ConnectionState = 'DISCONNECTED' | 'CONNECTING' | 'CONNECTED' | 'DISCONNECTING' /** * 媒体流类型。包括: * - `audio`:音频。 * - `video`:视频。 * - `screen`:屏幕共享。 */ export declare type MediaType = | 'audio' | 'audioSlave' | 'video' | 'screen' | 'videoThird' | 'videoFourth' /** * 加密方案,在调用 [[Client.setEncryptionMode]] 时使用。可设置为: * - `none`:不加密。 * - `sm4-128-ecb`:128 位 SM4 加密,ECB 模式。 */ export declare type EncryptionMode = 'none' | 'sm4-128-ecb' /** * 滤镜类型。包括: * - `ziran`:自然。 * - `baixi`:白皙。 * - `fennen`:粉嫩。 * - `weimei`:唯美。 * - `langman`:浪漫。 * - `rixi`:日系。 * - `landiao`:蓝调。 * - `qingliang`:清凉。 * - `huaijiu`:怀旧。 * - `qingcheng`:青橙。 * - `wuhou`:午后。 * - `zhigan`:质感。 * - `mopian`:默片。 * - `dianying`:电影。 * - `heibai`:黑白。 * */ export declare type BeautyFilters = | 'ziran' | 'baixi' | 'fennen' | 'weimei' | 'langman' | 'rixi' | 'landiao' | 'qingliang' | 'huaijiu' | 'qingcheng' | 'wuhou' | 'zhigan' | 'mopian' | 'dianying' | 'heibai' /** * 插件Class */ export declare type AnyClass = { new (...args: any): AnyClass [key: string]: any } /** * 注册插件参数。 */ export interface pluginOptions { /** * 插件标识 */ key: 'AdvancedBeauty' | 'VirtualBackground' | 'AIAudioEffects' | 'AIhowling' /** * 插件 js 地址 */ pluginUrl?: string /** * 插件对象 */ pluginObj?: AnyClass /** * 插件 wasm 地址 */ wasmUrl: string } /** * 基础美颜静态资源配置参数 */ export declare type BasicBeautyResConfig = { beauty?: { whiten: string redden: string } filters?: { [key: string]: { src: string intensity?: number } } } /** * 高级美颜静态资源配置参数 */ export declare type AdvBeautyResConfig = { faceMask?: string eyeTeethMask?: string teethWhiten?: string } /** * 高级美颜效果类型。包括: * - `enlargeEye`:大眼。 * - `roundedEye`:圆眼。 * - `openCanthus`:开眼角。 * - `eyeDistance`:眼距。 * - `eyeAngle`:眼睛角度。 * - `shrinkNose`:瘦鼻。 * - `lengthenNose`:长鼻。 * - `widenMouth`:嘴巴宽度。 * - `shrinkMouth`:嘴巴调整。 * - `mouthCorners`:嘴角调整。 * - `adjustPhiltrum`:人中调整。 * - `shrinkUnderjaw`:瘦下颌。 * - `shrinkCheekbone`:瘦颧骨。 * - `lengthenJaw`:下巴长度调整。 * - `narrowedFace`:窄脸。 * - `shrinkFace`:瘦脸。 * - `vShapedFace`:V 脸。 * - `minifyFace`:小脸。 * - `shortenFace`:短脸。 * - `whitenTeeth`:美牙。 * - `brightenEye`:亮眼。 * - 'fadeHeadWrinkle':抬头纹。 * - 'fadeEyeRim':黑眼圈。 * - 'fadeNoseLine':法令纹。 */ export declare type AdvBeautyEffects = | 'enlargeEye' | 'roundedEye' | 'openCanthus' | 'eyeDistance' | 'eyeAngle' | 'shrinkNose' | 'lengthenNose' | 'shrinkMouth' | 'widenMouth' | 'mouthCorners' | 'adjustPhiltrum' | 'shrinkUnderjaw' | 'shrinkCheekbone' | 'lengthenJaw' | 'narrowedFace' | 'shrinkFace' | 'vShapedFace' | 'minifyFace' | 'shortenFace' | 'whitenTeeth' | 'brightenEye' | 'fadeHeadWrinkle' | 'fadeEyeRim' | 'fadeNoseLine' export declare type AdvBeautyPreset = { enlargeEye?: number roundedEye?: number openCanthus?: number eyeDistance?: number eyeAngle?: number shrinkNose?: number lengthenNose?: number shrinkMouth?: number widenMouth?: number mouthCorners?: number adjustPhiltrum?: number shrinkUnderjaw?: number shrinkCheekbone?: number lengthenJaw?: number narrowedFace?: number shrinkFace?: number vShapedFace?: number minifyFace?: number shortenFace?: number whitenTeeth?: number brightenEye?: number fadeHeadWrinkle?: number fadeEyeRim?: number fadeNoseLine?: number } /** * 背景设置参数。 */ export interface BackGroundOptions { /** * 背景设置类型 */ type: 'image' | 'color' | 'blur' /** * 背景图片 */ source?: HTMLImageElement | string /** * 背景颜色 */ color?: string /** * 背景虚化程度 */ level?: number } /** * 自定义混响参数 */ export interface ReverbConfig { /** * 湿信号增益 */ wetGain: number /** * 干信号增益 */ dryGain: number /** * 混响阻尼 */ damping: number /** * 房间大小 */ roomSize: number /** * 持续强度 */ decayTime: number /** * 延迟长度 */ preDelay: number } /** * 视频画布设置。 */ export interface RenderMode { /** * 宽度 */ width: number /** * 高度 */ height: number /** * 是否裁剪 */ cut: boolean } /** * 客户端录制参数。 */ export interface ClientMediaRecordingOptions { /** * 仅录制本段,或者录制房间里所有人 */ recorder?: 'local' | 'all' /** * 录制的配置参数 */ recordConfig?: ClientRecordConfig } export interface ClientRecordConfig { /** * 仅录制音频或者录制音视频(video表示音视频都录制) */ recordType: 'audio' | 'video' /** * 录制文件的名称 */ recordName?: string /** * 录制文件的分辨率,仅支持640*360、640*480、1280*720设置(NERTC.RECORD_VIDEO_QUALITY_360p | NERTC.RECORD_VIDEO_QUALITY_480p | NERTC.RECORD_VIDEO_QUALITY_720p */ recordVideoQuality: number /** * 录制文件的帧率,仅支持15和30两种设置(NERTC.RECORD_VIDEO_FRAME_RATE_15 | NERTC.RECORD_VIDEO_FRAME_RATE_30) */ recordVideoFrame: number } /* * 录制状态。 */ export interface RecordStatus { recordedChunks: Blob[] /** * 是否正在录制。 */ isRecording: boolean /** * 录制的视频流。 */ stream: MediaStream | MediaStream[] | null /** * 录制配置。 */ option: RecordStartOptions | null contentTypes: string[] mimeType: string audioController: null opStream: MediaStream | null /** * 状态。 */ state: string /** * 录制文件名称。 */ fileName: string | null /** * 录制 ID。 */ recordId: number /** * 录制状态。 */ recordStatus: string /** * 录制文件的 URL 地址。 */ recordUrl: string | null /** * 录制开始时间。 */ startTime: number | null /** * 录制结束时间。 */ endTime: number | null } export interface RecordStartOptions { stream: MediaStream | MediaStream[] uid: number | string type: string reset: boolean } /** * 互动直播推流任务状态。 */ export interface RTMPTaskState { /** * 互动直播推流任务状态码。 */ code: number /** * 主讲人的用户 ID。 */ hostUid: number /** * 互动直播推流任务状态信息。 */ msg: string /** * 推流地址。 */ streamUrl: string /** * 互动直播任务 ID。 */ taskId: string } /** * 可能的异常有: * * AUDIO_INPUT_LEVEL_TOO_LOW * * SEND_AUDIO_BITRATE_TOO_LOW * * FRAMERATE_SENT_TOO_LOW * * FRAMERATE_VIDEO_BITRATE_TOO_LOW * * RECV_AUDIO_DECODE_FAILED * * AUDIO_OUTPUT_LEVEL_TOO_LOW * * RECV_VIDEO_DECODE_FAILED * * RECV_SCREEN_DECODE_FAILED * * 注意:当远端音频数量过多时SDK会按需开启音频选路模式(ASL),此时 RECV_AUDIO_DECODE_FAILED 及 AUDIO_OUTPUT_LEVEL_TOO_LOW 提示不再生效。 */ export interface ClientExceptionEvt { /** * 房间内的异常事件信息。 */ msg: string // 修正类型为 string /** * 用户 ID。 */ uid: number | string } export enum NetworkStatus { UNKNOWN = 0, EXCELLENT = 1, GOOD = 2, POOR = 3, BAD = 4, VERYBAD = 5, DOWN = 6 } export enum STREAM_TYPE { HIGH = 0, LOW = 1 } /*** * 房间中所有成员的上下行网络质量。 */ export interface NetStatusItem { /** * 用户 ID。 */ uid: number | string downlinkNetworkQuality: NetworkStatus uplinkNetworkQuality: NetworkStatus } /** * 推流任务选项。 */ export interface AddTaskOptions { /** * 推流任务信息。 */ rtmpTasks: RTMPTask[] } /** * 推流任务配置。 */ export interface RTMPTask { /** * 自定义的推流任务 ID。请保证此 ID 唯一。字母数字下划线组成的64位以内的字符串。 */ taskId: string /** * 流地址,例如 `rtmp://test.url`。此处的推流地址可设置为网易云信直播产品中服务端API创建房间的返回参数pushUrl。 */ streamUrl: string /** * 旁路推流是否需要进行音视频录制。 */ record: boolean /** * 互动直播中的布局相关参数。详细参数说明请参考layout。布局参数的配置方式及典型配置示例请参考旁路推流画面布局。 */ layout: { /** * 用于设置混流视频的整体画布属性。 */ canvas: { /** * 整体画布的宽度,单位为 px。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ width: number /** * 整体画布的高度,单位为 px。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ height: number /** * 画面背景颜色,格式为 256 ✖ 256 ✖ R + 256 ✖ G + B的和。请将对应 RGB 的值分别带入此公式计算即可。若未设置,则默认为0。 */ color: number } /** * 用于设置混流视频中每个参与者对应的画面属性。 */ users: { /** * 将指定uid对应用户的视频流拉入直播。如果添加多个 users,则 uid 不能重复。 */ uid: number | string /** * 通过 x 和 y 指定画布坐标中的一个点,该点将作为用户图像的左上角。x 参数用于设置画布的横轴坐标值。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ x: number /** * 通过 x 和 y 指定画布坐标中的一个点,该点将作为用户图像的左上角。y 参数用于设置画布的纵轴坐标值。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ y: number /** * 该用户图像在画布中的宽度。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ width: number /** * 该用户图像在画布中的高度。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ height: number /** * 用于设置占位图片和指定区域的适应属性。可设置为: * * 0:适应图片。即保证视频内容全部显示,未覆盖区域默认填充背景色 * * 1:适应区域。即保证所有区域被填满,视频超出部分会被裁剪。 * * 若未设置,则默认为1。 */ adaption: 0 | 1 /** * 是否在直播中混流该用户的对应音频流。可设置为: * * true:在直播中混流该用户的对应音频流。 * * false:在直播中将该用户设置为静音。 */ pushAudio: boolean /** * 是否在直播中向观看者播放该用户的对应视频流。可设置为: * * true:在直播中播放该用户的视频流。 * * false:在直播中不播放该用户的视频流。 */ pushVideo: boolean /** * 直播视频上用户视频帧的图层编号,用来决定渲染层级。 * * 取值范围为 0~100,默认为 0。 * * - 最小值为 0(默认值),表示该区域图像位于最底层。 * - 最大值为 100,表示该区域图像位于最顶层。 */ zOrder: number }[] /** * 用于设置混流视频中占位图片属性。若参数 users 指定的用户未上线,会在其对应的区域展示占位图片。 */ images?: { /** * 占位图片的URL。 */ url: string /** * 通过 x 和 y 指定画布坐标中的一个点,该点将作为占位图片的左上角。x 参数用于设置画布的横轴坐标值。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ x: number /** * 通过 x 和 y 指定画布坐标中的一个点,该点将作为占位图片的左上角。y 参数用于设置画布的纵轴坐标值。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ y: number /** * 该占位图片在画布中的宽度。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ width: number /** * 该占位图片在画布中的高度。取值范围为 0~1920,若设置为奇数值,会自动向下取偶。 */ height: number /** * 用于设置占位图片和指定区域的适应属性。可设置为: * * 0:适应图片。即保证视频内容全部显示,未覆盖区域默认填充背景色 * * 1:适应区域。即保证所有区域被填满,视频超出部分会被裁剪。 * * 若未设置,则默认为 1。 */ adaption: 0 | 1 }[] } /** * 其他设置 */ config?: { /** * 单视频直推不转码。开启后推流服务器会透传用户的视频编码,不再对视频做转码。 */ singleVideoNoTrans?: boolean /** * 音频参数 */ audioParam?: { /** * 自定义音频比特率。取值范围为 10~192。语音场景建议64以上,音乐场景建议128。 */ bitRate?: number /** * 音频推流采样率。可以设置为以下值。 * * `NERTC.LIVE_STREAM_AUDIO_SAMPLE_RATE.SAMPLE_RATE_32000` : 32000 * * `NERTC.LIVE_STREAM_AUDIO_SAMPLE_RATE.SAMPLE_RATE_44100` : 44100 * * `NERTC.LIVE_STREAM_AUDIO_SAMPLE_RATE.SAMPLE_RATE_48000` : 48000(默认) */ sampleRate?: number /** * 音频推流声道数。可以设置为`1`(mono)或者`2`(stereo)。默认为`2`。 */ channels?: number /** * 音频编码规格。可以设置为以下值。 * * `NERTC.LIVE_STREAM_AUDIO_CODEC_PROFILE.LC_AAC`: 表示基本音频编码规格(默认) * * `NERTC.LIVE_STREAM_AUDIO_CODEC_PROFILE.HE_AAC`: 表示高效音频编码规格 */ codecProfile?: number } } extraInfo?: string } export interface StreamOptions { /** * 用户 ID,与client的id一致。 */ uid?: number | string /** * 是否打开音频。如使用自采集(audioSource),则应将audio设为true。 */ audio: boolean /** * 是否开启/关闭音频处理接口(3A接口)。 * * 该接口仅处理麦克风。如需处理屏幕共享音频,请参考 [[Stream.setAudioProcessing]]。 * * @note * 音频处理接口取决于浏览器支持情况。 * * 目前Safari不支持AGC及ANS设置。 * * `AEC`: 是否开启声学回声消除。默认为 true。 * * `true`:开启声学回声消除。 * * `false`:关闭声学回声消除。 * * `AGC`: 是否开启自动增益控制。默认为 true。 * * `true`:开启自动增益控制。 * * `false`:关闭自动增益控制。 * * `ANS`: 是否开启自动噪声抑制。默认为 true。 * * `true`:开启自动噪声抑制。 * * `false`:关闭自动噪声抑制。 */ audioProcessing?: { ANS?: boolean AEC?: boolean AGC?: boolean } /** * 麦克风设备 deviceId,通过 [[NERTC.getMicrophones]] 获取。 */ microphoneId?: string /** * 摄像头设备 deviceId,通过 [[NERTC.getCameras]] 获取。 */ cameraId?: string /** * 是否打开视频。如使用自采集(videoSource),则应将video设为true。 */ video: boolean /** * 是否采集屏幕共享流。如使用自采集(screenVideoSource),则应将 screen 设为true。 * * 注意,Safari on MacOS 的屏幕共享需手势触发,且无法选择共享的屏幕、无法单独共享应用、无法共享音频。 * */ screen?: boolean /** * 是否采集屏幕分享流的共享音频。如使用自采集(screenAudioSource),则应将 screenAudio 设为true。 * * @since V4.3.0 * * screenAudio 字段用于指定该屏幕共享流中是否包含本地播放的声音。 * * 可设置为: * - true:屏幕共享同时共享本地播放的背景音。 * - false:(默认)屏幕共享时不共享本地播放的背景音。 * * @note * - 如需使用屏幕共享背景音功能,还需要在屏幕共享的弹出框中,勾选 **分享音频**(Share audio)。 * - 该功能仅支持 Windows 和 macOS 平台 Chrome 浏览器 74 及以上版本。需要注意的是: * 1. macOS 平台的 Chrome 浏览器仅支持 Chrome 标签页(Chrome Tab)模式。 * 2. 由于系统限制,分享当前的屏幕和页面时,无法将SDK接收到的声音再通过屏幕共享分享出去。 * - 如需使用屏幕共享背景音功能,必须将 screen 设为 true。如此时audio设为true,则输出为麦克风与屏幕共享背景音的混音。[[Stream.setAudioProfile]] 推荐设置为 `high_quality_stereo`。 * - 在V4.4.0版本之前,screenAudio和audio不能同时开启。 */ screenAudio?: boolean /** * 要Stream绑定的client实例对象。默认是最初使用用createClient创建的client实例(多实例场景使用) */ client?: Client /** * 自定义的音频的track。开启后应将 audio 置为 true 。 */ audioSource?: MediaStreamTrack /** * 自定义的视频的track。开启后应将 video 置为 true 。 */ videoSource?: MediaStreamTrack /** * 自定义屏幕共享音频的Track。开启后应将 screenAudio 置为 true 。 * * @since V4.6.0 */ screenAudioSource?: MediaStreamTrack /** * 自定义屏幕共享视频的视频的Track。开启后应将 screenVideo 置为true 。 * @since V4.6.0 */ screenVideoSource?: MediaStreamTrack /** * Electron 屏幕共享的数据源 ID,您可以参考[这篇文章](https://www.electronjs.org/docs/api/desktop-capturer)。 */ sourceId?: string /** * 指定使用前置/后置摄像头来采集视频 */ facingMode?: 'user' | 'environment' } /* * 视频订阅配置参数。 */ export interface SubscribeOptions { /** * 是否订阅音频。 */ audio?: boolean /** * 是否订阅视频。 */ video?: boolean /** * 是否订阅屏幕共享。 */ screen?: boolean /** * 是否订阅音频辅流。 */ audioSlave?: boolean /** * 订阅大流或小流。 * * 0 表示小流,1 表示大流。 */ highOrLow?: 0 | 1 } export interface UnsubscribeOptions { audio?: boolean audioSlave?: boolean video?: boolean screen?: boolean } export interface LiveConfig { /** * 互动直播开关。加入房间时此开关默认开启。 */ liveEnable: boolean } export interface RecordConfig { /** * 当前用户是否是主讲人。 */ isHostSpeaker: boolean /** * 是否开启音频实时音录制,`false` 不需要,`true` 需要。默认 `false`。 */ recordAudio: boolean /** * 是否开启视频实时音录制,`false` 不需要,`true` 需要。默认 `false`。 */ recordVideo: boolean /** * 录制模式。 * - 0:合流录制 + 单流录制。 * - 1:合流录制模式。只产生混合录制文件。 * - 2:单流录制模式。只产生单独录制文件。 */ recordType: 0 | 1 | 2 } export interface MediaPriorityOptions { /** * 本地用户的媒体流优先级。支持设置为: * - 50:高优先级。 * - 100:(默认)普通优先级。 */ priority: number /** * 是否开启抢占模式。默认为 false,即不开启。 * - 抢占模式开启后,本地用户可以抢占其他用户的高优先级,被抢占的用户的媒体优先级变为普通优先级,在抢占者退出房间后,其他用户的优先级仍旧维持普通优先级。 * - 抢占模式关闭时,如果房间中已有高优先级用户,则本地用户的高优先级设置不生效,仍旧为普通优先级。 */ preemtiveMode?: boolean } export interface JoinOptions { /** * 房间名称。 */ channelName: string /** * 用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。 * * uid 必填。如果不需指定,可传0,SDK 会自动分配一个随机 uid,您可以通过 getUid 查看,App 层必须记住该值并维护,SDK 不对该值进行维护。 */ uid: number | string /** * 用户的昵称。 * @since V5.8.26 */ nickname?: string /** * 安全认证签名。详细信息请参考 [NERTC Token](/docs/jcyOTA0ODM/Dc4NTE4OTY)。 * - 调试模式下:无需设置 Token。 * - 安全模式下:必须设置为已获取的 NERTC Token。 * * @note * - 应用测试期间,为便于调试,可以使用调试模式,此时无需 Token 鉴权即可加入房间。 * - 出于安全起见,应用正式上线时,应转为安全模式,并在加入房间时使用 Token 鉴权。 */ token?: string /** * 高级权限token,可以控制该client对象创建加入房间、发布音视频、订阅音视频的权限,以及通话时长的时间 */ permkey?: string /** * 自定义消息,房间中其他成员会收到`custom-data`通知,得到这个消息通知 */ customData?: string /** * 互动直播相关参数。 */ joinChannelLiveConfig?: LiveConfig /** * 云端录制相关参数。 */ joinChannelRecordConfig?: RecordConfig /** * 私有化服务器地址对象。 */ neRtcServerAddresses?: NeRtcServerAddresses /** * 是否开启远端音频流混流。默认为 false。注意,开启远端音频流混流后,remoStream仅支持部分接口。 */ mixRemoteAudioStream?: boolean } /** * 画布水印设置。 * * 同时设置文字、时间戳或图片水印时,如果不同类型的水印位置有重叠,会按照图片、文本、时间戳的顺序进行图层覆盖。 */ export interface NERtcCanvasWatermarkConfig { /** * 视频流类型。支持设置为主流(video)或辅流(screen)。 */ mediaType: 'video' | 'screen' /** * 文字水印。最多可以添加 10 个文字水印。 */ textWatermarks: NERtcTextWatermarkConfig[] /** * 时间戳水印。只能添加 1 个时间戳水印。 */ timestampWatermarks: NERtcTimestampWatermarkConfig /** * 图片水印,最多可以添加 4 个图片水印。 */ imageWatermarks: NERtcImageWatermarkConfig[] } /** * 编码水印设置。 * * 同时设置文字、时间戳或图片水印时,如果不同类型的水印位置有重叠,会按照图片、文本、时间戳的顺序进行图层覆盖。 */ export interface NERtcEncoderWatermarkConfig { /** * 视频流类型。支持设置为主流(video)或辅流(screen)。 */ mediaType: 'video' | 'screen' /** * 文字水印。最多可以添加 10 个文字水印。 */ textWatermarks: NERtcTextWatermarkConfig[] /** * 时间戳水印。只能添加 1 个时间戳水印。 */ timestampWatermarks: NERtcTimestampWatermarkConfig /** * 图片水印,最多可以添加 4 个图片水印。 */ imageWatermarks: NERtcImageWatermarkConfig[] } /** * 文字水印设置参数。 * * 最多可添加 10 个文字水印。 */ export interface NERtcTextWatermarkConfig { /** * 文字内容,设置为空时,表示不添加文字水印。 * - 字符串长度无限制。最终显示受字体大小和水印框大小的影响。超出水印框的部分不显示。 * - 如果设置了水印框宽度,当文字内容长度超过水印框宽度时,会自动换行,如果超出水印框高度,超出部分不显示。 * - 未设置水印框宽度和高度时,文字不换行,超出水印框的部分不显示。 */ content: string /** * 字体大小。默认值为 10,相当于 144 dpi 设备上的 10 x 15 磅。 */ fontSize?: number /** * 字体颜色。默认为白色。 */ fontColor?: number /** * 水印左上角与视频画布左上角的水平距离。单位为像素(pixel)。默认为 0。 */ offsetX?: number /** * 水印左上角与视频画布左上角的垂直距离。单位为像素(pixel)。默认为 0。 */ offsetY?: number /** * 水印框内背景颜色。默认为灰色。支持透明度设置。 */ wmColor?: number /** * 水印框的宽度。单位为像素(pixel),默认值为 0,表示没有水印框。 */ wmWidth?: number /** * 水印框的高度。单位为像素(pixel),默认值为 0,表示没有水印框。 */ wmHeight?: number } /** * 时间戳水印设置。 * - 只能添加 1 个时间戳水印,格式为 yyyy-MM-dd HH:mm:ss。 * - 时间戳水印的时间和当前时间相同,且实时变化。 */ export interface NERtcTimestampWatermarkConfig { /** * 字体大小。默认值为 10,相当于 144 dpi 设备上的 10 x 15 磅。 */ fontSize?: number /** * 字体颜色。默认为白色。 */ fontColor?: number /** * 水印左上角与视频画布左上角的水平距离。单位为像素(pixel)。默认为 0。 */ offsetX?: number /** * 水印左上角与视频画布左上角的垂直距离。单位为像素(pixel)。默认为 0。 */ offsetY?: number /** * 水印框内背景颜色。默认为灰色。支持透明度设置。 */ wmColor?: number /** * 水印框的宽度。单位为像素(pixel),默认值为 0,表示没有水印框。 */ wmWidth?: number /** * 水印框的高度。单位为像素(pixel),默认值为 0,表示没有水印框。 */ wmHeight?: number } /** * 图片水印设置参数。 * * 支持添加 4 个图片水印。 */ export interface NERtcImageWatermarkConfig { /** * 水印图片。 */ imageUrls: string[] /** * 水印图片左上角与视频画布左上角的水平距离。单位为像素(pixel),默认值为 0。 */ offsetX?: number /** * 水印图片左上角与视频画布左上角的垂直距离。单位为像素(pixel),默认值为 0。 */ offsetY?: number /** * 水印图片的宽度。单位为像素(pixel),默认值为 0 表示按原始图宽。 */ wmWidth?: number /** * 水印图片的高度。单位为像素(pixel),默认值为 0 表示按原始图高。 */ wmHeight?: number /** * 播放帧率。默认 0 帧/秒,即不自动切换图片,图片单帧静态显示。 */ fps?: number /** * 是否设置循环。默认循环,设置为 false 后水印数组播放完毕后消失。 */ loop?: boolean } /** * 私有化服务器相关配置参数。 * * @example * ```Javascript * // 加入房间 * client.join({ * channelName: 'channel163', * uid: 123, * token: '<您的token>', // 如关闭了安全模式,则不需要该参数。 * neRtcServerAddresses: { * channelServer: '', * statisticsServer: '', * statisticsWebSocketServer: ', * roomServer: '', * }, * }); * ``` */ export interface NeRtcServerAddresses { /** * 通道信息服务器地址。 */ channelServer: string /** * 统计上报服务器地址。 */ statisticsServer: string /** * 日志上报服务器地址。 */ statisticsWebSocketServer: string /** * roomServer服务器地址。 */ roomServer?: string /** * mediaServer服务器地址。 */ mediaServer?: string /** * 云代理服务器地址。 */ cloudProxyServer?: string /** * 云代理信令服务器地址。 */ webSocketProxyServer?: string /** * 云代理媒体服务器地址。 */ mediaProxyServer?: string /** * LBS调度服务器地址。 */ lbsServer?: string } /** * 音频回调数据格式 */ export interface AudioFrame { /** * 音频数据,PCM格式,length为1时为单声道,长度为2时为双声道 */ data: Array<Float32Array> /** * 采样率 */ sampleRate: number /** * 音频时长,单位ms */ duration: number } /** * 实时字幕回调数据格式 * * @since 5.6.0 * */ export interface AsrCaption { /** * 识别结果对应的用户ID */ srcUid: number /** * 时间戳 */ timestamp: number /** * 源语言 */ language: string /** * 识别结果 */ text: string /** * 当前这句话是否完成 */ isFinal: boolean /** * 是否存在翻译 */ hasTrans?: boolean /** * 翻译语言 */ transLanguage?: string /** * 翻译结果 */ transText?: string } /** * 远端用户离开房间的原因 * * @since 5.6.20 * */ export enum PEER_LEAVE_REASON_CODE { /** * 正常离开 */ LEAVE_NORMAL = 0, /** * 用户因 Failover 导致离开房间 */ LEAVE_FOR_FAIL_OVER = 1, /** * 用户被踢导致离开房间 */ LEAVE_FOR_KICK = 2, /** * 用户超时退出房间 */ LEAVE_TIMEOUT = 3, /** * 本端重连触发了远端离开房间的通知 */ LEAVE_FOR_RECONNECT = 4 } export interface GUMVideoConstraints { mandatory?: any width?: { max?: number ideal?: number } height?: { ideal?: number max?: number } frameRate?: { ideal?: number max?: number } facingMode?: { exact: string } deviceId?: { exact: string } } export interface HitLocationInfos { //打码的原因描述 hitInfo: string //打码的区域坐标 x1: number x2: number y1: number y2: number } export interface enableAIDenoiseOptions { /** * 是否开启啸叫消除,默认关闭 */ howlingSuppressionEnable?: boolean }