/* * Copyright (c) 2021 NetEase, Inc. All rights reserved. */ import { Client } from './client' import { Stream } from './stream' import { STREAM_TYPE, StreamOptions } from './types' import { DeviceInfo } from './browser' /** * NERTC 是 云信 Web SDK 中所有可调用方法的入口。 */ export = NERTC declare namespace NERTC { namespace Device { /** * 开启设备兼容模式 * * 一部分支持双声道的音频采集设备,采集的音频数据左右声道是相反的。这类设备如果采用单声道采集模式,或者播放端不支持双声道播放的情况下, * 会出现音量过小或者没有音量的情况。从v4.6.20起,通过本函数,SDK会在双声道麦克风中开启选路模式,在损失一部分音质体验的情况下保证 * 这类设备的可用性。 * * @example * ```javascript * // 在createStream之前调用 * NERTC.Device.enableCompatMode() * rtc.localStream = NERTC.createStream({ * audio: true * }) * ``` */ function enableCompatMode(): void /** * 关闭设备兼容模式 */ function disableCompatMode(): void /** * 该函数是针对浏览器手势触发的事件函数。 * 目前Safari桌面端进行屏幕共享时,需要让用户在界面上产生交互,不然该次屏幕共享请求会被拒绝。此处针对浏览器的这一行为做了一次补救: * 当屏幕共享请求第一次被拒绝时,`NERTC.Device.onUserGestureNeeded`这个位置的函数会收到这个提醒,用户只需要在这个回调函数 * 中通过手势触发,再次发起屏幕共享请求即可 * * @example * ``` * NERTC.Device.onUserGestureNeeded = (evt:any)=>{ * // 这里 $shareScreenUI 指代用户自定义的手势触发UI。平时处于隐藏状态 * // 在用户没有实现 onUserGestureNeeded 的情况下,该UI指的是页面顶部黄色的框 * $shareScreenUI.onclick = ()=>{ * NERTC.Device.emit('user-gesture-fired') * $shareScreenUI.hide() * } * $shareScreenUI.show() * } * ``` * */ function onUserGestureNeeded(evt: any): void } namespace Logger { /** * 开启日志上传。 * * 调用本方法开启日志上传。开启日志上传并加入房间,SDK 的日志会在通话结束后上传到网易云信服务器。 * * 日志上传默认为关闭状态,如果您需要开启此功能,请确保在所有方法之前调用本方法。 * * @since V4.4.0 * * @note 如果没有成功加入房间,SDK 不会发送日志到云信服务器,服务器上无法查看日志信息。 * */ function enableLogUpload(): void /** * 关闭日志上传。 * * 默认是关闭状态,如果您调用了方法 enableLogUpload 开启日志上传,可以通过本方法关闭日志上传。 * * @since V4.4.0 */ function disableLogUpload(): void /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ enum loglevels { DEBUG = 0, INFO = 1, WARNING = 2, ERROR = 3, NONE = 4 } /** * 设置日志级别。日志级别由低至高为: * * DEBUG * * INFO (默认) * * WARNING * * ERROR * * NONE * * 注意,在[[NERTC.createClient]]时,`debug: true`实际上将日志级别设置为了`DEBUG`, `debug: false`实际上将日志级别设置为了`WARNING`。 * * @example * ```javascript * // 查看更多日志 * NERTC.Logger.setLogLevel(NERTC.Logger.DEBUG) * rtc.client = NERTC.createClient({appkey: "<您的appkey>", debug: true}); * ``` * * @since V4.6.0 */ function setLogLevel(loglevel: loglevels): void /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ const DEBUG: loglevels.DEBUG /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ const INFO: loglevels.INFO /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ const WARNING: loglevels.WARNING /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ const ERROR: loglevels.ERROR /** * 日志级别。 * 见[[NERTC.Logger.setLogLevel]] */ const NONE: loglevels.NONE } /** * 创建客户端。 * * 该方法用于创建客户端,每次通话前调用一次即可。 * * @param options 配置参数。 * @param options.appkey * 应用的 AppKey。可从[云信后台](https://app.yunxin.163.com/)获取。 * @param options.debug 是否开启 debug 模式。 * * debug 为`true`时,浏览器会打印所有日志,即日志级别为`DEBUG`。 * * debug为`false`时,浏览器会打印警告及错误日志,即日志级别为`WARNING`。 * * 默认的日志级别为`INFO`。要关闭所有日志,应调用`NERTC.Logger.setLogLevel(NERTC.Logger.NONE)`。见[[NERTC.Logger.setLogLevel]] * * @note 注意 * 使用Web前端框架时,应该避免对SDK产生的实例进行观察,或将其转为Proxy。 * 以Vue3为例,如将`client`、`localStream`等对象设为data的属性,应将其设置为raw。 * ``` * import {markRaw} from 'vue' * * // rtc.client = NERTC.createClient(...) * // rtc.localStream = NERTC.createStream(...) * markRaw(rtc.client) * markRaw(rtc.localStream) * ``` * * @example * ```html * * *
* * * * * * ``` */ function createClient(options: { appkey: string; debug?: boolean }): Client /** * 该方法创建并返回音视频流对象。 * * @note 自 V4.1.0 版本起,摄像头与屏幕共享的视频流可以同时发送,其中屏幕共享流会以辅流形式发送。 * * @param options 配置参数。 * * @example * * ```JavaScript * // 1. 创建 localStream * // 从麦克风和摄像头采集本地音视频流 * localStream = NERTC.createStream({ * audio: true, * video: true, * uid: 123 * }); * * // 仅采集屏幕分享流 * localStream = NERTC.createStream({ * audio: false, * screen: true, * uid: 123 * }); * // 2. 初始化本地流 * await rtc.localStream.init(); * ``` */ function createStream(options: StreamOptions): | Stream | { name: string code: number desc: string } /** * 该方法枚举可用的媒体输入/输出设备,比如麦克风、摄像头、耳机等。 * * 该方法不支持 http 协议,请使用 https 协议。 * * 出于安全性考虑,各平台对枚举设备接口有不同的权限控制策略。例如: * 1. Safari浏览器只有在当前页面执行一次[getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)(也就是[[Stream.init]])之后才能够枚举设备。 * 2. Chrome浏览器曾经在当前页面执行过`getUserMedia`即可枚举设备。 * * @return * - video:视频 * * @example * ```JavaScript * // 接口使用示例 * NERTC.getDevices().then(data => { * const {audioIn, audioOut, video} = data * audioIn.forEach(item=>{ * console.log('mic label: ', item.label, 'deviceId: ', item.deviceId) * }) * video.forEach(item=>{ * console.log('video label: ', item.label, 'deviceId: ', item.deviceId) * }) * //... * }) * ``` */ function getDevices(): Promise<{ /** * 视频设备。 */ video: DeviceInfo[] /** * 音频输入设备。 */ audioIn: DeviceInfo[] /** * 音频输入设备。 */ audioOut: DeviceInfo[] }> /** * 获取可用的视频输入设备。 * * 该方法不支持 http 协议,请使用 https 协议。 * * @example * ```JavaScript * //接口使用示例 * NERTC.getCameras().then(data => { * data.forEach(item=>{ * console.log('video label: ', item.label, 'deviceId: ', item.deviceId) * }) * }) * ``` */ function getCameras(): Promise