nertc-electron-sdk
Version:
nertc-electron-sdk
1,229 lines (1,228 loc) • 76.9 kB
TypeScript
/**
* @file defs.ts
* @brief NERtc SDK 的 TS 接口定义
*/
export interface RendererOptions {
append: boolean;
}
/** 日志级别。*/
export declare enum NERtcLogLevel {
kNERtcLogLevelFatal = 0,
kNERtcLogLevelError = 1,
kNERtcLogLevelWarning = 2,
kNERtcLogLevelInfo = 3,
kNERtcLogLevelDetailInfo = 4,
kNERtcLogLevelVerbos = 5,
kNERtcLogLevelDebug = 6,
kNERtcLogLevelOff = 7
}
export interface NERtcLowLatencyOptions {
enable_low_latency?: boolean;
play_timeout?: number;
}
export interface NERtcJoinChannelOptions {
custom_info?: string; /**< 自定义信息,最长支持 127 个字符。 <127chars */
permission_key?: string; /**< 权限密钥。能控制通话时长及媒体权限能力。*/
low_latency_options?: NERtcLowLatencyOptions;
}
export declare const kNERtcKeyChannel1V1ModeEnabled = "channel_1v1_mode_enabled";
/** 范围语音模式。*/
export declare enum NERtcRangeAudioMode {
NERtcRangeAudioModeDefault = 0,
NERtcRangeAudioModeTeam = 1
}
export interface NERtcJoinChannelOptionsEx {
custom_info: string; /**< 自定义信息,最长支持 127 个字符。 <127chars */
permission_key: string; /**< 权限密钥。能控制通话时长及媒体权限能力。*/
team_id: number; /**< 小队号。*/
mode: NERtcRangeAudioMode; /**< 语音模式。 */
audible_distance: number; /**< 语音接收范围。*/
}
/** 音频帧请求格式。*/
export interface NERtcAudioFrameRequestFormat {
channels: number; /**< 音频声道数量。如果是立体声,数据是交叉的。单声道: 1;双声道 : 2。*/
sample_rate: number; /**< 采样率。*/
mode: NERtcRawAudioFrameOpModeType; /**< 读写模式*/
}
/** 私有化服务器配置项 */
export interface NERtcServerAddresses {
channel_server: string; /**< 获取通道信息服务器, <256chars */
statistics_server: string; /**< 统计上报服务器, <256chars */
room_server: string; /**< roomServer服务器, <256chars */
compat_server: string; /**< 兼容性配置服务器, <256chars */
nos_lbs_server: string; /**< nos 域名解析服务器, <256chars */
nos_upload_sever: string; /**< 默认nos 上传服务器, <256chars */
nos_token_server: string; /**< 获取NOS token 服务器, <256chars */
use_ipv6: Boolean; /**< 是否使用IPv6(默认false) */
}
export declare enum NERtcIPAddrMode {
kNERtcIPAddrV4Only = 0,
kNERtcIPAddrV4AndV6 = 1
}
export interface NERtcEngineContext {
app_key: string; /**< 用户注册云信的APP Key。如果你的开发包里面缺少 APP Key,请申请注册一个新的 APP Key。*/
log_dir_path: string; /**< 日志目录的完整路径,采用UTF-8 编码。*/
log_level: NERtcLogLevel; /**< 日志级别,默认级别为 kNERtcLogLevelInfo。*/
log_file_max_size_KBytes: number; /**< 指定 SDK 输出日志文件的大小上限,单位为 KB。如果设置为 0,则默认为 20 M。*/
server_config: NERtcServerAddresses; /**< 私有化服务器地址 */
ip_addr_mode?: NERtcIPAddrMode; /**< IP地址类型:0=仅IPv4,1=IPv4+IPv6(默认) */
area_code_type?: number; /**< 区域类型:0=默认,1=中国大陆,2=海外通用 */
video_use_exnternal_render?: boolean; /**< 是否使用外部渲染(Mac有效,默认true;JS渲染层依赖此选项) */
}
/** 场景模式 */
export declare enum NERtcChannelProfileType {
kNERtcChannelProfileCommunication = 0,
kNERtcChannelProfileLiveBroadcasting = 1
}
/** 视频流类型。*/
export declare enum NERtcRemoteVideoStreamType {
kNERtcRemoteVideoStreamTypeHigh = 0,
kNERtcRemoteVideoStreamTypeLow = 1,
kNERtcRemoteVideoStreamTypeNone = 2
}
/** 错误代码。
错误代码意味着 SDK 遇到不可恢复的错误,需要应用程序干预。
*/
export declare enum NERtcErrorCode {
kNERtcNoError = 0,
kNERtcErrChannelReservePermissionDenied = 403,
kNERtcErrChannelReserveTimeOut = 408,
kNERtcErrChannelReserveErrorParam = 414,
kNERtcErrChannelReserveServerFail = 500,
kNERtcErrChannelReserveMoreThanTwoUser = 600,
kNERtcErrLsTaskRequestInvalid = 1301,
kNERtcErrLsTaskIsInvaild = 1400,
kNERtcErrLsTaskRoomExited = 1401,
kNERtcErrLsTaskNumLimit = 1402,
kNERtcErrLsTaskDuplicateId = 1403,
kNERtcErrLsTaskNotFound = 1404,
kNERtcErrLsTaskRequestErr = 1417,
kNERtcErrLsTaskInternalServerErr = 1500,
kNERtcErrLsTaskInvalidLayout = 1501,
kNERtcErrLsTaskUserPicErr = 1512,
kNERtcErrChannelStartFail = 11000,
kNERtcErrChannelDisconnected = 11001,
kNERtcErrVersionSelfLow = 11002,
kNERtcErrVersionRemoteLow = 11003,
kNERtcErrChannelClosed = 11004,
kNERtcErrChannelKicked = 11005,
kNERtcErrDataError = 11400,
kNERtcErrInvalid = 11403,
kNERtcErrChannelJoinTimeOut = 20101,
kNERtcErrChannelJoinMeetingModeError = 20102,
kNERtcErrChannelJoinRtmpModeError = 20103,
kNERtcErrChannelJoinRtmpNodesError = 20104,
kNERtcErrChannelJoinRtmpHostError = 20105,
kNERtcErrChannelJoinRtmpCreateError = 20106,
kNERtcErrChannelJoinLayoutError = 20208,
kNERtcErrChannelJoinInvalidParam = 20400,
kNERtcErrChannelJoinDesKey = 20401,
kNERtcErrChannelJoinInvalidRequst = 20417,
kNERtcErrChannelServerUnknown = 20500,
kNERtcErrFatal = 30001,
kNERtcErrOutOfMemory = 30002,
kNERtcErrInvalidParam = 30003,
kNERtcErrNotSupported = 30004,
kNERtcErrInvalidState = 30005,
kNERtcErrLackOfResource = 30006,
kNERtcErrInvalidIndex = 30007,
kNERtcErrDeviceNotFound = 30008,
kNERtcErrInvalidDeviceSourceID = 30009,
kNERtcErrInvalidVideoProfile = 30010,
kNERtcErrCreateDeviceSourceFail = 30011,
kNERtcErrInvalidRender = 30012,
kNERtcErrDevicePreviewAlreadyStarted = 30013,
kNERtcErrTransmitPendding = 30014,
kNERtcErrConnectFail = 30015,
kNERtcErrCreateDumpFileFail = 30016,
kNERtcErrStartDumpFail = 30017,
kNERtcErrDesktopCaptureInvalidState = 30020,
kNERtcErrDesktopCaptureInvalidParam = 30021,
kNERtcErrDesktopCaptureNotReady = 30022,
kNERtcErrChannelAlreadyJoined = 30100,
kNERtcErrChannelNotJoined = 30101,
kNERtcErrChannelRepleatedlyLeave = 30102,
kNERtcErrRequestJoinChannelFail = 30103,
kNERtcErrSessionNotFound = 30104,
kNERtcErrUserNotFound = 30105,
kNERtcErrInvalidUserID = 30106,
kNERtcErrMediaNotStarted = 30107,
kNERtcErrSourceNotFound = 30108,
kNERtcErrConnectionNotFound = 30200,
kNERtcErrStreamNotFound = 30201,
kNERtcErrAddTrackFail = 30202,
kNERtcErrTrackNotFound = 30203,
kNERtcErrMediaConnectionDisconnected = 30204,
kNERtcErrSignalDisconnected = 30205,
kNERtcErrServerKicked = 30206,
kNERtcErrKickedForRoomClosed = 30207,
kNERtcRuntimeErrADMNoAuthorize = 40000,
kNERtcRuntimeErrVDMNoAuthorize = 50000,
kNERtcRuntimeErrScreenCaptureNoAuthorize = 60000
}
/** 用户离开原因。*/
export declare enum NERtcSessionLeaveReason {
kNERtcSessionLeaveNormal = 0,
kNERtcSessionLeaveForFailOver = 1,
kNERtcSessionLeaveUpdate = 2,
kNERtcSessionLeaveForKick = 3,
kNERtcSessionLeaveTimeOut = 4
}
/** 视频编码配置。用于衡量编码质量。*/
export declare enum NERtcVideoProfileType {
kNERtcVideoProfileLowest = 0,
kNERtcVideoProfileLow = 1,
kNERtcVideoProfileStandard = 2,
kNERtcVideoProfileHD720P = 3,
kNERtcVideoProfileHD1080P = 4,
kNERtcVideoProfileNone = 5,
kNERtcVideoProfileMAX = 4,
kNERtcVideoProfileFake = 6
}
export declare enum NERtcVideoScalingMode {
kNERtcVideoScaleFit = 0,
kNERtcVideoScaleFullFill = 1,
kNERtcVideoScaleCropFill = 2
}
/** @enum NERtcVideoMirrorMode 设置镜像模式。*/
export declare enum NERtcVideoMirrorMode {
kNERtcVideoMirrorModeAuto = 0,
kNERtcVideoMirrorModeEnabled = 1,
kNERtcVideoMirrorModeDisabled = 2
}
/** @enum NERtcVideoOutputOrientationMode 设置镜像模式。*/
export declare enum NERtcVideoOutputOrientationMode {
kNERtcVideoOutputOrientationModeAdaptative = 0,
kNERtcVideoOutputOrientationModeFixedLandscape = 1,
kNERtcVideoOutputOrientationModeFixedPortrait = 2
}
/** @enum NERtcRawAudioFrameOpModeType 读写模式*/
export declare enum NERtcRawAudioFrameOpModeType {
kNERtcRawAudioFrameOpModeReadOnly = 0,
kNERtcRawAudioFrameOpModeReadWrite = 1
}
/** @enum NERtcAudioType 音频类型*/
export declare enum NERtcAudioType {
kNERtcAudioTypePCM16 = 0
}
/** 音频格式。*/
export interface NERtcAudioFormat {
type: NERtcAudioType; /**< 音频类型,默认 PCM。*/
channels: number; /**< 音频声道数量。单声道: 1;双声道: 2。*/
sample_rate: number; /**< 采样率。*/
bytes_per_sample: number; /**< 每个采样点的字节数。对于 PCM 来说,一般使用 16 bit,即两个字节。*/
samples_per_channel: number; /**< 每个声道的采样数量。*/
}
/** 音频帧。*/
export interface NERtcAudioFrame {
format: NERtcAudioFormat; /**< 音频格式。*/
data: ArrayBuffer; /**< 音频数据缓冲区。有效数据长度为:samples_per_channel * channels * bytes_per_sample。*/
sync_timestamp: number; /**< 同步音频主辅流的时间戳。*/
}
export interface NERtcVideoCanvas {
mode: NERtcVideoScalingMode;
view: Element;
mirror_mode?: NERtcVideoMirrorMode; /**< 镜像模式,0=Auto, 1=Enabled, 2=Disabled;远端 canvas 通过此字段控制本地显示镜像 */
}
export declare enum NERtcAudioProfileType {
kNERtcAudioProfileDefault = 0,
kNERtcAudioProfileStandard = 1,
kNERtcAudioProfileStandardExtend = 2,
kNERtcAudioProfileMiddleQuality = 3,
kNERtcAudioProfileMiddleQualityStereo = 4,
kNERtcAudioProfileHighQuality = 5,
kNERtcAudioProfileHighQualityStereo = 6
}
export declare enum NERtcAudioScenarioType {
kNERtcAudioScenarioDefault = 0,
kNERtcAudioScenarioSpeech = 1,
kNERtcAudioScenarioMusic = 2
}
/** RTMP 流推的推流房间信息。*/
export interface NERtcStreamingRoomInfo {
/** 用户的唯一标识 ID,为数字串,房间内每个用户的 uid 必须是唯一的。此 uid 为用户在您应用中的 ID,请在您的业务服务器上自行管理并维护。*/
uid: string;
/** 房间名。长度为 1 ~ 64 字节。支持以下 89 个字符:a-z, A-Z, 0-9, space, !#$%&()+-:;≤.,>? @[]^_{|}~” */
channel_name: string;
/** 安全认证签名(NERTC Token)。*/
token?: string;
}
/** RTMP 流推的推流参数。*/
export interface NERtcPushStreamingConfig {
/** 指定该音视频流的 CDN 推流地址,即直播 CDN 上的播放地址。*/
streaming_url: string;
/** 推流的房间信息。*/
streaming_room_info: NERtcStreamingRoomInfo;
}
/** RTMP 拉流播放参数。*/
export interface NERtcPlayStreamingConfig {
/** 直播拉流地址,例如 rtmp://test.url。此处的拉流地址可设置为云信直播产品中服务端 API 创建房间的返回参数 playUrl。*/
streaming_url: string;
/** 播放延时,单位为毫秒。默认值为 2000,表示无延时。*/
playout_delay?: number;
/** 重连超时时间,单位为毫秒。默认为 30000(即 30s)。*/
reconnect_timeout?: number;
/** 是否停止音频播放。*/
mute_audio_play?: boolean;
/** 是否停止视频播放。*/
mute_video_play?: boolean;
/** 是否暂停拉流。*/
pause_play_streaming?: boolean;
}
/** @enum NERtcPlayStreamState 播放流的状态。*/
export declare enum NERtcPlayStreamState {
kNERtcPlayStreamStateIdle = 0,
kNERtcPlayStreamStatePlaying = 1,
kNERtcPlayStreamStatePaused = 2,
kNERtcPlayStreamStateReconnecting = 3,
kNERtcPlayStreamStateStopped = 4 /**< 停止播放。*/
}
/** 实时字幕配置信息。*/
export interface NERtcASRCaptionConfig {
/** 字幕的源语言,默认为 AUTO。*/
src_language?: string;
/** @deprecated 已废弃参数,请使用 dst_languages。*/
dst_language?: string;
/** 字幕的多源语言。支持如 "zh"(中文)、"en"(英文)等缩写。*/
src_languages?: Array<string>;
/** 字幕的目标翻译语言。不传则不翻译。*/
dst_languages?: Array<string>;
/** 当源语言与设置的目标语言相同时,是否仍要翻译,默认为 false。*/
need_translate_same_language?: boolean;
}
/** 实时字幕状态。*/
export declare enum NERtcAsrCaptionState {
kNERtcAsrCaptionStartFailed = 0,
kNERtcAsrCaptionStateStopFailed = 1,
kNERtcAsrCaptionStateStarted = 2,
kNERtcAsrCaptionStateStopped = 3 /**< 已经停止。*/
}
/** 实时字幕信息。*/
export interface NERtcAsrCaptionResult {
/** 来源的用户 ID。*/
user_id: number;
/** 是否为本地用户。*/
is_local_user: boolean;
/** 实时字幕时间戳。*/
timestamp: number;
/** 实时字幕内容。*/
content: string;
/** 实时字幕语言。*/
language: string;
/** 是否带有翻译。*/
have_translation: boolean;
/** 翻译后的字幕内容。*/
translated_text: string;
/** 翻译后的字幕语言。*/
translation_language: string;
/** 是否为最终结果。*/
is_final: boolean;
}
/** @struct NERtcFrameNormalizedRect 矩形相对坐标信息。*/
export interface NERtcFrameNormalizedRect {
x: number; /**< 矩形的左上角顶点的 x 坐标,在相对坐标系中取值范围为[0.0, 1.0]。*/
y: number; /**< 矩形的左上角顶点的 y 坐标,在相对坐标系中取值范围为[0.0, 1.0]。*/
w: number; /**< 矩形的宽,在相对坐标系中取值范围为[0.0, 1.0]。*/
h: number; /**< 矩形的高,在相对坐标系中取值范围为[0.0, 1.0]。*/
}
/** 混合外部视频配置。*/
export interface NERtcVideoExternalBlendConfig {
/** 混合区域左上角 x 坐标 范围[0.0f, 1.0f]。*/
x: number;
/** 混合区域左上角 y 坐标 范围[0.0f, 1.0f]。*/
y: number;
/** 混合区域宽度比例 范围[0.0f, 1.0f]。x + w 不能超过 1.0。*/
w: number;
/** 混合区域高度比例 范围[0.0f, 1.0f]。y + h 不能超过 1.0。*/
h: number;
/** 是否镜像。*/
mirror?: boolean;
/** 混合区域缩放模式,保持比例/裁切/全填充。*/
scaling_mode?: NERtcVideoScalingMode;
/** 混合区域的背景颜色 ARGB 格式,其中 A 无效,默认渲染为黑色,0 为不设置背景。*/
bg_color?: number;
/** 是否叠加在原有视频上,默认 false(Blend 方式),设置为 true 时采用 Overlay 方式。*/
overlay?: boolean;
}
/** 声纹信息数据。*/
export interface NERtcVoiceprintInfo {
/** 设备 ID。*/
device_id: string;
/** 声纹数据。*/
voiceprint: ArrayBuffer | string;
/** 声纹数据长度。*/
size?: number;
}
/** 视频水印类型枚举。*/
export declare enum NERtcWatermarkType {
kNERtcWatermarkTypeImage = 0,
kNERtcWatermarkTypeText = 1,
kNERtcWatermarkTypeTimestamp = 2 /**< 时间戳水印。*/
}
/** 图片水印配置,watermarkType = kNERtcWatermarkTypeImage 时生效。*/
export interface NERtcVideoWatermarkImageConfig {
image_paths?: Array<string>; /**< 视频水印图片的一组本地绝对路径或 URL。仅支持 png。*/
wm_alpha?: number; /**< 图片水印的透明度,透明度范围:[0, 1]。默认值:1,即不透明。*/
wm_width?: number; /**< 图片水印的高度。不能超过 640 * 360 px。*/
wm_height?: number; /**< 图片水印的宽度。不能超过 640 * 360 px。*/
offset_x?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的水平距离。*/
offset_y?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的垂直距离。*/
fps?: number; /**< 按帧播放:设置图片的水印播放帧率(fps)。范围 1 到 30 fps。默认:0。*/
loop?: boolean; /**< 水印是否循环播放。默认值为 false。*/
}
/** 文字水印配置,watermarkType = kNERtcWatermarkTypeText 时生效。*/
export interface NERtcVideoWatermarkTextConfig {
content?: string; /**< 水印文字的内容。*/
font_name?: string; /**< 水印字体。默认值空(代表使用平台默认字体)。*/
font_color?: string; /**< 水印字体颜色。16 进制数的 ARGB 值,默认值为 0xFF888888。*/
font_size?: number; /**< 水印字体大小。默认值:10 个像素值。*/
wm_color?: string; /**< 字体背景色,可以不填。*/
wm_alpha?: number; /**< 文字水印背景颜色对应的透明度。默认值为 1,即不透明。*/
wm_width?: number; /**< 水印框宽度。*/
wm_height?: number; /**< 水印框高度。*/
offset_x?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的水平距离。*/
offset_y?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的垂直距离。*/
}
/** 时间戳水印配置,watermarkType = kNERtcWatermarkTypeTimestamp 时生效。*/
export interface NERtcVideoWatermarkTimestampConfig {
font_name?: string; /**< 水印字体。默认值空(代表使用平台默认字体)。*/
font_color?: string; /**< 水印字体颜色。不支持透明效果。16 进制数的 ARGB。默认值为 0xFF888888。*/
font_size?: number; /**< 水印字体大小。默认值:10。*/
wm_color?: string; /**< 水印背景颜色。支持透明效果。16 进制数的 ARGB,默认不配置。*/
wm_alpha?: number; /**< 文字水印背景颜色对应的透明度。范围:[0, 1]。默认值为 1,即不透明。*/
wm_width?: number; /**< 水印宽度。如果没有指定,内部会根据水印内容自动计算。*/
wm_height?: number; /**< 水印高度。如果没有指定,内部会根据文本内容自动计算。*/
offset_x?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的水平距离。*/
offset_y?: number; /**< 水印在当前视频帧的偏移值。距视频左上角的垂直距离。*/
}
/** 系统本端视频水印配置。*/
export interface NERtcVideoWatermarkConfig {
watermark_type?: NERtcWatermarkType; /**< 视频水印类型。*/
image_watermarks?: NERtcVideoWatermarkImageConfig; /**< 图片水印配置参数。*/
text_watermarks?: NERtcVideoWatermarkTextConfig; /**< 文字水印配置参数。*/
timestamp_watermark?: NERtcVideoWatermarkTimestampConfig; /**< 时间戳水印配置参数。*/
}
/** 本地录制配置项。*/
export interface NERtcLocalRecordingConfig {
file_path: string; /**< 录制文件在本地保存的绝对路径。精确到文件名及格式且不能为空。包含格式类型不能超过 512,目前只支持 .mp4,必须要有读写权限。*/
file_name: string; /**< 录制文件保存名称。不能大于 128 chars。如果不为空,保存文件的实际名称为 fileName_{uid}_(n).mp4 或者 fileName.mp4。*/
width?: number; /**< 生成的 mp4 等画面的宽。*/
height?: number; /**< 生成的 mp4 等画面的高。*/
framerate?: number; /**< 设置所录视频的文件帧率,取值范围:1 - 60,默认 30。*/
record_file_type?: number; /**< 录制类型,0:flv,1:音视频混流,2:flv 转 mp4,3:录制默认 flv 然后转切 mp4。默认值为空。*/
remux_to_mp4?: boolean; /**< 录像文件合并参数 mp4 或 flv。默认 false(合并为 flv)。*/
video_merge?: boolean; /**< true:音视频混流。false:单视频流加音视频混流。建议设置为 true。*/
record_audio?: boolean; /**< 是否录制音频流。*/
audio_format?: number; /**< 如果配置了采集音频此参数才起效,0 代表采集 aac 数据。*/
record_video?: boolean; /**< 是否录制视频流。*/
video_record_mode?: number; /**< 录制视频使用模式,1 为录制本地流文件模式。*/
watermark_list?: Array<NERtcVideoWatermarkConfig>; /**< 水印配置数组。*/
cover_file_path?: string; /**< 本地录制文件的封面图的绝对路径,如果不设置默认全黑或者按照默认布局规则计算封面图。*/
cover_watermark_list?: Array<NERtcVideoWatermarkConfig>; /**< 本地录制封面图水印配置数组。*/
default_cover_file_path?: string; /**< 本地录制文件默认封面图的绝对路径,目前暂不支持传入 URL 或 Asset。*/
}
/** 本地录制的布局配置。*/
export interface NERtcLocalRecordingLayoutConfig {
offset_x?: number; /**< 视频显示区域左上角的横坐标。*/
offset_y?: number; /**< 视频显示区域左上角的纵坐标。*/
width?: number; /**< 画面在主画面的显示宽度,画面右边超出主画面会报错。*/
height?: number; /**< 画面在主画面的显示高度,画面底边超出主画面会报错。*/
scaling_mode?: NERtcVideoScalingMode; /**< 视频比例伸缩缩放模式。*/
watermark_list?: Array<NERtcVideoWatermarkConfig>; /**< 录制视频水印相关的定制参数。*/
is_screen_share?: boolean; /**< 是否是屏幕共享流。*/
bg_color?: number; /**< 用户画面缺省背景色。如果不传则按照默认纯黑。*/
}
/** 参与本次本地录制的各个本地远端流(屏幕或摄像和音频流信息)。*/
export interface NERtcLocalRecordingStreamInfo {
uid: string; /**< 用户 ID。不能为缺省参数,代表着此一路流所从属的 uid。*/
stream_type: NERtcVideoStreamType; /**< 视频通道类型,主流或辅流。*/
stream_layer: number; /**< 自定义的各个流分层信息通道号。*/
layout_config: NERtcLocalRecordingLayoutConfig; /**< 流布局配置信息。*/
}
/** @enum NERtcVideoCropMode 视频画面裁剪模式。*/
export declare enum NERtcVideoCropMode {
kNERtcVideoCropModeDefault = 0,
kNERtcVideoCropMode16x9 = 1,
kNERtcVideoCropMode4x3 = 2,
kNERtcVideoCropMode1x1 = 3
}
/** @enum NERtcVideoFramerateType 视频帧率。*/
export declare enum NERtcVideoFramerateType {
kNERtcVideoFramerateFpsDefault = 0,
kNERtcVideoFramerateFps_7 = 7,
kNERtcVideoFramerateFps_10 = 10,
kNERtcVideoFramerateFps_15 = 15,
kNERtcVideoFramerateFps_24 = 24,
kNERtcVideoFramerateFps_30 = 30,
kNERtcVideoFramerateFps_60 = 60
}
/** @enum NERtcDegradationPreference 视频编码策略。*/
export declare enum NERtcDegradationPreference {
kNERtcDegradationDefault = 0,
kNERtcDegradationMaintainFramerate = 1,
kNERtcDegradationMaintainQuality = 2,
kNERtcDegradationBalanced = 3
}
/** @enum NERtcAudioStreamType 伴音跟随音频主流还是辅流,默认跟随主流。*/
export declare enum NERtcAudioStreamType {
kNERtcAudioStreamTypeMain = 0,
kNERtcAudioStreamTypeSub = 1
}
/** @enum NERtcDistanceRolloffModel 空间音效衰减模式 */
export declare enum NERtcDistanceRolloffModel {
kNERtcDistanceRolloffLogarithmic = 0,
kNERtcDistanceRolloffLinear = 1,
kNERtcDistanceRolloffNone = 2,
kNERtcDistanceRolloffLinearOnly = 3
}
/** 视频配置属性。*/
export interface NERtcVideoConfig {
max_profile: NERtcVideoProfileType; /**< 视频编码的分辨率,用于衡量编码质量。*/
width: number; /**< 视频编码自定义分辨率之宽度。width为0表示使用max_profile*/
height: number; /**< 视频编码自定义分辨率之高度。height为0表示使用max_profile*/
crop_mode: NERtcVideoCropMode; /**< 视频画面裁剪模式,默认kNERtcVideoCropModeDefault。*/
framerate: NERtcVideoFramerateType; /**< 视频帧率 */
min_framerate: NERtcVideoFramerateType; /**< 视频最小帧率 */
bitrate: number; /**< 视频编码码率kbps,取0时使用默认值 */
min_bitrate: number; /**< 视频编码码率下限kbps,取0时使用默认值 */
degradation_preference: NERtcDegradationPreference; /**< 编码策略 */
mirror_mode: NERtcVideoMirrorMode; /**< 设置本地视频编码的镜像模式,即本地发送视频的镜像模式,只影响远端用户看到的视频画面。 */
orientation_mode: NERtcVideoOutputOrientationMode; /**< 设置本地视频编码的方向模式,即本地发送视频的方向模式,同时影响本端用户的预览画面和远端用户看到的视频画面。*/
}
/** 创建混音流配置项 */
export interface NERtcCreateAudioMixingOption {
path: string; /**< 本地文件全路径或URL < 256 chars */
loop_count: number; /**< 循环次数, <= 0, 表示无限循环,默认 1 */
send_enabled: boolean; /**< 是否可发送,默认为 true */
send_volume: number; /**< 发送音量。最大为 100(默认)含义(0%-100%)*/
playback_enabled: boolean; /**< 是否可回放,默认为 true */
playback_volume: number; /**< 回放音量。最大为 100(默认)*/
start_timestamp: number; /**< 音乐文件开始播放的时间,UTC 时间戳,即从1970 年 1 月 1 日 0 点 0 分 0 秒开始到事件发生时的毫秒数。默认值为 0,表示立即播放。*/
send_with_audio_type: NERtcAudioStreamType; /**< 伴音跟随音频主流还是辅流,默认跟随主流。*/
progress_interval: number; /**< 伴音播放进度回调间隔,单位ms,取值范围为 100~10000, 默认1000ms*/
}
/** 创建音效配置项 */
export interface NERtcCreateAudioEffectOption {
path: string; /**< 本地文件全路径或URL < 256 chars */
loop_count: number; /**< 循环次数, <= 0, 表示无限循环,默认 1 */
send_enabled: boolean; /**< 是否可发送,默认为 true */
send_volume: number; /**< 发送音量。最大为 100(默认)含义(0%-100%)*/
playback_enabled: boolean; /**< 是否可回放,默认为 true */
playback_volume: number; /**< 回放音量。最大为 100(默认)*/
start_timestamp: number; /**< 音乐文件开始播放的时间,UTC 时间戳,即从1970 年 1 月 1 日 0 点 0 分 0 秒开始到事件发生时的毫秒数。默认值为 0,表示立即播放。*/
send_with_audio_type: NERtcAudioStreamType; /**< 伴音跟随音频主流还是辅流,默认跟随主流。*/
progress_interval: number; /**< 伴音播放进度回调间隔,单位ms,取值范围为 100~10000, 默认1000ms*/
}
/** 待共享区域相对于整个屏幕或窗口的位置,如不填,则表示共享整个屏幕或窗口。*/
export interface NERtcRectangle {
x: number; /**< 左上角的横向偏移。*/
y: number; /**< 左上角的纵向偏移。*/
width: number; /**< 待共享区域的宽。*/
height: number; /**< 待共享区域的高。*/
}
/** 屏幕共享编码参数配置。*/
export declare enum NERtcScreenProfileType {
kNERtcScreenProfile480P = 0,
kNERtcScreenProfileHD720P = 1,
kNERtcScreenProfileHD1080P = 2,
kNERtcScreenProfileCustom = 3,
kNERtcScreenProfileNone = 4,
kNERtcScreenProfileMAX = 2
}
/** 视频尺寸。*/
export interface NERtcVideoDimensions {
width: number; /**< 宽度 */
height: number; /**< 高度 */
}
/** 屏幕共享功能的编码策略倾向
- kNERtcSubStreamContentPreferMotion: 内容类型为动画;当共享的内容是视频、电影或游戏时,推荐选择该内容类型
当用户设置内容类型为动画时,按用户设置的帧率处理
- kNERtcSubStreamContentPreferDetails: 内容类型为细节;当共享的内容是图片或文字时,推荐选择该内容类型
当用户设置内容类型为细节时,最高允许用户设置到 10 帧,设置超过 10 帧时,不生效,按 10 帧处理
*/
export declare enum NERtcSubStreamContentPrefer {
kNERtcSubStreamContentPreferMotion = 0,
kNERtcSubStreamContentPreferDetails = 1
}
/** 视频颜色范围。*/
export declare enum NERtcVideoColorSpaceRange {
kNERtcVideoColorSpaceRangeInvalid = 0,
kNERtcVideoColorSpaceRangeLimited = 1,
kNERtcVideoColorSpaceRangeFull = 2,
kNERtcVideoColorSpaceRangeDerived = 3
}
/** 屏幕共享编码参数配置。用于衡量编码质量。一期只支持profile设置。*/
export interface NERtcScreenCaptureParameters {
profile: NERtcScreenProfileType; /**< 屏幕共享编码参数配置。*/
dimensions: NERtcVideoDimensions; /**< 屏幕共享视频发送的最大像素值,kNERtcScreenProfileCustom下生效。*/
frame_rate: number; /**< 共享视频的帧率,kNERtcScreenProfileCustom下生效,单位为 fps;默认值为 5,建议不要超过 15。*/
bitrate: number; /**< 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值。*/
capture_mouse_cursor: boolean; /**< 是否采集鼠标用于屏幕共享。*/
window_focus: boolean; /**< 调用 startScreenCaptureByWindowId 方法共享窗口时,是否将该窗口前置。*/
excluded_window_list: Array<Number>; /**< 待屏蔽窗口的 ID 列表。 */
excluded_window_count: number; /**< 待屏蔽窗口的数量。*/
prefer: NERtcSubStreamContentPrefer; /**< 编码策略倾向。*/
enable_high_performance?: boolean; /**< macOS 高性能模式(共享屏幕生效)。*/
enable_high_light?: boolean; /**< 是否显示 SDK 内置高亮边框。*/
high_light_width?: number; /**< 高亮边框宽度(px)。*/
high_light_color?: number; /**< 高亮边框颜色(ARGB/0xAABBGGRR)。*/
high_light_length?: number; /**< 高亮边框长度(px),-1 表示全包围。*/
exclude_highlight_box?: boolean; /**< 采集显示器时是否排除 SDK 内置高亮框。*/
force_update_data?: boolean; /**< SDK 高亮时是否回调 onScreenCaptureSourceDataUpdate。*/
prefer_color_space_range?: NERtcVideoColorSpaceRange; /**< 共享视频颜色范围。*/
}
/** 媒体优先级类型。*/
export declare enum NERtcMediaPriorityType {
kNERtcMediaPriorityHigh = 50,
kNERtcMediaPriorityNormal = 100
}
export interface NERtcScreenCaptureWindowParam {
window_list: Array<Number>; /**< 待屏蔽窗口的 ID 列表。 */
}
/** 录音音质 */
export declare enum NERtcAudioRecordingQuality {
kNERtcAudioRecordingQualityLow = 0,
kNERtcAudioRecordingQualityMedium = 1,
kNERtcAudioRecordingQualityHigh = 2
}
/** Data structure related to media stream relay.*/
export interface NERtcChannelMediaRelayInfo {
channel_name: String; /**< The name of the destination room to which the media stream is relayed. */
channel_token: String; /**< The token used to connect to the destination room. */
uid: string; /**< The user ID used in the destination room. This ID can be different from the ID used in the current room. */
}
/** Configurations for media stream relay.*/
export interface NERtcChannelMediaRelayConfiguration {
src_infos: NERtcChannelMediaRelayInfo; /**<The information about the current room. */
dest_infos: NERtcChannelMediaRelayInfo[]; /**< The configuration of the destination room. */
dest_count?: number; /**< The number of destination rooms. The default value is 0. */
}
/** Media stream encryption mode. */
export declare enum NERtcEncryptionMode {
kNERtcGMCryptoSM4ECB = 0,
kNERtcEncryptionModeCustom = 1
}
/** Media stream encryption scheme. */
export interface NERtcEncryptionConfig {
mode: NERtcEncryptionMode; /**< Media stream encryption mode. For more information, see NERtcEncryptionMode. */
key: String; /**< Media stream encryption key. The key is of string type. We recommend that you set the key to a string that contains only letters. */
}
/** 直播推流模式 */
export declare enum NERtcLiveStreamMode {
kNERtcLsModeVideo = 0,
kNERtcLsModeAudio = 1
}
/** 直播推流视频裁剪模式 */
export declare enum NERtcLiveStreamVideoScaleMode {
kNERtcLsModeVideoScaleFit = 0,
kNERtcLsModeVideoScaleCropFill = 1
}
/** 直播推流音频采样率 */
export declare enum NERtcLiveStreamAudioSampleRate {
kNERtcLiveStreamAudioSampleRate32000 = 32000,
kNERtcLiveStreamAudioSampleRate44100 = 44100,
kNERtcLiveStreamAudioSampleRate48000 = 48000 /**< (默认)采样率为 48 kHz。*/
}
/** 直播推流音频编码规格 */
export declare enum NERtcLiveStreamAudioCodecProfile {
kNERtcLiveStreamAudioCodecProfileLCAAC = 0,
kNERtcLiveStreamAudioCodecProfileHEAAC = 1 /**< HE-AAC 规格,表示高效音频编码规格。*/
}
/** 直播成员布局 */
export interface NERtcLiveStreamUserTranscoding {
uid: string; /**< 用户id */
video_push: boolean; /**< 是否推送该用户视频流,kNERtcLsModeAudio时无效 */
adaption: NERtcLiveStreamVideoScaleMode; /**< 视频流裁剪模式 */
x: number; /**< 画面离主画面左边距 */
y: number; /**< 画面离主画面上边距 */
width: number; /**< 画面在主画面的显示宽度,画面右边超出主画面会失败 */
height: number; /**< 画面在主画面的显示高度,画面底边超出主画面会失败 */
audio_push: boolean; /**< 是否推送该用户音频流 */
}
/** 图片布局 */
export interface NERtcLiveStreamImageInfo {
url: String; /**< 图片地址 */
x: number; /**< 画面离主画面左边距 */
y: number; /**< 画面离主画面上边距 */
width: number; /**< 画面在主画面的显示宽度,画面右边超出主画面会失败 */
height: number; /**< 画面在主画面的显示高度,画面底边超出主画面会失败 */
}
/** 直播布局 */
export interface NERtcLiveStreamLayout {
width: number; /**< 视频推流宽度 */
height: number; /**< 视频推流高度 */
background_color: number; /**< 视频推流背景色,(R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff) */
user_count: number; /**< 成员布局个数 */
users: Array<NERtcLiveStreamUserTranscoding>; /**< 成员布局数组 */
bg_image: NERtcLiveStreamImageInfo; /**< 背景图信息 */
}
export interface NERtcLiveConfig {
single_video_passthrough: boolean; /**< 单路视频透传开关,默认为关闭状态,开启后,如果房间中只有一路视频流输入, 则不对输入视频流进行转码,不遵循转码布局,直接推流 CDN,如果有多个房间成员视频流混合为一路流,则该设置失效,并在恢复为一个成员画面(单路流)时也不会恢复。*/
interrupted_place_image: boolean; /**< 设置是否开启主播占位图模式。开启后会在主播离线的时候用占位图填补主播位置。*/
audio_bitrate: number; /**< 音频推流码率,单位为 kbps,取值范围为 10~192,语音场景建议设置为 64 及以上码率,音乐场景建议设置为 128 及以上码率。 */
sample_rate: NERtcLiveStreamAudioSampleRate; /**< 音频推流采样率。单位为Hz。默认为 kNERtcLiveStreamAudioSampleRate48000,即采样率为 48 kHz。 */
channels: number; /**< 音频推流声道数,默认值为 2 双声道。 */
audio_codec_profile: NERtcLiveStreamAudioCodecProfile; /**< 音频编码规格。默认值 NERtcLiveStreamAudioCodecProfileLCAAC,普通编码规格,0: LC-AAC 规格,表示基本音频编码规格,1: HE-AAC 规格,表示高效音频编码规格 */
}
/** 直播推流任务的配置项。*/
export interface NERtcLiveStreamTaskInfo {
task_id: String; /**< 推流任务ID,为推流任务的唯一标识,用于过程中增删任务操作 < 64 chars*/
stream_url: String; /**< 直播推流地址 <256 chars */
server_record_enabled: Boolean; /**< 服务器录制功能是否开启 */
ls_mode: NERtcLiveStreamMode; /**< 直播推流模式,NERtcLiveStreamMode */
layout: NERtcLiveStreamLayout; /**< 视频布局 */
config: NERtcLiveConfig; /**< 音视频流编码参数等设置。详细信息请参考 NERtcLiveConfig */
}
/** 音频设备链接类型。*/
export declare enum NERtcAudioDeviceTransportType {
kNERtcAudioDeviceTransportTypeUnknown = 0,
kNERtcAudioDeviceTransportTypeBluetooth = 1,
kNERtcAudioDeviceTransportTypeBluetoothA2DP = 2,
kNERtcAudioDeviceTransportTypeBluetoothLE = 3,
kNERtcAudioDeviceTransportTypeUSB = 4,
kNERtcAudioDeviceTransportTypeHDMI = 5,
kNERtcAudioDeviceTransportTypeBuiltIn = 6,
kNERtcAudioDeviceTransportTypeThunderbolt = 7,
kNERtcAudioDeviceTransportTypeAirPlay = 8,
kNERtcAudioDeviceTransportTypeVirtual = 9,
kNERtcAudioDeviceTransportTypeOther = 10
}
/** 摄像头设备链接类型。*/
export declare enum NERtcVideoDeviceTransportType {
kNERtcVideoDeviceTransportTypeUnknown = 0,
kNERtcVideoDeviceTransportTypeUSB = 1,
kNERtcVideoDeviceTransportTypeVirtual = 2,
kNERtcVideoDeviceTransportTypeOther = 3
}
/** 设备信息 */
export interface NERtcDevice {
device_id: string; /**< 设备 ID */
device_name: string; /**< 设备名称 */
transport_type: number; /**< 设备连接类型 */
suspected_unavailable: boolean; /**< 设备是否可用 */
system_default_device: boolean; /**< 是否为系统默认设备 */
}
/** 参会者角色类型 */
export declare enum NERtcClientRole {
kNERtcClientRoleBroadcaster = 0,
kNERtcClientRoleAudience = 1
}
/** SEI 发送的流通道类型 */
export declare enum NERtcStreamChannelType {
kNERtcStreamChannelTypeMainStream = 0,
kNERtcStreamChannelTypeSubStream = 1
}
/** 摄像头采集配置 */
export interface NERtcCameraCaptureConfig {
captureWidth: number; /**< 本地采集的视频宽度,单位为 px。*/
captureHeight: number; /**< 本地采集的视频高度,单位为 px)。*/
}
/** 视频流类型。*/
export declare enum NERtcVideoStreamType {
kNERtcVideoStreamMain = 0,
kNERtcVideoStreamSub = 1,
kNERtcVideoStreamThird = 2,
kNERtcVideoStreamFourth = 3 /**< 第四个自定义扩展流。*/
}
/** 本地视频发送的流通道个数。*/
export declare enum NERtcVideoStreamLayerCount {
kNERtcVideoStreamLayerCountOne = 1,
kNERtcVideoStreamLayerCountTwo = 2,
kNERtcVideoStreamLayerCountThree = 3 /**< 3个通道。*/
}
/** 通话相关的统计信息。*/
export interface NERtcStats {
cpu_app_usage: number; /**< 当前 App 的 CPU 使用率 (%)。*/
cpu_idle_usage: number; /**< 当前系统的 CPU 空闲率 (%)。*/
cpu_total_usage: number; /**< 当前系统的 CPU 使用率 (%)。*/
memory_app_usage: number; /**< 当前App的内存使用率 (%)。*/
memory_total_usage: number; /**< 当前系统的内存使用率 (%)。*/
memory_app_kbytes: number; /**< 当前App的内存使用量 (KB)。*/
total_duration: number; /**< 通话时长(秒)。*/
tx_bytes: number; /**< 发送字节数,累计值。(bytes)*/
rx_bytes: number; /**< 接收字节数,累计值。(bytes)*/
tx_audio_bytes: number; /**< 音频发送字节数,累计值。(bytes)*/
tx_video_bytes: number; /**< 视频发送字节数,累计值。(bytes)*/
rx_audio_bytes: number; /**< 音频接收字节数,累计值。(bytes)*/
rx_video_bytes: number; /**< 视频接收字节数,累计值。(bytes)*/
tx_audio_kbitrate: number; /**< 音频发送码率。(kbps)*/
rx_audio_kbitrate: number; /**< 音频接收码率。(kbps)*/
tx_video_kbitrate: number; /**< 视频发送码率。(kbps)*/
rx_video_kbitrate: number; /**< 视频接收码率。(kbps)*/
up_rtt: number; /**< 上行平均往返时延rtt(ms) */
tx_audio_packet_loss_rate: number; /**< 本地上行音频实际丢包率。(%) */
tx_video_packet_loss_rate: number; /**< 本地上行视频实际丢包率。(%) */
tx_audio_packet_loss_sum: number; /**< 本地上行音频实际丢包数。 */
tx_video_packet_loss_sum: number; /**< 本地上行视频实际丢包数。 */
tx_audio_jitter: number; /**< 本地上行音频抖动计算。(ms) */
tx_video_jitter: number; /**< 本地上行视频抖动计算。(ms) */
rx_audio_packet_loss_rate: number; /**< 本地下行音频实际丢包率。(%) */
rx_video_packet_loss_rate: number; /**< 本地下行视频实际丢包率。(%) */
rx_audio_packet_loss_sum: number; /**< 本地下行音频实际丢包数。 */
rx_video_packet_loss_sum: number; /**< 本地下行视频实际丢包数。 */
rx_audio_jitter: number; /**< 本地下行音频抖动计算。(ms) */
rx_video_jitter: number; /**< 本地下行视频抖动计算。(ms) */
}
/** 本地视频流上传统计信息。*/
export interface NERtcVideoSendStats {
width: number; /**< 视频流宽(像素)。*/
height: number; /**< 视频流高(像素)。*/
capture_frame_rate: number; /**< 视频采集帧率。*/
encoder_frame_rate: number; /**< (上次统计后)编码帧率 (fps)。*/
sent_bitrate: number; /**< (上次统计后)发送码率(Kbps)。*/
sent_frame_rate: number; /**< (上次统计后)发送帧率 (fps)。*/
target_bitrate: number; /**< (上次统计后)编码器目标码率(Kbps)。*/
}
/** 远端视频流的统计信息。*/
export interface NERtcVideoRecvStats {
uid: string; /**< 用户 ID,指定是哪个用户的视频流。*/
width: number; /**< 视频流宽(像素)。*/
height: number; /**< 视频流高(像素)。*/
received_bitrate: number; /**< (上次统计后)接收到的码率(Kbps)。*/
packet_loss_rate: number; /**< 下行丢包率(%)。*/
decoder_frame_rate: number; /**< (上次统计后)解码帧率 (fps)。*/
render_frame_rate: number; /**< (上次统计后)渲染帧率 (fps)。*/
received_frame_rate: number; /**< (上次统计后)接收到的帧率 (fps)。*/
total_frozen_time: number; /**< 用户的下行视频卡顿累计时长(ms)。*/
frozen_rate: number; /**< 用户的下行视频平均卡顿率(%)。*/
}
/** 本地音频流上传统计信息。*/
export interface NERtcAudioSendStats {
num_channels: number; /**< 当前采集声道数。*/
sent_sample_rate: number; /**< 本地上行音频采样率。*/
sent_bitrate: number; /**< (上次统计后)发送码率(Kbps)。*/
audio_loss_rate: number; /**< 特定时间内的音频丢包率 (%)。*/
rtt: number; /**< RTT。*/
volume: number; /**< 音量,范围为 0(最低)- 100(最高)。*/
}
/** 远端用户的音频统计。*/
export interface NERtcAudioRecvStats {
uid: string; /**< 用户 ID,指定是哪个用户的音频流。*/
received_bitrate: number; /**< (上次统计后)接收到的码率(Kbps)。*/
total_frozen_time: number; /**< 用户的下行音频卡顿累计时长(ms)。*/
frozen_rate: number; /**< 用户的下行音频平均卡顿率(%)。*/
audio_loss_rate: number; /**< 特定时间内的音频丢包率 (%)。*/
volume: number; /**< 音量,范围为 0(最低)- 100(最高)。*/
}
/** @enum NERtcNetworkQualityType 网络质量类型。*/
export declare enum NERtcNetworkQualityType {
kNERtcNetworkQualityUnknown = 0,
kNERtcNetworkQualityExcellent = 1,
kNERtcNetworkQualityGood = 2,
kNERtcNetworkQualityPoor = 3,
kNERtcNetworkQualityBad = 4,
kNERtcNetworkQualityVeryBad = 5,
kNERtcNetworkQualityDown = 6
}
/** 网络质量统计信息。*/
export interface NERtcNetworkQualityInfo {
uid: string; /**< 用户 ID,指定是哪个用户的网络质量统计。*/
tx_quality: NERtcNetworkQualityType; /**< 该用户的上行网络质量,详见 #NERtcNetworkQualityType.*/
rx_quality: NERtcNetworkQualityType; /**< 该用户的下行网络质量,详见 #NERtcNetworkQualityType.*/
}
/** 连接状态 */
export declare enum NERtcConnectionStateType {
kNERtcConnectionStateDisconnected = 1,
kNERtcConnectionStateConnecting = 2,
kNERtcConnectionStateConnected = 3,
kNERtcConnectionStateReconnecting = 4,
kNERtcConnectionStateFailed = 5
}
/** 连接状态变更原因 */
export declare enum NERtcReasonConnectionChangedType {
kNERtcReasonConnectionChangedLeaveChannel = 1,
kNERtcReasonConnectionChangedChannelClosed = 2,
kNERtcReasonConnectionChangedBeKicked = 3,
kNERtcReasonConnectionChangedTimeOut = 4,
kNERtcReasonConnectionChangedJoinChannel = 5,
kNERtcReasonConnectionChangedJoinSucceed = 6,
kNERtcReasonConnectionChangedReJoinSucceed = 7,
kNERtcReasonConnectionChangedMediaConnectionDisconnected = 8,
kNERtcReasonConnectionChangedSignalDisconnected = 9,
kNERtcReasonConnectionChangedRequestChannelFailed = 10,
kNERtcReasonConnectionChangedJoinChannelFailed = 11
}
/** 音频设备类型 */
export declare enum NERtcAudioDeviceType {
kNERtcAudioDeviceTypeUnknown = 0,
kNERtcAudioDeviceTypeRecord = 1,
kNERtcAudioDeviceTypePlayout = 2
}
/** 音频设备状态 */
export declare enum NERtcAudioDeviceState {
kNERtcAudioDeviceStateActive = 0,
kNERtcAudioDeviceStateUnactive = 1
}
/** 混音状态 */
export declare enum NERtcAudioMixingState {
kNERtcAudioMixingStateFinished = 0,
kNERtcAudioMixingStateFailed = 1
}
/** @enum NERtcAudioMixingErrorCode 混音音乐文件错误码。
*/
export declare enum NERtcAudioMixingErrorCode {
kNERtcAudioMixingErrorOK = 0,
kNERtcAudioMixingErrorFatal = 1,
kNERtcAudioMixingErrorCanNotOpen = /**< 伴音不能正常打开*/ 2,
kNERtcAudioMixingErrorDecode = /**<音频解码错误*/ 3,
kNERtcAudioMixingErrorInterrupt = /**<操作中断码*/ 4,
kNERtcAudioMixingErrorHttpNotFound = /**<404 file not found,only for http / https*/ 5,
kNERtcAudioMixingErrorOpen = /**<打开流 / 文件失败*/ 6,
kNERtcAudioMixingErrorNInfo = /**<获取解码信息失败 / 超时*/ 7,
kNERtcAudioMixingErrorNStream = /**<无音频流*/ 8,
kNERtcAudioMixingErrorNCodec = /**<无解码器*/ 9,
kNERtcAudioMixingErrorNMem = /**<无内存*/ 10,
kNERtcAudioMixingErrorCodecOpen = /**<解码器打开失败 / 超时*/ 11,
kNERtcAudioMixingErrorInvalidInfo = /**<无效音频参数(声道、采样率)*/ 12,
kNERtcAudioMixingErrorOpenTimeout = /**<打开流 / 文件超时*/ 13,
kNERtcAudioMixingErrorIoTimeout = /**<网络io超时*/ 14,
kNERtcAudioMixingErrorIo = /**<网络io错误*/ 15
}
/** 视频设备类型 */
export declare enum NERtcVideoDeviceType {
kNERtcVideoDeviceTypeUnknown = 0,
kNERtcVideoDeviceTypeCapture = 1
}
/** 视频设备状态 */
export declare enum NERtcVideoDeviceState {
kNERtcVideoDeviceStateAdded = 0,
kNERtcVideoDeviceStateRemoved = 1
}
/** 声音音量信息。一个数组,包含每个说话者的用户 ID 和音量信息。*/
export interface NERtcAudioVolumeInfo {
uid: string; /**< 说话者的用户 ID。如果返回的 uid 为 0,则默认为本地用户。*/
volume: number; /**< 说话者的音量,范围为 0(最低)- 100(最高)。*/
}
/** 直播推流状态。*/
export declare enum NERtcLiveStreamStateCode {
kNERtcLsStatePushing = 505,
kNERtcLsStatePushFail = 506,
kNERtcLsStatePushStopped = 511,
kNERtcLsStateImageError = 512
}
/** @enum NERtcMediaStatsEventName SDK 向 App 上报统计信息 */
export declare enum NERtcMediaStatsEventName {
RtcStats = "onRtcStats",
LocalAudioStats = "onLocalAudioStats",
RemoteAudioStats = "onRemoteAudioStats",
LocalVideoStats = "onLocalVideoStats",
RemoteVideoStats = "onRemoteVideoStats",
NetworkQuality = "onNetworkQuality"
}
/** 4.1.1 */
/** 变声 预设值 */
export declare enum NERtcVoiceChangerType {
kNERtcVoiceChangerOff = 0,
kNERtcVoiceChangerRobot = 1,
kNERtcVoiceChangerGaint = 2,
kNERtcVoiceChangerHorror = 3,
kNERtcVoiceChangerMature = 4,
kNERtcVoiceChangerManToWoman = 5,
kNERtcVoiceChangerWomanToMan = 6,
kNERtcVoiceChangerManToLoli = 7,
kNERtcVoiceChangerWomanToLoli = 8 /**< 女变萝莉 */
}
/** 预设的美声效果 */
export declare enum NERtcVoiceBeautifierType {
kNERtcVoiceBeautifierOff = 0,
kNERtcVoiceBeautifierMuffled = 1,
kNERtcVoiceBeautifierMellow = 2,
kNERtcVoiceBeautifierClear = 3,
kNERtcVoiceBeautifierMagnetic = 4,
kNERtcVoiceBeautifierRecordingstudio = 5,
kNERtcVoiceBeautifierNature = 6,
kNERtcVoiceBeautifierKTV = 7,
kNERtcVoiceBeautifierRemote = 8,
kNERtcVoiceBeautifierChurch = 9,
kNERtcVoiceBeautifierBedroom = 10,
kNERtcVoiceBeautifierLive = 11
}
/** 音效均衡波段的中心频率 */
export declare enum NERtcVoiceEqualizationBand {
kNERtcVoiceEqualizationBand_31 = 0,
kNERtcVoiceEqualizationBand_62 = 1,
kNERtcVoiceEqualizationBand_125 = 2,
kNERtcVoiceEqualizationBand_250 = 3,
kNERtcVoiceEqualizationBand_500 = 4,
kNERtcVoiceEqualizationBand_1K = 5,
kNERtcVoiceEqualizationBand_2K = 6,
kNERtcVoiceEqualizationBand_4K = 7,
kNERtcVoiceEqualizationBand_8K = 8,
kNERtcVoiceEqualizationBand_16K = 9
}
/** 3D音效算法中坐标信息 */
export interface NERtcSpatializerPositionInfo {
speaker_position: Array<Number>; /**< 发声坐标 */
speaker_quaternion: Array<Number>; /**< 发声旋转角度四元数 */
head_position: Array<Number>; /**< 头部听觉坐标 */
head_quaternion: Array<Number>; /**< 头部听觉旋转角度四元数 */
}
/** 空间音效房间大小 */
export declare enum NERtcSpatializerRoomCapacity {
kNERtcSpatializerRoomCapacitySmall = 0,
kNERtcSpatializerRoomCapacityMedium = 1,
kNERtcSpatializerRoomCapacityLarge = 2,
kNERtcSpatializerRoomCapacityHuge = 3,
kNERtcSpatializerRoomCapacityNone = 4
}
/** 空间音效中房间材质名称 */
export declare enum NERtcSpatializerMaterialName {
kNERtcSpatializerMaterialTransparent = 0,
kNERtcSpatializerMaterialAcousticCeilingTiles = 1,
kNERtcSpatializerMaterialBrickBare = 2,
kNERtcSpatializerMaterialBrickPainted = 3,
kNERtcSpatializerMaterialConcreteBlockCoarse = 4,
kNERtcSpatializerMaterialConcreteBlockPainted = 5,
kNERtcSpatializerMaterialCurtainHeavy = 6,
kNERtcSpatializerMaterialFiberGlassInsulation = 7,
kNERtcSpatializerMaterialGlassThin = 8,
kNERtcSpatializerMaterialGlassThick = 9,
kNERtcSpatializerMaterialGrass = 10,
kNERtcSpatializerMaterialLinoleumOnConcrete = 11,
kNERtcSpatializerMaterialMarble = 12,
kNERtcSpatializerMaterialMetal = 13,
kNERtcSpatializerMaterialParquetOnConcrete = 14,
kNERtcSpatializerMaterialPlasterRough = 15,
kNERtcSpatializerMaterialPlasterSmooth = 16,
kNERtcSpatializerMaterialPlywoodPanel = 17,
kNERtcSpatializerMaterialPolishedConcreteOrTile = 18,
kNERtcSpatializerMaterialSheetrock = 19,
kNERtcSpatializerMaterialWaterOrIceSurface = 20,
kNERtcSpatializerMaterialWoodCeiling = 21,
kNERtcSpatializerMaterialWoodPanel = 22,
kNERtcSpatializerMaterialUniform = 23
}
/** 3D音效房间属性 */
export interface NERtcSpatializerRoomProperty {
room_capacity: NERtcSpatializerRoomCapacity; /**< 房间大小 #NERtcSpatializerRoomCapacity ,默认值 #kNERtcSpatializerRoomCapacitySmall */
material: NERtcSpatializerMaterialName; /**< 房间材质 #NERtcSpatializerMaterialName ,默认值 #kNERtcSpatializerMaterialTransparent */
reflection_scalar: number; /**< 反射比例,默认值1.0 */
reverb_gain: number; /**< 混响增益比例因子,默认值1.0 */
reverb_time: number; /**< 混响时间比例因子,默认值1.0 */
reverb_brightness: number; /**< 混响亮度,默认值1.0 */
}
/** 空间音效渲染模式 */
export declare enum NERtcSpatializerRenderMode {
kNERtcSpatializerRenderStereoPanning = 0,
kNERtcSpatializerRenderBinauralLowQuality = 1,
kNERtcSpatializerRenderBinauralMediumQuality = 2,
kNERtcSpatializerRenderBinauralHighQuality = 3,
kNERtcSpatializerRenderRoomEffectsOnly = 4
}
/** 录音位置 */
export declare enum NERtcAudioRecordingPosition {
kNERtcAudioRecordingPositionMixedRecordingAndPlayback = 0,
kNERtcAudioRecordingPositionRecording = 1,
kNERtcAudioRecordingPositionMixedPlayback = 2
}
/** 录音循环时间 */
export declare enum NERtcAudioRecordingCycleTime {
kNERtcAudioRecordingCycleTime0 = 0,
kNERtcAudioRecordingCycleTime10 = 10,
kNERtcAudioRecordingCycleTime60 = 60,
kNERtcAudioRecordingCycleTime360 = 360,
kNERtcAudioRecordingCycleTime900 = 900
}
/** 录音配置 */
export interface NERtcAudioRecordingConfiguration {
file_path: string; /**< 录音文件路径 */
sample_rate: number; /**< 采样率 */
quality: NERtcAudioRecordingQuality; /**< 录音质量 */
position: NERtcAudioRecordingPosition; /**< 录音位置 */
cycle_time: NERtcAudioRecordingCycleTime; /**< 循环时间 */
}
/** 自定义背景图片的类型。 */
export declare enum NERtcBackgroundSourceType {
kNERtcBackgroundColor = 1,
kNERtcBackgroundImage = 2
}
/** 自定义背景图像*/
export interface VirtualBackgroundSource {
background_source_type: NERtcBackgroundSourceType; /**< 自定义背景图片的类型*/
color: string; /**< 自定义背景图像的颜色。格式为不带#号的十六进制字符串,如 'ffffff' 表示白色,'000000' 表示黑色。仅 kNERtcBackgroundColor 类型时生效。C++ 层用 sscanf(..., "%x") 解析,必须传字符串而非数字。 */
source: string; /**< 自定义背景图片或视频的本地绝对路径。支持 PNG、JPG、MOV、MP4 格式。*/
}
/** 拉流回调 */
export declare type NERtcPullExternalAudioFrameCb = (data: ArrayBuffer, length: number) => void;
/** 截图回调 */
export declare type NERtcTakeSnapshotCallback = (errorCode: number, image: string) => void;
/** 混响参数 */
export interface NERtcReverbParam {
wetGain: number; /**< 湿信号,取值范围为 0 ~ 1,默认值为 0.0f。*/
dryGain: number; /**< 干信号,取值范围为 0 ~ 1,默认值为 1.0f。 */
damping: number; /**< 混响阻尼,取值范围为 0 ~ 1,默认值为 1.0f。 */
roomSize: number; /**< 房间大小,取值范围为 0.1 ~ 2,默认值为 0.1f。 */
decayTime: number; /**< 持续强度(余响),取值范围为 0.1 ~ 20,默认值为 0.1f。 */
preDelay: number; /**< 延迟长度,取值范围为 0 ~ 1,默认值为 0.0f。 */
}
/** 尺寸 */
export interface NERtcSize {
width: number; /**< The target width (px) of the thumbnail or icon. The default value is 0.*/
height: number; /**< The target height (px) of the thumbnail or icon. The default value is 0. */
}
/** 尺寸 */
/** 屏幕采集源信息(Electron环境) */
export interface CaptureSoureInfo {
source_id: number; /**< 屏幕或窗口等采集源的 ID */
type: number; /**< 采集源的类型,0-窗口 1-屏幕 2-自定义 */
source_name: string; /**< 采集源的名称 */
}
/** 功能类型 */
export declare enum NERtcFeatureType {
kNERTCVirtualBackground = 0 /**< 虚拟背景*/
}
/** 屏幕共享状态。*/
export declare enum NERtcScreenCaptureStatus {
kScreenCaptureStatusStart = 1,
kScreenCaptureStatusPause = 2,
kScreenCaptureStatusResume = 3,
kScreenCaptureStatusStop = 4,
kScreenCaptureStatusCovered = 5,
kScreenCaptureStatusAbort = 6
}
/** 屏幕分享自定义高亮框的设置动作。 */
export declare enum NERtcScreenCaptureCustomHLBorderAction {
kSetPos = 0,
kSetAbove = 1,
kSetBelow = 2,
kHide = 3,
kShow = 4
}
/** 屏幕共享采集对象发生变化返回的信息。*/
export interface NERtcScreenCaptureSourceData {
type: CaptureSoureInfo; /**< 信息源类型:-1-未知,0-窗口,1-屏幕,2-自定义。*/
source_id: number; /**< 屏幕分享源的 ID。*/
status: NERtcScreenCaptureStatus; /**< 屏幕分享状态。*/
action: NERtcScreenCaptureCustomHLBorderAction; /**< 屏幕分享自定义高亮框的设置动作,结合 capture_rect 使用。*/
level: number; /**< 屏幕分享源的层级,仅用于 macOS。*/
capture_rect: NERtcRectangle; /**< 屏幕分享源的采集范围,可用于设置用户自定义高亮框的位置。*/
}
/** 解码前媒体类型。*/
export declare enum NERtcPreDecodeMediaType {
kNERtcPreDecodeMediaTypeAudio = 0,
kNERtcPreDecodeMediaTypeVideo = 1,
kNERtcPreDecodeMediaTypeUnknown = 100
}
/** 解码前视频详细信息。*/
export interface NERtcPreDecodeVideoInfo {
width: number; /**< 视频宽。*/
height: number; /**< 视频高。*/
is_key_frame: boolean; /**< 是否为关键帧。*/
}
/** 解码前音频详细信息。*/
export interface NERtcPreDecodeAudioInfo {
per_time_ms: number; /**< 音频单帧播放时长,单位为毫秒。*/
toc: number; /**< 音频帧包含的数据量信息。*/
}
/** 解码前媒体帧信息。*/
export interface NERtcPreDecodeFrameInfo {
media_type: NERtcPreDecodeMediaType; /**< 媒体数据类型。*/
uid: string; /**< 用户 ID。*/
timestamp_ms: number; /**< 时间戳,单位为毫秒。*/
length: number; /**< 数据长度。*/
data: Uint8Array; /**< 数据指针。*/
is_main_stream: boolean; /**< 是否为主流。*/
codec: string; /**< 编码器名称。*/
video_info: NERtcPreDecodeVideoInfo; /**< 解码前视频详细信息,media_type 为视频时有效。*/
audio_info: NERtcPreDecodeAudioInfo; /**< 解码前音频详细信息,media_type 为音频时有效。*/
}
/** 视频数据类型。*/
export declare enum NERtcVideoType {
kNERtcVideoTypeI420 = 0,
kNERtcVideoTypeNV12 = 1,
kNERtcVideoTypeNV21 = 2,
kNERtcVideoTypeBGRA = 3,
kNERtcVideoTypeARGB = 4,
kNERtcVideoTypeCVPixelBuffer = 5,
kNERtcVideoTypeRGBA = 6
}
/** 视频帧系统回调数据。*/
export interface NERtcVideoCallbackFrame {
type: NERtcVideoType; /**< 数据类型。*/
width: number; /**< 宽度。*/
height: number; /**< 高度。*/
count: number; /**< 数据平面的个数,如 I420 为 3,NV12 为 2。*/
rotation: number; /**< 画面旋转角度。*/
offsets: Array<number>; /**< 各个数据平面的偏移量数组。*/
strides: Array<number>; /**< 各个数据平面的步进长度数组。*/
data?: Uint8Array; /**< 视频帧数据 Buffer。*/
}
/** 视频帧数据。*/
export interface NERtcVideoFrame {
format: NERtcVideoType; /**< 视频数据类型。*/
width: number; /**< 宽度。*/
height: number; /**< 高度。*/
rotation: number; /**< 画面旋转角度。*/
timestamp: number; /**< 时间戳。*/
buffer: ArrayBuffer; /**< 视频原数据。*/
}
/** 外部输入的编码后视频帧。*/
export interface NERtcVideoEncodedFrame {
codec_type: number; /**< 视频编解码器类型。*/
frame_type: number; /**< 编码后视频帧类型。0:未知,1:IDR,2:I帧,3:P帧。*/
nal_length: Array<number>; /**< 编码后视频帧所有的NAL长度数组。*/
nal_data: ArrayBuffer; /**< 编码后视频帧数据,包含所有NAL的数据。*/
timestamp_us: number; /**< 时间戳,单位为微秒。*/
width: number; /**< 视频宽度。*/
height: number; /**< 视频高度。*/
}
/** 编码后音频帧数据。*/
export interface NERtcAudioEncodedFrame {
data: ArrayBuffer; /**< 音频数据缓冲区。*/
timestamp_us: number; /**< 时间戳,单位微秒。*/
sample_rate: number; /**< 采样率。*/
channels: number; /**< 声道数。*/
samples_per_channel: number; /**< 每个声道的采样数据量。*/
encoded_len?: number; /**< 编码后的数据长度。*/
encoded_timestamp?: number; /**< 编码后的时间戳。*/
payload_type?: number; /**< Payload 类型。*/
rms_level?: number; /**< 音频能量水平(RMS)。*/
}
export interface NERtcEngineAPI {
initialize(context: NERtcEngineContext): number;
release(): void;
setClientRole(role: NERtcClientRole): number;
setChannelProfile(profile: NERtcChannelProfileType): number;
joinChannel(token: String, channelName: String, uid: string): number;
joinChannelWithOptions(token: string, channelName: string, uid: string, channelOptions: NERtcJoinChannelOptions): number;
leaveChannel(): number;
enableLocalAudio(enabled: Boolean): number;
setupVideoCanvas(uid: string, enable: boolean): number;
setupRemoteVideoStreamCanvas(uid: string, enable: boolean, streamType: NERtcVideoStreamType): number;
enableLocalVideo(enabled: boolean): number;
enableLocalVideoWithType(streamType: NERtcVideoStreamType, enabled: boolean): number;
enableLocalVideoWithType(enabled: boolean, streamType: NERtcVideoStreamType): number;
setExternalVideoSource(enable: boolean): number;
setExternalVideoSourceEx(type: NERtcVideoStreamType, enable: boolean): number;
pushExternalVideoFrame(frame: NERtcVideoFrame): number;
pushExternalVideoFrameWithType(type: NERtcVideoStreamType, frame: NERtcVideoFrame): number;
pushExternalVideoEncodedFrame(type: NERtcVideoStreamType, frame: NERtcVideoEncodedFrame): number;
setExternalAudioSource(enable: boolean, sample_rate: number, channels: number): number;
setExternalAudioRender(enable: boolean, sample_rate: number, channels: number): number;
pullExternalAudioFrame(length: number, callback: (data: ArrayBuffer) => void): number;
pushExternalAudioFrame(frame: NERtcAudioFrame): number;
pushExternalAudioEncodedFrame(frame: NERtcAudioEncodedFrame): number;
setExternalSubStreamAudioSource(enable: boolean, sample_rate: number, channels: number): number;
pushExternalSubStreamAudioFrame(frame: NERtcAudioFrame): number;
pushExternalSubStreamAudioEncodedFrame(frame: NERtcAudioEncodedFrame): number;
subscribeRemoteVideoStream(uid: string, streamType: NERtcRemoteVideoStreamType, subscribe: boolean): number;
subscribeRemoteVideoStreamEx(uid: string, streamType: NERtcVideoStreamType, subscribeType: NERtcRemoteVideoStreamType, subscribe: boolean): number;
setLocalVideoWatermarkConfigs(enable: boolean, streamType: NERtcVideoStreamType, config: any): number;
getConnectionState(): NERtcConnectionStateType;
muteLocalAudioStream(mute: boolean): number;
enableLocalSubStreamAudio(enable: boolean): number;
muteLocalSubStreamAudio(mute: boolean): number;
setAudioProfile(profile: NERtcAudioProfileType, scenario: NERtcAudioScenarioType): number;
setAudioScenario(scenario: NERtcAudioScenarioType): number;
setAINSMode(mode: number): number;
setAudioEffectPreset(preset: number): number;
setVoiceBeautifierPreset(preset: number): number;
setLocalVoicePitch(pitch: number): number;
setLocalVoiceEqualization(band: number, gain: number): number;
subscribeRemoteAudioStream(uid: string, subscribe: boolean): number;
subscribeRemoteSubStreamAudio(uid: string, subscribe: boolean): number;
subscribeAllRemoteAudioStream(subscribe: boolean): number;
setAudioSubscribeOnlyBy(uid_list: Array<string>): number;
setSubscribeAudioAllowlist(uid_list: Array<string>): number;
setSubscribeAudioBlocklist(audioStreamType: NERtcAudioStreamType, uid_list: Array<string>): number;
setStreamAlignmentPrope