agora-rtc-sdk-ng-test
Version:
Agora WebRTC SDK for JavaScript
1,763 lines (1,686 loc) • 262 kB
TypeScript
import { IAudioProcessor } from 'agora-rte-extension';
import { IBaseProcessor } from 'agora-rte-extension';
import { IExtension } from 'agora-rte-extension';
declare const AgoraRTC: IAgoraRTC;
export default AgoraRTC;
/**
* @ignore
*/
declare class AgoraRTCError extends AgoraRTCError_2 {
readonly name: string;
constructor(code: AgoraRTCErrorCode, message?: string, data?: any);
print(level?: "error" | "warning"): AgoraRTCError;
throw(): never;
}
/**
* @ignore
*/
declare class AgoraRTCError_2 extends Error implements IAgoraRTCError {
readonly code: AgoraRTCErrorCode;
readonly message: string;
readonly data?: any;
readonly name: string;
constructor(code: AgoraRTCErrorCode, message?: string, data?: any);
toString(): string;
print(level?: "error" | "warning", logger?: any): AgoraRTCError_2;
throw(logger?: any): never;
}
/**
* AgoraSDK 抛出的错误的 Code
* @ignore
*/
export declare enum AgoraRTCErrorCode {
/**
* 所有用户无法处理的、非预期的错误都使用这个错误码
*/
UNEXPECTED_ERROR = "UNEXPECTED_ERROR",
/** 服务端返回了非预期的响应 */
UNEXPECTED_RESPONSE = "UNEXPECTED_RESPONSE",
TIMEOUT = "TIMEOUT",
/** 非法参数 */
INVALID_PARAMS = "INVALID_PARAMS",
/** 当前设备不可读 */
NOT_READABLE = "NOT_READABLE",
/** 浏览器不支持 */
NOT_SUPPORTED = "NOT_SUPPORTED",
/** 非法操作,比如在加入房间之前发布 */
INVALID_OPERATION = "INVALID_OPERATION",
/** 操作中止,比如在加入房间的中途离开房间 */
OPERATION_ABORTED = "OPERATION_ABORTED",
/** 安全策略限制 */
WEB_SECURITY_RESTRICT = "WEB_SECURITY_RESTRICT",
/** P2P信令交互过程中出现异常 */
EXCHANGE_SDP_FAILED = "EXCHANGE_SDP_FAILED",
/** P2P添加候选人过程中出现异常 */
ADD_CANDIDATE_FAILED = "ADD_CANDIDATE_FAILED",
/** DataChannel交互过程中出现异常 */
DATACHANNEL_FAILED = "DATACHANNEL_FAILED",
/**
* http post 请求相关
*/
NETWORK_ERROR = "NETWORK_ERROR",
NETWORK_TIMEOUT = "NETWORK_TIMEOUT",
NETWORK_RESPONSE_ERROR = "NETWORK_RESPONSE_ERROR",
/**
* report 相关
*/
API_INVOKE_TIMEOUT = "API_INVOKE_TIMEOUT",
/**
* Device 模块相关
*/
/** 枚举本地设备失败 */
ENUMERATE_DEVICES_FAILED = "ENUMERATE_DEVICES_FAILED",
/** 找不到指定设备 */
DEVICE_NOT_FOUND = "DEVICE_NOT_FOUND",
/**
* Electron 相关
*/
/** 无法获取 Electron 对象 */
ELECTRON_IS_NULL = "ELECTRON_IS_NULL",
/** 无法通过 Electron 获取屏幕共享源 */
ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR = "ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR",
/**
* Stream 相关
*/
/** init 因为其他的 init 操作而中止 */
/** chrome 屏幕共享插件没有响应 */
CHROME_PLUGIN_NO_RESPONSE = "CHROME_PLUGIN_NO_RESPONSE",
/** chrome 屏幕共享插件没有安装 */
CHROME_PLUGIN_NOT_INSTALL = "CHROME_PLUGIN_NOT_INSTALL",
/** 媒体采集的参数不支持 */
MEDIA_OPTION_INVALID = "MEDIA_OPTION_INVALID",
/** 获取媒体设备权限被拒绝 */
PERMISSION_DENIED = "PERMISSION_DENIED",
/** 浏览器不支持该 constraint */
CONSTRAINT_NOT_SATISFIED = "CONSTRAINT_NOT_SATISFIED",
/** 播放时被浏览器自动播放策略阻止 */
/** 创建小流时检测到大流没有视频轨 */
/** 屏幕共享不允许使用大小流 */
/** 轨道被禁用 */
TRACK_IS_DISABLED = "TRACK_IS_DISABLED",
/** 获取 video element 可见状态失败*/
GET_VIDEO_ELEMENT_VISIBLE_ERROR = "GET_VIDEO_ELEMENT_VISIBLE_ERROR",
/** 屏幕共享音频时用户没有点击 **分享音频** */
SHARE_AUDIO_NOT_ALLOWED = "SHARE_AUDIO_NOT_ALLOWED",
/** 使用RTCRtpEncodingParameters 进行小流编码失败*/
LOW_STREAM_ENCODING_ERROR = "LOW_STREAM_ENCODING_ERROR",
/** 设置 rtp encoding parameters 失败 */
SET_ENCODING_PARAMETER_ERROR = "SET_ENCODING_PARAMETER_ERROR",
/** Track 状态不可达 */
TRACK_STATE_UNREACHABLE = "TRACK_STATE_UNREACHABLE",
/**
* Client join 相关
*/
/** 用户提供的 Token 生成函数运行时出现错误 */
/** 通过 string uid allocate 服务返回了非法的 int uid */
INVALID_UINT_UID_FROM_STRING_UID = "INVALID_UINT_UID_FROM_STRING_UID",
/** 尝试了数次均无法获取云代理服务 */
CAN_NOT_GET_PROXY_SERVER = "CAN_NOT_GET_PROXY_SERVER",
/** 尝试了数次均无法获取 gateway 地址 */
CAN_NOT_GET_GATEWAY_SERVER = "CAN_NOT_GET_GATEWAY_SERVER",
/** 从 AP 拿到的网关列表为空 (obsolete after 4.7.0)*/
VOID_GATEWAY_ADDRESS = "VOID_GATEWAY_ADDRESS",
/** UID 冲突,重复的 UID */
UID_CONFLICT = "UID_CONFLICT",
/** multi unilbs 服务,响应解析错误 */
MULTI_UNILBS_RESPONSE_ERROR = "MULTI_UNILBS_RESPONSE_ERROR",
/** 更新 Ticket 请求失败 */
UPDATE_TICKET_FAILED = "UPDATE_TICKET_FAILED",
/** join 过程中 TOKEN 过期了 */
TOKEN_EXPIRE = "TOKEN_EXPIRE",
/**
* Client publish/unpublish 相关
*/
/** 传入了非法的 local track */
INVALID_LOCAL_TRACK = "INVALID_LOCAL_TRACK",
/** 传入了非法的 track */
INVALID_TRACK = "INVALID_TRACK",
/** replaceTrack 等操作时找不到指定的 sender */
SENDER_NOT_FOUND = "SENDER_NOT_FOUND",
/** p2p 建立相关 */
CREATE_OFFER_FAILED = "CREATE_OFFER_FAILED",
SET_ANSWER_FAILED = "SET_ANSWER_FAILED",
ICE_FAILED = "ICE_FAILED",
PC_CLOSED = "PC_CLOSED",
SENDER_REPLACE_FAILED = "SENDER_REPLACE_FAILED",
/** 获取本地RTP能力失败 */
GET_LOCAL_CAPABILITIES_FAILED = "GET_LOCAL_CAPABILITIES_FAILED",
GET_LOCAL_CONNECTION_PARAMS_FAILED = "GET_LOCAL_CONNECTION_PARAMS_FAILED",
SUBSCRIBE_FAILED = "SUBSCRIBE_FAILED",
UNSUBSCRIBE_FAILED = "UNSUBSCRIBE_FAILED",
/** 网关抛出的 P2P 断开 */
GATEWAY_P2P_LOST = "GATEWAY_P2P_LOST",
NO_ICE_CANDIDATE = "NO_ICE_CANDIDATE",
/** 不允许发布多个视频轨道 */
CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS = "CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS",
EXIST_DISABLED_VIDEO_TRACK = "EXIST_DISABLED_VIDEO_TRACK",
/**
* Client subscribe/unsubscribe 相关
*/
/** 找不到指定的订阅用户 */
INVALID_REMOTE_USER = "INVALID_REMOTE_USER",
/** 远端用户没有发布 */
REMOTE_USER_IS_NOT_PUBLISHED = "REMOTE_USER_IS_NOT_PUBLISHED",
/** 相同流的上一个订阅还没有完成 */
/**
* Client 其他
*/
/** 自定义事件上报失败,通常是因为网络原因 */
CUSTOM_REPORT_SEND_FAILED = "CUSTOM_REPORT_SEND_FAILED",
/** 自定义上报太频繁 */
CUSTOM_REPORT_FREQUENCY_TOO_HIGH = "CUSTOM_REPORT_FREQUENCY_TOO_HIGH",
/**
* Stream 混音相关
*/
/** 下载在线音频文件失败 */
FETCH_AUDIO_FILE_FAILED = "FETCH_AUDIO_FILE_FAILED",
/** 读取本地 音频文件失败*/
READ_LOCAL_AUDIO_FILE_ERROR = "READ_LOCAL_AUDIO_FILE_ERROR",
/** 解码音频文件失败 */
DECODE_AUDIO_FILE_FAILED = "DECODE_AUDIO_FILE_FAILED",
/** 音效的 `soundID` 发生冲突 */
/** 找不到指定的音效 ID */
/**
* Gateway 操作相关
*/
/** 请求网关时 WS 断开 */
WS_ABORT = "WS_ABORT",
/** 请求网关前网关就已经断开 */
WS_DISCONNECT = "WS_DISCONNECT",
WS_ERR = "WS_ERR",
/** p2p 拓展通道断开 */
EXTERNAL_SIGNAL_ABORT = "EXTERNAL_SIGNAL_ABORT",
/**
* Live Streaming 相关
*/
/** 无法和推流后台建立连接 */
/** 推流任务已经存在 */
LIVE_STREAMING_TASK_CONFLICT = "LIVE_STREAMING_TASK_CONFLICT",
/** 推流/拉流参数错误 */
LIVE_STREAMING_INVALID_ARGUMENT = "LIVE_STREAMING_INVALID_ARGUMENT",
/** 推流/拉流服务内部错误 */
LIVE_STREAMING_INTERNAL_SERVER_ERROR = "LIVE_STREAMING_INTERNAL_SERVER_ERROR",
/** 推流 URL 被占用 */
LIVE_STREAMING_PUBLISH_STREAM_NOT_AUTHORIZED = "LIVE_STREAMING_PUBLISH_STREAM_NOT_AUTHORIZED",
/** 在非转码推流中调用了转码参数 */
LIVE_STREAMING_TRANSCODING_NOT_SUPPORTED = "LIVE_STREAMING_TRANSCODING_NOT_SUPPORTED",
/** 推流的目标 CDN 出现错误导致推流失败 */
LIVE_STREAMING_CDN_ERROR = "LIVE_STREAMING_CDN_ERROR",
/** 推流超时,请确认目标流是否存在 */
LIVE_STREAMING_INVALID_RAW_STREAM = "LIVE_STREAMING_INVALID_RAW_STREAM",
/** 推流超过 10 路流 */
LIVE_STREAMING_WARN_STREAM_NUM_REACH_LIMIT = "LIVE_STREAMING_WARN_STREAM_NUM_REACH_LIMIT",
/** 推流中的背景图片或者水印地址无法拉取(不影响推流流程) */
LIVE_STREAMING_WARN_FAILED_LOAD_IMAGE = "LIVE_STREAMING_WARN_FAILED_LOAD_IMAGE",
/** 推流请求太频繁(不影响推流流程) */
LIVE_STREAMING_WARN_FREQUENT_REQUEST = "LIVE_STREAMING_WARN_FREQUENT_REQUEST",
/**
* WebGL/美颜相关
*/
/** WebGL 内部错误 */
WEBGL_INTERNAL_ERROR = "WEBGL_INTERNAL_ERROR",
/** 美颜内部错误 */
BEAUTY_PROCESSOR_INTERNAL_ERROR = "BEAUTY_PROCESSOR_INTERNAL_ERROR",
/**
* Cross Channel 相关
*/
/** 等待 status 回调出错 */
CROSS_CHANNEL_WAIT_STATUS_ERROR = "CROSS_CHANNEL_WAIT_STATUS_ERROR",
/** 服务器加入源频道失败 */
CROSS_CHANNEL_FAILED_JOIN_SRC = "CROSS_CHANNEL_FAILED_JOIN_SEC",
/** 服务器加入目标频道失败 */
CROSS_CHANNEL_FAILED_JOIN_DEST = "CROSS_CHANNEL_FAILED_JOIN_DEST",
/** 源频道发送数据失败 */
CROSS_CHANNEL_FAILED_PACKET_SENT_TO_DEST = "CROSS_CHANNEL_FAILED_PACKET_SENT_TO_DEST",
/** 服务器回应出错 */
CROSS_CHANNEL_SERVER_ERROR_RESPONSE = "CROSS_CHANNEL_SERVER_ERROR_RESPONSE",
/**
* AVC SEI 相关
*/
/** 需要编码的 SEI 数据超过了最大大小 */
METADATA_OUT_OF_RANGE = "METADATA_OUT_OF_RANGE",
LOCAL_AEC_ERROR = "LOCAL_AEC_ERROR",
/** 插件不合法 */
INVALID_PLUGIN = "INVALID_PLUGIN",
/** 抛出断开P2P的错误来让未执行完成的P2P操作结束*/
DISCONNECT_P2P = "DISCONNECT_P2P",
/** imageData转换为Blob时失败 */
CONVERTING_IMAGEDATA_TO_BLOB_FAILED = "CONVERTING_IMAGEDATA_TO_BLOB_FAILED",
CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED = "CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED",
/** datachannel相关 */
INIT_DATACHANNEL_TIMEOUT = "INIT_DATACHANNEL_TIMEOUT",
CREATE_DATACHANNEL_ERROR = "CREATE_DATACHANNEL_ERROR",
DATACHANNEL_CONNECTION_TIMEOUT = "DATACHANNEL_CONNECTION_TIMEOUT",
PROHIBITED_OPERATION = "PROHIBITED_OPERATION",
/** 鉴黄上传失败 */
IMAGE_MODERATION_UPLOAD_FAILED = "IMAGE_MODERATION_UPLOAD_FAILED",
/** p2p datastream传输消息失败 */
P2P_MESSAGE_FAILED = "P2P_MESSAGE_FAILED"
}
/**
* 当前通话的统计信息,可以通过 [AgoraRTCClient.getRTCStats]{@link IAgoraRTCClient.getRTCStats} 获取。
* @public
*/
export declare interface AgoraRTCStats {
/**
* 在当前频道内的时长,单位为秒。
*/
Duration: number;
/**
* 音视频总接收码率,单位为 bps,瞬间值。
*/
RecvBitrate: number;
/**
* 接收字节数,累计值。
*/
RecvBytes: number;
/**
* 音视频总发送码率,单位为 bps,瞬间值。
*/
SendBitrate: number;
/**
* 发送字节数,累计值。
*/
SendBytes: number;
/**
* 通信场景下,该值为当前频道内的用户人数。
*
* 直播场景下,如果本地用户为主播,该值为当前频道内的主播人数;如果本地用户为观众,该值为当前频道内的主播人数 + 1。
*/
UserCount: number;
/**
* SDK 到声网边缘服务器的 RTT (Round-Trip Time),单位 ms。
*/
RTT: number;
/**
* 上行可用带宽估计,单位为 Kbps。
*/
OutgoingAvailableBandwidth: number;
}
declare enum AppType {
APP_TYPE_INVALID_VALUE = -1,
APP_TYPE_NATIVE = 0,
APP_TYPE_NATIVE_COCOS = 1,
APP_TYPE_NATIVE_UNITY = 2,
APP_TYPE_NATIVE_ELECTRON = 3,
APP_TYPE_NATIVE_FLUTTER = 4,
APP_TYPE_NATIVE_UNREAL = 5,
APP_TYPE_NATIVE_XAMARIN = 6,
APP_TYPE_NATIVE_API_CLOUD = 7,
APP_TYPE_NATIVE_REACT_NATIVE = 8,
APP_TYPE_NATIVE_PYTHON = 9,
APP_TYPE_NATIVE_COCOS_CREATOR = 10,
APP_TYPE_NATIVE_RUST = 11,
APP_TYPE_NATIVE_C_SHARP = 12,
APP_TYPE_NATIVE_CEF = 13,
APP_TYPE_NATIVE_UNI_APP = 14,
APP_TYPE_WEBRTC = 1000,
APP_TYPE_WEBRTC_REACT = 1001,
APP_TYPE_WEBRTC_VUE = 1002,
APP_TYPE_WEBRTC_ANGULAR = 1003
}
/**
* 服务器的访问区域。用于设置 [AgoraRTC.setArea]{@link IAgoraRTC.setArea}。
* @public
*/
export declare enum AREAS {
/**
* 中国。
*/
CHINA = "CHINA",
/**
* 亚洲区域(中国大陆除外)。
*/
ASIA = "ASIA",
/**
* 北美区域。
*/
NORTH_AMERICA = "NORTH_AMERICA",
/**
* 欧洲区域。
*/
EUROPE = "EUROPE",
/**
* 日本。
*/
JAPAN = "JAPAN",
/**
* 印度。
*/
INDIA = "INDIA",
/**
* @ignore
*/
KOREA = "KOREA",
/**
* @ignore
*/
HKMC = "HKMC",
/**
* @ignore
*/
US = "US",
/**
* @ignore
*/
OCEANIA = "OCEANIA",
/**
* @ignore
*/
SOUTH_AMERICA = "SOUTH_AMERICA",
/**
* @ignore
*/
AFRICA = "AFRICA",
/**
* @ignore
*/
OVERSEA = "OVERSEA",
/**
* 全球。
*/
GLOBAL = "GLOBAL",
/**
* @ignore
*/
EXTENSIONS = "EXTENSIONS"
}
/**
* 观众延时级别。仅在用户角色为 `"audience"` 时生效。
* - `1`: 低延时。
* - `2`: (默认)超低延时。
* @public
*/
export declare enum AudienceLatencyLevelType {
/**
* 低延时。
*/
AUDIENCE_LEVEL_LOW_LATENCY = 1,
/**
* 超低延时。
*/
AUDIENCE_LEVEL_ULTRA_LOW_LATENCY = 2,
/**
* @ignore
*/
AUDIENCE_LEVEL_SYNC_LATENCY = 3
}
declare const AUDIO_ENCODER_CONFIG_SETTINGS: {
speech_low_quality: AudioEncoderConfiguration;
speech_standard: AudioEncoderConfiguration;
music_standard: AudioEncoderConfiguration;
standard_stereo: AudioEncoderConfiguration;
high_quality: AudioEncoderConfiguration;
high_quality_stereo: AudioEncoderConfiguration;
};
declare enum AudioCodec {
opus = "opus",
pcma = "pcma",
pcmu = "pcmu",
g722 = "g722"
}
/**
* 定义音频编码配置的对象。
*
* 用于创建音频流时指定自定义的编码配置。
*
* 你可以在 [AgoraRTC.createCustomAudioTrack]{@link IAgoraRTC.createCustomAudioTrack}、
* [AgoraRTC.createMicrophoneAudioTrack]{@link IAgoraRTC.createMicrophoneAudioTrack} 或
* [AgoraRTC.createBufferSourceAudioTrack]{@link IAgoraRTC.createBufferSourceAudioTrack} 方法中传入该配置对象来自定义本地音频的编码配置。
*/
export declare interface AudioEncoderConfiguration {
/**
* 音频采样率,单位为 Hz。
*/
sampleRate?: number;
/**
* 音频采样大小。
*/
sampleSize?: number;
/**
* 是否开启立体声。
*/
stereo?: boolean;
/**
* 音频码率,单位为 Kbps。
*/
bitrate?: number;
}
/**
* SDK 预设的 [AudioEncoderConfiguration]{@link AudioEncoderConfiguration} 配置。
*
* 你可以在以下方法中传入预设值来控制本地音频的编码配置:
* - [AgoraRTC.createCustomAudioTrack]{@link IAgoraRTC.createCustomAudioTrack}
* - [AgoraRTC.createMicrophoneAudioTrack]{@link IAgoraRTC.createMicrophoneAudioTrack}
* - [AgoraRTC.createBufferSourceAudioTrack]{@link IAgoraRTC.createBufferSourceAudioTrack}
*
* 下表列出了 SDK 所有内置的音频属性配置,SDK 默认使用 `"music_standard"`。
*
* | 音频属性 | 配置 |
* | -------- | --------------- |
* |`"speech_low_quality"`|16 kHz 采样率,单声道,编码码率约 24 Kbps|
* |`"speech_standard"`|32 kHz 采样率,单声道,编码码率约 24 Kbps|
* |`"music_standard"`|48 kHz 采样率,单声道,编码码率约 32 Kbps|
* |`"standard_stereo"`|48 kHz 采样率,双声道,编码码率约 64 Kbps|
* |`"high_quality"`|48 kHz 采样率,单声道, 编码码率约 128 Kbps|
* |`"high_quality_stereo"`|48 kHz 采样率,双声道,编码码率约 192 Kbps|
* @public
*/
export declare type AudioEncoderConfigurationPreset = keyof typeof AUDIO_ENCODER_CONFIG_SETTINGS;
/**
* 音频数据源处理的设置。用于 [startProcessAudioBuffer]{@link IBufferSourceAudioTrack.startProcessAudioBuffer}。
*/
export declare interface AudioSourceOptions {
/**
* 设置循环播放的次数。
*/
cycle?: number;
/**
* 设置是否无限循环。
*/
loop?: boolean;
/**
* 设置开始播放的时间。
*/
startPlayTime?: number;
}
/**
* 音频源数据处理状态,通过 [BufferSourceAudioTrack.on("source-state-change")]{@link IBufferSourceAudioTrack.event_source_state_change} 获取。
*
* - `"stopped"`: 音频源数据处理停止。可能是因为数据处理完毕,也可能是手动触发了停止。
* - `"playing"`: 音频源数据正在处理。
* - `"paused"`: 音频源数据暂停处理。
* @public
*/
export declare type AudioSourceState = "stopped" | "playing" | "paused";
/**
* 创建音频轨道时的配置参数。
*/
declare interface AudioTrackInitConfig {
/**
* 是否开启回声消除:
* - `true`: 开启回声消除。
* - `false`: 不开启回声消除。
*/
AEC?: boolean;
/**
* 是否开启自动增益:
* - `true`: 开启自动增益。
* - `false`: 不开启自动增益。
*/
AGC?: boolean;
/**
* 是否开启噪声抑制:
* - `true`: 开启噪声抑制。
* - `false`: 不开启噪声抑制。
*/
ANS?: boolean;
}
/**
* @ignore
*
* 美颜选项,用于 [setBeautyEffect]{@link ILocalVideoTrack.setBeautyEffect}。
* @public
*/
export declare interface BeautyEffectOptions {
/**
* 平滑度。
*
* 取值范围为 [0.0, 1.0],其中 0.0 表示原始平滑等级,默认值为 0.5。可用来实现祛痘、磨皮等视觉效果。
*/
smoothnessLevel?: number;
/**
* 亮度。
*
* 取值范围为 [0.0, 1.0],其中 0.0 表示原始亮度,默认值为 0.7。可用来实现美白等视觉效果。
*/
lighteningLevel?: number;
/**
* 红色度。
*
* 取值范围为 [0.0, 1.0],其中 0.0 表示原始红色度,默认值为 0.1。可用来实现红润肤色等视觉效果。
*/
rednessLevel?: number;
/**
* 亮度明暗对比度,与 {@link lighteningLevel} 参数搭配使用。可设为:
* - 0: 明暗对比弱。
* - 1: (默认) 原始明暗对比度。
* - 2: 明暗对比强。
*/
lighteningContrastLevel?: 0 | 1 | 2;
}
/**
* 通过本地音频文件/在线音频文件/`AudioBuffer`方式创建音频流时的配置参数,用于 [AgoraRTC.createBufferSourceAudioTrack]{@link IAgoraRTC.createBufferSourceAudioTrack}。
*/
export declare interface BufferSourceAudioTrackInitConfig {
/**
* 音频数据源,支持 3 种类型:
* - `File`: 浏览器标准的 [File](https://developer.mozilla.org/en-US/docs/Web/API/File) 对象,表示一个本地文件。
* - `string`: 表示从线上 HTTPS 地址获取在线音频文件(请确保音频在线地址支持 HTTPS 和 CORS)。
* - `AudioBuffer`: 浏览器标准的 [AudioBuffer](https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer) 对象表示 PCM 原始数据。
*/
source: File | string | AudioBuffer;
/**
* 是否缓存线上文件:
* - `true`: 缓存线上文件。
* - `false`: (默认)不缓存线上文件。
*/
cacheOnlineFile?: boolean;
/**
* 控制音频的编码配置。
*
* 你可以通过 [[AudioEncoderConfigurationPreset]] 传入 SDK 内置的编码配置;也可以通过传入一个 [[AudioEncoderConfiguration]] 来自定义音频编码配置。
*
* > Firefox 不支持设置音频编码码率。
*/
encoderConfig?: AudioEncoderConfiguration | AudioEncoderConfigurationPreset;
}
/**
* 创建摄像头视频流时的配置对象,用于 [AgoraRTC.createCameraVideoTrack]{@link IAgoraRTC.createCameraVideoTrack}。
*/
export declare interface CameraVideoTrackInitConfig {
/**
* 控制视频的编码配置。
*
* 你可以通过以下方式设置该属性:
* - 通过 [[VideoEncoderConfigurationPreset]] 传入 SDK 内置的编码配置。
* - 通过传入一个 [[VideoEncoderConfiguration]] 对象来自定义视频编码配置。
* - 不传或留空,使用 SDK 的默认值 `"480p_1"`(分辨率 640 × 480、帧率 15 fps、码率 500 Kbps)。
*/
encoderConfig?: VideoEncoderConfiguration | VideoEncoderConfigurationPreset;
/**
* 指定使用前置/后置摄像头来采集视频。
*
* 在移动设备上,可以设置该参数选择使用前置或后置摄像头:
* - `"user"`: 前置摄像头
* - `"environment"`: 后置摄像头
*/
facingMode?: VideoFacingModeEnum;
/**
* 指定摄像头的设备 ID。
*
* 你可以通过 [AgoraRTC.getCameras]{@link IAgoraRTC.getCameras} 来获取当前的摄像头设备列表。
*/
cameraId?: string;
/**
* @自从
* <br>   *4.2.0*
*
* 设置视频传输优化模式。
*
* 你可以在视频通话、视频直播或屏幕共享过程中调用此方法动态调整视频的传输优化模式。例如你想要把屏幕共享内容从演示文稿切换为视频时,你可以将传输优化模式从 `"detail"` 切换为 `"motion"`,确保视频画面在网络波动时不会出现卡顿。
*
* > 注意事项:该方法只支持 Chrome 浏览器。
*
* @param mode 视频传输优化模式:
* - `"detail"`: 清晰优先。
* - 浏览器会自动根据你的采集分辨率和帧率设定一个最小码率。即使遭遇网络波动,发送码率也不会低于这个值,从而确保清晰的视频画面。
* - 大部分情况下,浏览器不会降低发送分辨率,但是可能会降低帧率。
* - `"motion"`: 自 4.21.0 开始,浏览器默认开启流畅优先模式。
* - 浏览器不会启用最小码率策略。遭遇网络波动时,发送端会降低码率来确保接收端的视频画面不会出现中断和卡顿。
* - 大部分情况下,浏览器不会降低帧率,但是可能会降低发送分辨率。
*/
optimizationMode?: OptimizationMode;
/**
* @ignore
* @自从
* <br>   *4.18.0*
*
* SVC (可伸缩视频编码)配置。
*
* 你可以通过 {@link SVCConfigurationPreset} 传入 SDK 预设的 SVC 编码配置,也可以通过 {@link SVCConfiguration} 传入自定义的 SVC 编码配置。
*/
scalabiltyMode?: SVCConfiguration | SVCConfigurationPreset;
}
/**
* 跨频道媒体流转发中出现的错误码,可以通过 [AgoraRTCClient.on("channel-media-relay-state")]{@link IAgoraRTCClient.event_channel_media_relay_state} 事件获取。
* @public
*/
export declare enum ChannelMediaRelayError {
/**
* 一切正常。
*/
RELAY_OK = "RELAY_OK",
/**
* 和跨频道媒体流转发服务断开连接。
*/
SERVER_CONNECTION_LOST = "SERVER_CONNECTION_LOST",
/**
* 源频道的 Token 已经过期。
*/
SRC_TOKEN_EXPIRED = "SRC_TOKEN_EXPIRED",
/**
* 目标频道的 Token 已经过期。
*/
DEST_TOKEN_EXPIRED = "DEST_TOKEN_EXPIRED"
}
/**
* 跨频道媒体流转发过程中的事件列表,可以通过 [AgoraRTCClient.on("channel-media-relay-event")]{@link IAgoraRTCClient.event_channel_media_relay_event} 获取。
* @public
*/
export declare enum ChannelMediaRelayEvent {
/**
* 网络中断导致用户与服务器连接断开。
*/
NETWORK_DISCONNECTED = "NETWORK_DISCONNECTED",
/**
* 用户与服务器建立连接。
*/
NETWORK_CONNECTED = "NETWORK_CONNECTED",
/**
* 用户已加入源频道。
*/
PACKET_JOINED_SRC_CHANNEL = "PACKET_JOINED_SRC_CHANNEL",
/**
* 用户已加入目标频道。
*/
PACKET_JOINED_DEST_CHANNEL = "PACKET_JOINED_DEST_CHANNEL",
/**
* SDK 开始向目标频道发送数据包。
*/
PACKET_SENT_TO_DEST_CHANNEL = "PACKET_SENT_TO_DEST_CHANNEL",
/**
* 服务器收到了目标频道发送的视频流。
*/
PACKET_RECEIVED_VIDEO_FROM_SRC = "PACKET_RECEIVED_VIDEO_FROM_SRC",
/**
* 服务器收到了目标频道发送的音频流。
*/
PACKET_RECEIVED_AUDIO_FROM_SRC = "PACKET_RECEIVED_AUDIO_FROM_SRC",
/**
* 目标频道已更新。
*/
PACKET_UPDATE_DEST_CHANNEL = "PACKET_UPDATE_DEST_CHANNEL",
/**
* 内部原因导致目标频道更新失败。
*/
PACKET_UPDATE_DEST_CHANNEL_REFUSED = "PACKET_UPDATE_DEST_CHANNEL_REFUSED",
/**
* 目标频道未更新。
*/
PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = "PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE"
}
/**
* 跨频道转发的频道信息,用于 [ChannelMediaRelayConfiguration]{@link IChannelMediaRelayConfiguration}。
* @public
*/
export declare interface ChannelMediaRelayInfo {
/**
* 频道名。
*/
channelName: string;
/**
* 用设置的频道名和 `uid` 生成的用于加入频道的 token。如果未启用 token 鉴权则无需设置。
* 用于鉴权的 Token。如果未启用 Token 鉴权则无需设置。
*
* - 设置源频道信息时,用 0 和源频道名生成 Token。
* - 设置目标频道信息时,用 `uid` 和目标频道名生成 Token。
*/
token?: string;
/**
* 用于标识转发媒体流的 UID。
*
* 32 位无符号整数,设置范围:0 到 (2<sup>32</sup>-1),设为 0 服务器会自动分配一个 UID。
*
* 当用于源频道时,用于标识源频道中的转发媒体流的 UID。
* - 设置源频道信息时,`uid` 为源频道里需要转发的主播的 ID。
* - 设置目标频道信息时,`uid` 用于标识目标频道中被转发的媒体流。可为 0,服务器会自动分配一个 UID;也可自行设置一个 32 位无符号整数,设置范围为 0 到 (2<sup>32</sup>-1)。需确保与目标频道中的其他用户 ID 不同,防止造成互踢。
*
* 当用于目标频道时,用于标识目标频道中的转发媒体流的 UID,需确保与目标频道中的其他用户 ID 不同,防止造成互踢。
*/
uid: number;
}
/**
* 跨直播媒体流转发服务的状态码,可以通过 [AgoraRTCClient.on("channel-media-relay-state")]{@link IAgoraRTCClient.event_channel_media_relay_state} 事件获取。
* @public
*/
export declare enum ChannelMediaRelayState {
/**
* SDK 已经初始化,但是还没有开启跨频道媒体流转发服务。
*/
RELAY_STATE_IDLE = "RELAY_STATE_IDLE",
/**
* SDK 正在连接到跨频道媒体流转发服务。
*/
RELAY_STATE_CONNECTING = "RELAY_STATE_CONNECTING",
/**
* 跨频道媒体流转发成功。
*/
RELAY_STATE_RUNNING = "RELAY_STATE_RUNNING",
/**
* 跨频道媒体流转发出现错误,错误代码可以参考 {@link ChannelMediaRelayError}。
*/
RELAY_STATE_FAILURE = "RELAY_STATE_FAILURE"
}
/**
* `<video>` 标签的可见状态信息。
*
* 可通过以下方法或事件获取:
* - [localVideoTrack.on("video-element-visible-status")]{@link ILocalVideoTrack.event_video_element_visible_status}
* - [localVideoTrack.getVideoElementVisibleStatus]{@link ILocalVideoTrack.getVideoElementVisibleStatus}
* - [remoteVideoTrack.on("video-element-visible-status")]{@link IRemoteVideoTrack.event_video_element_visible_status_2}
* - [remoteVideoTrack.getVideoElementVisibleStatus]{@link IRemoteVideoTrack.getVideoElementVisibleStatus}
*
* 包含以下字段:
* - `visible`: Boolean 型,`<video>` 标签是否可见。
* - `reason`: 仅当 `visible` 为 `false` 时有效,不可见原因:
* - `"SIZE"`: `<video>` 尺寸太小,导致 `<video>` 完全不可见或很难看到。
* - `"STYLE"`: `<video>` 或其祖先元素的 CSS 样式导致 `<video>` 不可见、颜色暗淡或模糊不清。
* - `"POSITION"`: `<video>` 或其祖先元素被定位到视口区域外,导致 `<video>` 只有小面积区域在视口内或全部不在视口内。
* - `"COVERED"`: `<video>` 被其他元素遮挡。
*/
declare type CheckVideoVisibleResult = CheckVisibleResult;
/**
* @ignore
*/
declare type CheckVisibleResult = VisibleResultInner | VisibleHiddenResult;
/**
* 用于控制客户端行为的接口。
*
* 在调用 {@link createClient} 创建客户端对象时,你需要配置该接口。
*
* > [mode]{@link ClientConfig.mode} 和 [codec]{@link ClientConfig.codec} 属性必须设置。
* @public
*/
export declare interface ClientConfig {
/**
* 浏览器使用的编码格式,有以下选择:
* - `"vp8"`: 浏览器使用 VP8 编码。
* - `"h264"`: 浏览器使用 H.264 编码。
* - `"vp9"`: (Beta) 浏览器使用 VP9 编码。
* - `"av1"`: (Beta) 浏览器使用 AV1 编码。
*
* > Safari 12.1 及之前版本不支持 VP8 编码。
*/
codec: SDK_CODEC;
/**
* @ignore
*/
audioCodec?: SDK_AUDIO_CODEC;
/**
* 频道场景。
*
* Agora Web SDK 需知道 app 的使用场景(例如通信场景或直播场景),从而使用不同的优化手段。
*
* 声网频道支持以下场景:
* - `"live"`: 直播场景,有主播和观众两种用户角色,可以通过 [setClientRole]{@link IAgoraRTCClient.setClientRole} 方法设置用户角色为主播或观众。主播可以发布和订阅音视频轨道,而观众只能订阅音视频轨道,无法发布。
* - `"rtc"`: 通信场景,用于常见的一对一通话或群聊,频道中的任何用户可以自由说话。
*/
mode: SDK_MODE;
/**
* 直播场景中([mode]{@link ClientConfig.mode} 为 `"live"` 时)的用户角色。
*
* 用户角色确定用户在 SDK 层的权限,包含是否可以发布和订阅音视频轨道、是否可以推流到 CDN。用户角色有 `"host"`(主播)和 `"audience"`(观众)。主播既可发布轨道,也可订阅轨道;观众不能进行 {@link publish} 操作。直播场景中的用户角色默认为观众。如需发布音视频,必须将角色角色为主播。
*
* 在创建客户端之后,你可以随时调用 {@link setClientRole} 来改变用户角色。
*/
role?: ClientRole;
/**
* 用户角色的具体设置,包含用户级别。
*
* 用户级别确定用户在其角色权限范围内可以操作和享受到的服务级别。例如对于观众,选择接收低延时还是超低延时的视频流。不同的级别会影响计费。
*/
clientRoleOptions?: ClientRoleOptions;
/**
* @ignore
* HTTP 代理服务器域名。
*
* Agora Web SDK 还提供 [startProxyServer]{@link IAgoraRTCClient.startProxyServer} 方法支持云代理服务,详见使用云代理。
*/
proxyServer?: string;
/**
* @ignore
* TURN 服务器设置。
*
* Agora Web SDK 还提供 [startProxyServer]{@link IAgoraRTCClient.startProxyServer} 方法支持云代理服务,详见使用云代理。
*/
turnServer?: TurnServerConfig;
/**
* @ignore
* SDK 内 HTTP/HTTPS 请求的重试策略。
*
* 关于重试策略的详细信息请参考 [RetryConfiguration]{@link RetryConfiguration}。
*/
httpRetryConfig?: RetryConfiguration;
/**
* @ignore
* SDK 内 WebSocket 连接的重试策略。
*
* 关于重试策略的详细信息请参考 [RetryConfiguration]{@link RetryConfiguration}。
*/
websocketRetryConfig?: RetryConfiguration;
}
/**
* 用户角色。
* - `"host"`: 直播场景中的主播,可以发布和订阅音视频轨道。
* - `"audience"`: 直播场景中的观众,只能订阅,不能发布音视频轨道。
* @public
*/
export declare type ClientRole = "audience" | "host";
export declare interface ClientRoleOptions {
/**
* 直播场景中的观众延时级别。
*
* > 注意事项:
* > - 仅在用户角色设为 `"audience"` 时生效。
* > - 不同的级别会影响计费。
*/
level: AudienceLatencyLevelType;
/**
* @ignore
* 设置角色实际延迟, 范围0-3000ms
*/
delay?: number;
}
/**
* 连接断开的原因。
*/
export declare enum ConnectionDisconnectedReason {
/** 用户正常退出。 */
LEAVE = "LEAVE",
/** 网络异常,经过重试后不可恢复。 */
NETWORK_ERROR = "NETWORK_ERROR",
/** 服务端返回出现异常,通常是因为集成过程中参数有误。 */
SERVER_ERROR = "SERVER_ERROR",
/** 当前用户被踢出。 */
UID_BANNED = "UID_BANNED",
/**
* @ignore
*/
FALLBACK = "FALLBACK",
/** 当前 IP 被踢出。 */
IP_BANNED = "IP_BANNED",
/** 当前频道被禁用。 */
CHANNEL_BANNED = "CHANNEL_BANNED",
/**
* @ignore
* license字段无上报
*/
LICENSE_MISSING = "LICENSE_MISSING",
/**
* @ignore
* license过期仍然登录
*/
LICENSE_EXPIRED = "LICENSE_EXPIRED",
/**
* @ignore
* license使用分钟数超过限制
*/
LICENSE_MINUTES_EXCEEDED = "LICENSE_MINUTES_EXCEEDED",
/**
* @ignore
* license使用时间段不合法
*/
LICENSE_PERIOD_INVALID = "LICENSE_PERIOD_INVALID",
/**
* @ignore
* 同一时间相同license存在不同设备
*/
LICENSE_MULTIPLE_SDK_SERVICE = "LICENSE_MULTIPLE_SDK_SERVICE",
/**
* @ignore
* license不合法
*/
LICENSE_ILLEGAL = "LICENSE_ILLEGAL",
/**
* 当前用户的 Token 已过期。
*/
TOKEN_EXPIRE = "TOKEN_EXPIRE"
}
/**
* SDK 和声网服务器的连接状态,可以通过 [connectionState]{@link IAgoraRTCClient.connectionState} 获取。
*
* SDK 和服务器有以下 5 种连接状态:
* - `"DISCONNECTED"`: 连接断开。该状态表示用户处于以下任一阶段:
* - 尚未通过 [join]{@link IAgoraRTCClient.join} 加入频道。
* - 已经通过 [leave]{@link IAgoraRTCClient.leave} 离开频道。
* - 被踢出频道或者连接失败等异常情况。
* - `"CONNECTING"`: 正在连接中。当调用 [join]{@link IAgoraRTCClient.join} 时为此状态。
* - `"CONNECTED"`: 已连接。该状态表示用户已经加入频道,可以在频道内发布或订阅媒体流。
* - `"RECONNECTING"`: 正在重连中。因网络断开或切换而导致 SDK 与服务器的连接中断,SDK 会自动重连,此时连接状态变为 `"RECONNECTING"`。
* - `"DISCONNECTING"`: 正在断开连接。在调用 [leave]{@link IAgoraRTCClient.leave} 的时候为此状态。
* @public
*/
export declare type ConnectionState = "DISCONNECTED" | "CONNECTING" | "RECONNECTING" | "CONNECTED" | "DISCONNECTING";
/**
* 约束对象,一般用于在 [[VideoEncoderConfiguration]] 中指定采集分辨率/帧率的范围。
*/
export declare interface ConstrainLong {
/**
* 采集设备最终输出的值下限。
*/
min?: number;
/**
* 采集设备最终输出的值上限。
*/
max?: number;
/**
* 期望采集设备最终输出的值,如果设备不支持指定的值,会尽量输出一个最靠近的值。
*/
ideal?: number;
/**
* 严格指定采集设备最终输出的值,如果设备不支持指定的值,采集会失败。
*/
exact?: number;
}
/**
* 创建自定义音频轨道时的配置参数,用于 [AgoraRTC.createCustomAudioTrack]{@link IAgoraRTC.createCustomAudioTrack}。
*/
export declare interface CustomAudioTrackInitConfig {
/**
* 你自己维护的 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) 对象。
*/
mediaStreamTrack: MediaStreamTrack;
/**
* 控制音频的编码配置。
*
* 你可以通过 [[AudioEncoderConfigurationPreset]] 传入 SDK 内置的编码配置;也可以通过传入一个 [[AudioEncoderConfiguration]] 来自定义音频编码配置。
*
* > Firefox 不支持设置音频编码码率。
*/
encoderConfig?: AudioEncoderConfiguration | AudioEncoderConfigurationPreset;
}
/**
* 创建自定义视频轨道时的配置参数,用于 [AgoraRTC.createCustomVideoTrack]{@link IAgoraRTC.createCustomVideoTrack}。
*/
export declare interface CustomVideoTrackInitConfig {
/**
* 这里填写您自己维护的 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) 对象
*/
mediaStreamTrack: MediaStreamTrack;
/**
* @自从
* <br>   *4.17.1*
*
* 视频的分辨率宽。
*
* 支持传入 `number`,或一个约束对象,如 `{ max: 1280, min: 720 }`。
*
* 关于约束对象的详细说明可以参考 [ConstrainLong]{@link ConstrainLong}。
*/
width?: number | ConstrainLong;
/**
* @自从
* <br>   *4.17.1*
*
* 视频的分辨率高。
*
* 支持传入 `number`,或一个约束对象,如 `{ max: 1280, min: 720 }`。
*
* 关于约束对象的详细说明可以参考 [ConstrainLong]{@link ConstrainLong}。
*/
height?: number | ConstrainLong;
/**
* @自从
* <br>   *4.17.1*
*
* 视频帧率,单位为 fps。
*
* 支持传入 `number`,或一个约束对象,如 `{ max: 30, min: 5 }`。
*
* 关于约束对象的详细说明可以参考 [ConstrainLong]{@link ConstrainLong}。
*/
frameRate?: number | ConstrainLong;
/**
* 指定发送这个视频轨道时的最小码率,单位为 Kbps。
*/
bitrateMin?: number;
/**
* 指定发送这个视频轨道时的最大码率,单位为 Kbps。
*/
bitrateMax?: number;
/**
* @自从
* <br>   *4.2.0*
*
* 设置视频传输优化模式。
*
* 你可以在视频通话、视频直播或屏幕共享过程中调用此方法动态调整视频的传输优化模式。例如你想要把屏幕共享内容从演示文稿切换为视频时,你可以将传输优化模式从 `"detail"` 切换为 `"motion"`,确保视频画面在网络波动时不会出现卡顿。
*
* > 注意事项:该方法只支持 Chrome 浏览器。
*
* @param mode 视频传输优化模式:
* - `"balanced"`: 使用默认的传输优化模式:
* - 对于屏幕共享视频流,浏览器默认的优化策略为清晰优先。
* - 对于其他视频流,浏览器默认的优化策略为兼顾清晰和流畅,弱网条件下,帧率和分辨率都会被调整。
* - `"detail"`: 清晰优先。
* - 浏览器会自动根据你的采集分辨率和帧率设定一个最小码率。即使遭遇网络波动,发送码率也不会低于这个值,从而确保清晰的视频画面。
* - 大部分情况下,浏览器不会降低发送分辨率,但是可能会降低帧率。
* - `"motion"`: 自 4.21.0 开始,浏览器默认开启流畅优先模式
* - SDK 不会启用最小码率策略。遭遇网络波动时,发送端会降低码率来确保接收端的视频画面不会出现中断和卡顿。
* - 大部分情况下,SDK 不会降低帧率,但是可能会降低发送分辨率。
*/
optimizationMode?: OptimizationMode;
/**
* @ignore
* @自从
* <br>   *4.18.0*
*
* SVC (可伸缩视频编码)配置。
*
* 你可以通过 {@link SVCConfigurationPreset} 传入 SDK 预设的 SVC 编码配置,也可以通过 {@link SVCConfiguration} 传入自定义的 SVC 编码配置。
*/
scalabiltyMode?: SVCConfiguration | SVCConfigurationPreset;
}
/**
* 音视频采集设备的信息。
*
* - 音频采集设备信息可通过 [onMicrophoneChanged]{@link onMicrophoneChanged} 获取。
* - 视频采集设备信息可通过 [onCameraChanged]{@link onCameraChanged} 获取。
* - 音频播放设备信息可通过 [onPlaybackDeviceChanged]{@link onPlaybackDeviceChanged} 获取。
* @public
*/
export declare interface DeviceInfo {
/**
* 采集设备的插拔状态更新时间,UNIX 时间戳,单位为 ms。
*/
updateAt: number;
/**
* SDK 首次检测到采集设备的时间,UNIX 时间戳,单位为 ms。
*/
initAt: number;
/**
* 采集设备当前的插拔状态。
*/
state: DeviceState;
/**
* 采集设备的设备信息,详见 [MediaDeviceInfo](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo)。
*/
device: MediaDeviceInfo;
}
/**
* 采集设备当前的插拔状态。
* - `"ACTIVE"`: 该设备已经插入。
* - `"INACTIVE"`: 该设备已经被拔出。
* @public
*/
export declare type DeviceState = "ACTIVE" | "INACTIVE";
/**
* 通过 {@link getElectronScreenSources} 获取的 Electron 下屏幕共享源信息。
*
* 详见 [Electron 官方文档](https://www.electronjs.org/docs/api/structures/desktop-capturer-source)。
* @public
*/
export declare interface ElectronDesktopCapturerSource {
/**
* Electron 屏幕共享源的 ID。
*/
id: string;
/**
* Electron 屏幕共享源的名称。
*/
name: string;
/**
* Electron 屏幕共享源的快照。
*
* 详见 [ElectronNativeImage](http://electron.atom.io/docs/api/native-image)。
*/
thumbnail: IElectronNativeImage;
}
/**
* 加密方案,在调用 {@link setEncryptionConfig} 时使用。包含以下几种:
* - `"aes-128-xts"`: 128 位 AES 加密,XTS 模式。
* - `"aes-256-xts"`: 256 位 AES 加密,XTS 模式。
* - `"aes-128-gcm"`: 128 位 AES 加密,GCM 模式。
* - `"aes-256-gcm"`: 256 位 AES 加密,GCM 模式。
* - `"aes-128-gcm2"`: 128 位 AES 加密,GCM 模式,加盐。
* - `"aes-256-gcm2"`: 256 位 AES 加密,GCM 模式,加盐。
* - `"aes-128-ecb"`: 128 位 AES 加密,ECB 模式。
* - `"sm4-128-ecb"`: 128 位 SM4 加密,ECB 模式。
* - `"none"`: 不加密。
* @public
*/
export declare type EncryptionMode = "aes-128-xts" | "aes-256-xts" | "aes-128-ecb" | "sm4-128-ecb" | "aes-128-gcm" | "aes-256-gcm" | "aes-128-gcm2" | "aes-256-gcm2" | "none";
/**
* @自从
* <br>   *4.20.0*
*
* 音频上下文 ([Audio Context](https://developer.mozilla.org/en-US/docs/Web/API/AudioContext)) 状态发生改变回调。该回调中的 `"interrupted"` 状态当前只会在 iOS 上触发。
*
* @param currState 当前的状态,取值如下:
* - `AudioContextState`:枚举值的含义详见 [BaseAudioContext.state](https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/state)。
* - `"interrupted"`:App 的音视频播放被微信通话或系统电话打断。你可以调用 {@link resumeAudioContext} 方法恢复音视频播放。
* @param prevState 之前的状态,取值如下:
* - `AudioContextState`:枚举值的含义详见 [BaseAudioContext.state](https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/state)。
* - `"interrupted"`:App 的音视频播放被微信通话或系统电话打断。
* - `undefined`:无先前状态。
*
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_audio_context_state_changed(currState: AudioContextState | "interrupted", prevState: AudioContextState | "interrupted" | undefined): void;
/**
* @自从
* <br>   *4.18.0*
*
* 如果你需要更灵活地监听自动播放失败事件,推荐通过在 {@link IAgoraRTC.on} 方法中传入该回调来代替 {@link onAutoplayFailed}。
*
* ```javascript
* AgoraRTC.on("autoplay-failed", (info) => {
* console.log("Autoplay failed!", info.state, info.device);
* });
* ```
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_autoplay_failed(): void;
/**
* @ignore
*
* 通过 [setBeautyEffect]{@link ILocalVideoTrack.setBeautyEffect} 开启美颜后,如果检测到美颜对设备性能消耗过大就会触发该事件。
*
* 你可以监听这个事件提示用户美颜过载,并关闭美颜。
*
* ```javascript
* localVideoTrack.on("beauty-effect-overload", () => {
* console.log("beauty effect overload, disable beauty effect");
* localVideoTrack.setBeautyEffect(false);
* });
* ```
* @event
* @asMemberOf ILocalVideoTrack
*/
declare function event_beauty_effect_overload(): void;
/**
* @自从
* <br>   *4.18.0*
*
* 如果你需要更灵活地监听视频采集设备状态变化,推荐通过在 {@link IAgoraRTC.on} 方法中传入该回调来代替 {@link onCameraChanged}。
*
* ```javascript
* AgoraRTC.on("camera-changed", (info) => {
* console.log("Camera changed!", info.state, info.device);
* });
* ```
*
* @param deviceInfo 设备信息,详见 {@link DeviceInfo}。
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_camera_changed(deviceInfo: DeviceInfo): void;
/**
* 跨频道媒体流转发事件回调。
*
* @param event 事件码,详见 {@link ChannelMediaRelayEvent}。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_channel_media_relay_event(event: ChannelMediaRelayEvent): void;
/**
* 跨频道媒体流转发状态回调。
*
* 当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。
*
* 回调会携带当前跨频道媒体流转发服务的状态 {@link ChannelMediaRelayState},如果状态异常,相应的错误码可以通过 {@link ChannelMediaRelayError} 获取(比如 token 过期,重连失败等)。
* @param state 跨频道媒体流转发服务的状态。
* @param code 跨频道媒体流转发错误码。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_channel_media_relay_state(state: ChannelMediaRelayState, code: ChannelMediaRelayError): void;
/**
* SDK 与服务器的连接状态发生改变回调。
*
* @param curState 当前的连接状态。
* @param revState 之前的连接状态。
* @param reason 如果 `curState` 为 `"DISCONNECTED"`,这里表示断开连接的原因。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_connection_state_change(curState: ConnectionState, revState: ConnectionState, reason?: ConnectionDisconnectedReason): void;
/**
*
* 视频截图上传服务的连接状态发生改变回调。
*
* ```javascript
* client.on("content-inspect-connection-state-change", (preState, state) => {
* console.error(`Content Inspect Connection State Change: ${preState} -> ${state}` )
* })
* ```
*
* @param preState 之前的连接状态。
* @param newState 新的连接状态。
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_content_inspect_connection_state_change(preState: InspectState, newState: InspectState): void;
/**
*
* 开启视频截图上传服务出错回调。
*
* ```javascript
* client.on("content-inspect-error", error => {
* console.error("Content Inspect Error:", error)
* error.code === "OPERATION_ABORTED" && client.disableContentInspect()
* })
* ```
*
* @param error 抛出的错误对象 `AgoraRTCError`,该对象包含以下属性:
* - code: 错误码。
* - message: 错误消息。
* - data:(可选)与错误相关的其它信息。
*
* 当前可能返回的错误码如下:
*
* | 错误码 | 错误消息 | 原因 |
* |:-----:|:----------|:-------------|
* |OPERATION_ABORTED|Content inspect was cancelled because it left the channel| 本地用户已经离开频道 |
*
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_content_inspect_error(error?: AgoraRTCError): void;
/**
* 解密失败回调。
*
* 该回调表示用户在订阅过程中出现了解密失败,通常是由于和发布端设置的加密参数不一致导致的。详见 {@link setEncryptionConfig}。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_crypt_error(): void;
/**
* SDK 监测到异常事件回调。
*
* 该回调报告频道内 SDK 监测出的异常事件。
*
* 异常事件不是错误,但是一般会引起通话质量问题。发生异常事件后,如果恢复正常,也会收到该回调。
*
* 每个异常事件都有对应的恢复事件。
*
* **异常事件**见下表:
*
* | 事件码 | 提示消息 | 异常 |
* | :----- | :------------------------- | :--------------- |
* | 1001 | FRAMERATE_INPUT_TOO_LOW | 视频采集帧率过低 |
* | 1002 | FRAMERATE_SENT_TOO_LOW | 视频发送帧率过低 |
* | 1003 | SEND_VIDEO_BITRATE_TOO_LOW | 视频发送码率过低 |
* | 1005 | RECV_VIDEO_DECODE_FAILED | 接收视频解码失败 |
* | 2001 | AUDIO_INPUT_LEVEL_TOO_LOW | 发送音量过低 |
* | 2002 | AUDIO_OUTPUT_LEVEL_TOO_LOW | 接收音量过低 |
* | 2003 | SEND_AUDIO_BITRATE_TOO_LOW | 音频发送码率过低 |
* | 2005 | RECV_AUDIO_DECODE_FAILED | 接收音频解码失败 |
*
* **恢复事件**详见下表:
*
* | 事件码 | 提示消息 | 恢复 |
* | :----- | :------------------------- | :--------------- |
* |3001 | FRAMERATE_INPUT_TOO_LOW_RECOVER | 视频采集帧率恢复正常 |
* |3002 | FRAMERATE_SENT_TOO_LOW_RECOVER | 视频发送帧率恢复正常 |
* |3003 | SEND_VIDEO_BITRATE_TOO_LOW_RECOVER | 视频发送码率恢复正常 |
* |3005 | RECV_VIDEO_DECODE_FAILED_RECOVER | 接收视频解码恢复正常 |
* |4001 | AUDIO_INPUT_LEVEL_TOO_LOW_RECOVER | 发送音量恢复正常 |
* |4002 | AUDIO_OUTPUT_LEVEL_TOO_LOW_RECOVER | 接收音量恢复正常 |
* |4003 | SEND_AUDIO_BITRATE_TOO_LOW_RECOVER | 音频发送码率恢复正常 |
* |4005 | RECV_AUDIO_DECODE_FAILED_RECOVER | 接收音频解码恢复正常 |
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_exception(event: {
/**
* 事件码,详细见上表。
*/
code: number;
/**
* 提示消息。
*/
msg: string;
/**
* 发生异常或者恢复异常的用户 ID。
*/
uid: UID;
}): void;
/**
* 首帧音频或视频解码时触发。
*
* > 注意:
* > 该事件只有在本地调用了 [IRemoteTrack.play]{@link play} 后才会触发。
* @event
* @asMemberOf IRemoteTrack
*/
declare function event_first_frame_decoded(): void;
/**
* 第三方视频审核服务连接状态发生改变回调。
*
* ```javascript
* client.on("image-moderation-connection-state-change", (curState, preState) => {
* // image-moderation-connection-state-change: CONNECTING to CONNECTED
* console.info(`image-moderation-connection-state-change: ${preState} to ${curState}`);
* });
* ```
*
* @param newState 新的连接状态。
* @param preState 之前的连接状态。
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_image_moderation_connection_state_change(newState: ImageModerationConnectionState, preState: ImageModerationConnectionState): void;
/**
* @自从
* <br>   *4.4.0*
*
* SDK 通过这个回调通知当前媒体流是否经云代理服务转发。触发时机如下:
* - v4.10.0 之前:成功调用 [[publish]] 后。
* - v4.10.0 及之后:成功调用 [[join]] 后。
*
* @param isUsingProxy 当前媒体流是否经云代理服务转发:
* - `true`: 经云代理服务转发。
* - `false`: 没有经云代理服务转发。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_is_using_cloud_proxy(isUsingProxy: boolean): void;
/**
* @deprecated
* 自 4.19.0 起废弃。SDK 不再使用代理保障连通性,因此不会再触发该回调。
*
* SDK 自动切换至 TCP/TLS 443 回调。
*
* 自 v4.11.0 起,如果调用 [[join]] 后 SDK 直接连接 SD-RTN™ 失败,SDK 会自动切换到 TCP/TLS 443 通道,从而保障 SDK 的连通性。
*
* @param proxyServer 切换后使用的服务器地址。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_join_fallback_to_proxy(proxyServer: string): void;
/**
* 推流发生错误回调。
*
* 在调用 {@link startLiveStreaming} 成功开始推流后,推流中途发生错误时,会通过这个事件抛出。
*
* 你可以访问 `err.code` 来获取错误码字符串,下面列出可能出现的错误:
* - `LIVE_STREAMING_INVALID_ARGUMENT`: 推流参数错误。
* - `LIVE_STREAMING_INTERNAL_SERVER_ERROR`: 推流服务器内部错误。
* - `LIVE_STREAMING_PUBLISH_STREAM_NOT_AUTHORIZED`: 推流 URL 被占用。
* - `LIVE_STREAMING_TRANSCODING_NOT_SUPPORTED`: 在非转码推流中调用了转码参数。
* - `LIVE_STREAMING_CDN_ERROR`: 推流的目标 CDN 出现错误导致推流失败。
* - `LIVE_STREAMING_INVALID_RAW_STREAM`: 推流超时,请确认目标流是否存在。
*
* @param url 发生错误的直播推流地址。
* @param err 详细的错误信息。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_live_streaming_error(url: string, err: AgoraRTCError): void;
/**
* 推流发生警告回调。
*
* 在调用 {@link startLiveStreaming} 成功开始推流后,推流中途发生警告时,会通过这个事件抛出。
*
* 你可以访问 `err.code` 来获取警告码字符串,下面列举可能出现的警告:
* - `LIVE_STREAMING_WARN_STREAM_NUM_REACH_LIMIT`: 推流超过 10 路流。
* - `LIVE_STREAMING_WARN_FAILED_LOAD_IMAGE`: 推流中的背景图片或者水印地址无法拉取。
* - `LIVE_STREAMING_WARN_FREQUENT_REQUEST`: 推流请求太频繁。
*
* @param url 发生警告的直播推流地址。
* @param warning 详细的警告信息。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_live_streaming_warning(url: string, warning: AgoraRTCError): void;
/**
* SDK 重新建立媒体连接(用于发布和订阅)结束的回调。
*
* @param uid 重新建立的媒体连接所对应的用户 ID。如果是本地 `uid` 说明是重新发布,如果是远端 `uid` 说明是重新订阅。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_media_reconnect_end(uid: UID): void;
/**
* SDK 开始尝试重新建立媒体连接(用于发布和订阅)的回调。
*
* @param uid 重新建立的媒体连接所对应的用户 ID。如果是本地 `uid` 说明是重新发布,如果是远端 `uid` 说明是重新订阅。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_media_reconnect_start(uid: UID): void;
/**
* @自从
* <br>   *4.18.0*
*
* 如果你需要更灵活地监听麦克风设备变化,推荐通过在 {@link IAgoraRTC.on} 方法中传入该回调来代替 {@link onMicrophoneChanged}。
*
* ```javascript
* AgoraRTC.on("microphone-changed", (info) => {
* console.log("Microphone changed!", info.state, info.device);
* });
* ```
*
* @param deviceInfo 设备信息,详见 {@link DeviceInfo}。
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_microphone_changed(deviceInfo: DeviceInfo): void;
/**
* 网络上下行质量报告回调。
*
* 用户加入频道后,SDK 会每 2 秒触发一次该回调,报告本地用户当前的上行和下行网络质量。
*
* > 我们推荐使用此回调来展示你的网络状态。
*
* @param stats 网络质量。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_network_quality(stats: NetworkQuality): void;
/**
* @自从
* <br>   *4.23.0*
*
* 本地媒体连接 PeerConnection 的状态回调。
* @param curState 当前的连接状态。详见 [RTCPeerConnectionState](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event)。
* @param revState 之前的连接状态。详见 [RTCPeerConnectionState](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event)。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_peerconnection_state_change(curState: RTCPeerConnectionState, revState: RTCPeerConnectionState): void;
/**
* @自从
* <br>   *4.18.0*
*
* 如果你需要更灵活地监听音频播放设备变化,推荐通过在 {@link IAgoraRTC.on} 方法中传入该回调来代替 {@link onPlaybackDeviceChanged}。
*
* ```javascript
* AgoraRTC.on("playback-device-changed", (info) => {
* console.log("Playback device changed!", info.state, info.device);
* });
* ```
*
* @param deviceInfo 设备信息,详见 {@link DeviceInfo}。
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_playback_device_changed(deviceInfo: DeviceInfo): void;
/**
* @自从
* <br>   *4.11.0*
*
* 如果开启了单频道支持 128 位主播的功能,该回调会在调用 [[join]] 时触发,返回当前频道内发布音频和视频轨道的用户。
*
* > 注意事项:
* > - 频道内所有用户必须都使用整数型用户 ID(`uid`),`published-user-list` 才会触发。
* > - `published-user-list` 对 [AgoraRTCClient.on("user-joined")]{@link event_user_joined} 和 [AgoraRTCClient.on("user-published")]{@link event_user_published} 有以下影响:
* > - 如果监听了 `published-user-list`,已经在 `published-user-list` 中返回的用户不会再通过 `user-joined` 和 `user-published` 重复返回。
* > - 如果没有监听 `published-user-list`,`user-joined` 和 `user-published` 会正常触发。
*
* @param users 远端用户对象。
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_published_user_list(users: IAgoraRTCRemoteUser[]): void;
/**
* @自从
* <br>   *4.18.0*
*
* 如果你需要更灵活地监听触发 CSP 规则事件,推荐通过在 {@link IAgoraRTC.on} 方法中传入该回调来代替 {@link onSecurityPolicyViolation}。
*
* ```javascript
* AgoraRTC.on("security-policy-violation", (info) => {
* console.log("Security policy violation!", info.state, info.device);
* });
* ```
*
* @asMemberOf IAgoraRTC
* @event
*/
declare function event_security_policy_violation(): void;
/**
* @自从
* <br>   *4.20.1*
*
* 从 H.264 视频流中解析出 SEI 数据时触发,此事件会返回 SEI 数据。
*
* @param sei Uint8Array 类型的 SEI 数据
* @asMemberOf ILocalVideoTrack
* @event
*/
declare function event_sei_received(sei: Uint8Array): void;
/**
* 当 [BufferSourceAudioTrack]{@link IBufferSourceAudioTrack} 的音频数据源处理状态变化时,会触发此事件。
*
* @param currentState 当前音频数据处理状态:
* - `"stopped"`: 音频源数据处理停止。可能是因为数据处理完毕,也可能是手动触发了停止。
* - `"paused"`: 音频源数据暂停处理。
* - `"playing"`: 音频源数据正在处理。
*
* @event
* @asMemberOf IBufferSourceAudioTrack
*/
declare function event_source_state_change(currentState: AudioSourceState): void;
/**
* 订阅的音视频流回退为音频流或恢复为音视频流回调。
*
* 如果在 {@link setStreamFallbackOption} 中将 `fallbackType` 设为 2,当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。
* @param uid 远端流对应的用户 ID。
* @param isFallbackOrRecover 订阅流是回退还是恢复:
* - `"fallback"`: 从音视频流回退为纯音频流。
* - `"recover"`: 从音频流恢复为音视频。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_stream_fallback(uid: UID, isFallbackOrRecover: "fallback" | "recover"): void;
/**
* 收到数据流消息的回调。
*
* ```javascript
* client.on("stream-message", (uid, payload) => {
* console.info(`received data stream message from ${uid}: `, payload);
* });
* ```
*
* @param uid 消息发送者的 ID。
* @param payload 消息内容。
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_stream_message(uid: UID, payload: Uint8Array): void;
/**
* 订阅的视频流类型发生改变回调。
*
* 视频流类型改变指视频大流(高码率、高分辨率)变为视频小流(低码率、低分辨率),或视频小流变为视频大流。
* @param uid 远端流对应的用户 ID。
* @param streamType 改变后的视频流类型:
* - 0: 视频大流,即高码率、高分辨率的视频流。
* - 1: 视频小流,即低码率、低分辨率的视频流。
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_stream_type_changed(uid: UID, streamType: RemoteStreamType): void;
/**
* Token 已过期回调。
*
* 在 token 过期后,会收到该回调。
*
* 一般情况下,在收到该消息之后,应向服务端重新申请 token,并调用 {@link join} 方法传入新的 token 重新加入频道。
*
* ``` javascript
* client.on("token-privilege-did-expire", async () => {
* // 重新申请 token 后
* await client.join(<APPID>, <CHANNEL NAME>, <NEW TOKEN>);
* });
* ```
*
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_token_privilege_did_expire(): void;
/**
* Token 即将过期回调。
*
* 在 token 过期前 30 秒,会收到该回调。
*
* 在收到该回调之后,应向服务端重新申请 token,并调用 {@link renewToken} 方法传入新的 token。
*
* ``` javascript
* client.on("token-privilege-will-expire", async function(){
* // 重新申请 token 后
* await client.renewToken(token);
* });
* ```
* @asMemberOf IAgoraRTCClient
* @event
*/
declare function event_token_privilege_will_expire(): void;
/**
* 音频或视频轨道被终止,终止的原因可能是:
* - 摄像头被拔出
* - 麦克风被拔出
* - 用户主动停止了屏幕共享
* - 用户主动关闭了底层的 `MediaStreamTrack`
* - 媒体设备故障
* - 正在使用中的媒体设备的权限被收回
*
* @event
* @asMemberOf ILocalTrack
*/
declare function event_track_ended(): void;
/**
* 媒体轨道有更新时触发。
* @param track 媒体轨道。详见 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack)。
* @event
*/
declare function event_track_updated(track: MediaStreamTrack): void;
/**
* 当前轨道的 `RTCRtpTransceiver` 实例更新回调。
*
* @param transceiver 新的 `RTCRtpTransceiver` 实例。
* @param type 当前轨道所属视频流的类型。详见 {@link StreamType}。
*
* @event
* @asMemberOf ILocalTrack
*/
declare function event_transceiver_updated(transceiver: RTCRtpTransceiver, type?: StreamType): void;
/**
* 当前轨道的 `RTCRtpTransceiver` 实例更新回调。
*
* @param transceiver 新的 `RTCRtpTransceiver` 实例。
*
* @event
* @asMemberOf IRemoteTrack
*/
declare function event_transceiver_updated_2(transceiver: RTCRtpTransceiver): void;
/**
* @ignore
*/
declare function event_user_datachannel_close(): void;
/**
* @ignore
*/
declare function event_user_datachannel_error(ev: Event): void;
/**
* @ignore
*/
declare function event_user_datachannel_message(data: ArrayBuffer): void;
/**
* @ignore
*/
declare function event_user_datachannel_open(): void;
/**
* 该回调用于提示用户状态变化。
*
* 在大部分情况下,你只需要监听 [user-published]{@link IAgoraRTCClient.event_user_published} 和 [user-unpublished]{@link IAgoraRTCClient.event_user_unpublis