nertc-electron-sdk
Version:
nertc-electron-sdk
1,611 lines (1,553 loc) • 166 kB
text/typescript
import {
SoftwareRenderer,
GlRenderer,
IRenderer,
CustomRenderer
} from '../renderer';
import {
NERtcEngineAPI,
NERtcEngineContext,
NERtcChannelProfileType,
NERtcRemoteVideoStreamType,
NERtcVideoCanvas,
NERtcErrorCode,
NERtcSessionLeaveReason,
NERtcVideoProfileType,
NERtcAudioProfileType,
NERtcAudioScenarioType,
NERtcVideoConfig,
NERtcAudioFrameRequestFormat,
NERtcCreateAudioMixingOption,
NERtcCreateAudioEffectOption,
NERtcRectangle,
NERtcScreenCaptureParameters,
NERtcDevice,
NERtcStats,
NERtcAudioSendStats,
NERtcAudioRecvStats,
NERtcVideoSendStats,
NERtcVideoRecvStats,
NERtcNetworkQualityInfo,
NERtcClientRole,
NERtcConnectionStateType,
NERtcReasonConnectionChangedType,
NERtcAudioDeviceType,
NERtcAudioDeviceState,
NERtcAudioMixingState,
NERtcAudioMixingErrorCode,
NERtcAudioVolumeInfo,
NERtcLiveStreamStateCode,
NERtcLiveStreamTaskInfo,
NERtcVideoMirrorMode,
NERtcVideoScalingMode,
NERtcVoiceChangerType,
NERtcVoiceBeautifierType,
NERtcVoiceEqualizationBand,
NERtcStreamChannelType,
NERtcPullExternalAudioFrameCb,
NERtcChannelMediaRelayConfiguration,
NERtcVideoStreamType,
NERtcMediaPriorityType,
NERtcScreenCaptureWindowParam,
NERtcAudioRecordingQuality,
NERtcEncryptionConfig,
NERtcJoinChannelOptions,
NERtcSize,
CaptureSoureInfo,
NERtcScreenCaptureSourceData
} from './defs'
import { EventEmitter } from 'events'
/**
* @class NERtcChannel
*/
class NERtcChannel extends EventEmitter {
channelName: string;
rtcChannel: any;
renderers: Map<string, IRenderer>;
substreamRenderers: Map<string, IRenderer>;
renderMode: 1 | 2 | 3;
customRenderer: any;
/**
* NERtcChannel
* @returns {NERtcChannel}
*/
constructor(name: string, rtcChannel: any) {
super();
this.channelName = name;
this.rtcChannel = rtcChannel;
this.renderers = new Map();
this.substreamRenderers = new Map();
this.renderMode = this._checkWebGL() ? 1 : 2;
this.customRenderer = CustomRenderer;
this.initEventHandler();
}
/**
* 释放资源。
*/
release(): void {
return this.rtcChannel.release();
}
/**
* 释放资源。
* @returns {string} 房间名
*/
getChannelName(): string {
return this.rtcChannel.getChannelName(this.channelName);
}
/**
* 加入频道。如果频道还未创建,会自动尝试创建频道。
* <pre>
* 该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App Key 的 App 是不能互通的。如果已在通话中,用户必须调用 {@link NERtcChannel#leaveChannel} 退出当前通话,才能进入下一个频道。
* 频道内每个用户的用户 ID 必须是唯一的。
* </pre>
* @param {String} token 动态秘钥。安全要求不高: 将值设为 空字符串。安全要求高:将值设置为 Token。如果您已经启用了 App Certificate, 请务必使用 Token。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
joinChannel(token: string): number {
return this.rtcChannel.joinChannel(token);
}
/**
* 加入频道。如果频道还未创建,会自动尝试创建频道。
* <pre>
* 该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App Key 的 App 是不能互通的。如果已在通话中,用户必须调用 {@link NERtcChannel#leaveChannel} 退出当前通话,才能进入下一个频道。
* 频道内每个用户的用户 ID 必须是唯一的。
* </pre>
* @param {String} token 动态秘钥。安全要求不高: 将值设为 空字符串。安全要求高:将值设置为 Token。如果您已经启用了 App Certificate, 请务必使用 Token。
* @param {number} uid 用户 ID。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
joinChannelWithUid(token: string, uid: number): number {
return this.rtcChannel.joinChannelWithUid(token, uid);
}
/**
* 加入频道。如果频道还未创建,会自动尝试创建频道。
* @since V5.4.0
* <pre>
* 该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App Key 的 App 是不能互通的。如果已在通话中,用户必须调用 {@link NERtcChannel#leaveChannel} 退出当前通话,才能进入下一个频道。
* 频道内每个用户的用户 ID 必须是唯一的。
* </pre>
* @param {String} token 动态秘钥。安全要求不高: 将值设为 空字符串。安全要求高:将值设置为 Token。如果您已经启用了 App Certificate, 请务必使用 Token。
* @param {String} channelName 标识通话的频道名称,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符): a-z, A-Z, 0-9, space, !#$%&()+-:;≤.,>? @[]^_{|}~”
* @param {number} uid 用户 ID。
* @param {Object} channelOptions 加入音视频房间时的一些可选信息。
* @param {string} channelOptions.custom_info 自定义信息,最长支持 127 个字符。
* @param {string} channelOptions.permission_key 权限密钥。能控制通话时长及媒体权限能力。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
joinChannelWithOptions(token: string, uid: number, channelOptions: NERtcJoinChannelOptions): number {
return this.rtcChannel.joinChannelWithOptions(token, uid, channelOptions);
}
/**
* 离开频道。
* <pre>
* 离开频道,即挂断或退出通话。
* 当调用 {@link NERtcChannel#joinChannel} 方法后,必须调用 {@link NERtcChannel#leaveChannel} 结束通话,否则无法开始下一次通话。不管当前是否在通话中,都可以调用 leaveChannel,没有副作用。该方法会把会话相关的所有资源释放掉。
* 该方法是异步操作,调用返回时并没有真正退出频道。在真正退出频道后,SDK 会触发 onLeaveChannel 事件。
* 如果您调用了 {@link NERtcChannel#leaveChannel} 后立即调用 {@link NERtcChannel#release} , SDK 将无法触发 onLeaveChannel 事件。
* </pre>
* @fires NERtcChannel#onLeaveChannel
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
leaveChannel(): number {
return this.rtcChannel.leaveChannel();
}
/**
* 开启或关闭本地语音采集或处理
* <pre>
* 该方法可以重新开启本地语音功能,重新开始本地音频采集及处理。
* 该方法不影响接收或播放远端音频流。
* <b>NOTE:</b>
* - 该方法与 {@link NERtcChannel#muteLocalAudioStream} 的区别在于:
* - {@link NERtcChannel#enableLocalAudio}: 开启本地语音采集及处理
* - {@link NERtcChannel#muteLocalAudioStream}: 停止或继续发送本地音频流
* 该方法设置内部引擎为启用状态,在 {@link NERtcChannel#leaveChannel} 后仍然有效。
* </pre>
* @param {Boolean} enabled
* <pre>
* - true: 重新开启本地语音功能,即开启本地语音采集或处理(默认)
* - false: 关闭本地语音功能,即停止本地语音采集或处理
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableLocalAudio(enabled: boolean): number {
return this.rtcChannel.enableLocalAudio(enabled);
}
/**
* 开启或关闭音频辅流。
* @since V5.4.0
* <pre>
* 开启时远端会收到 onUserSubStreamAudioStart,关闭时远端会收到 onUserSubStreamAudioStop。
* <b>NOTE:</b>
* - 该方法设置内部引擎为启用状态,在{@link NERtcChannel#leaveChannel}后仍然有效。
* </pre>
* @param {boolean} enabled 是否开启音频辅流:
* <pre>
* - true:开启音频辅流。
* - false:关闭音频辅流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableLocalSubStreamAudio(enabled: boolean): number {
return this.rtcChannel.enableLocalSubStreamAudio(enabled);
}
/**
* 开关本地音频发送。该方法用于允许/禁止往网络发送本地音频流。
* <pre>
* 该方法不影响录音状态,因为并没有禁用录音设备。
* </pre>
* @param {boolean} mute 静音/取消静音:
* <pre>
* - true: 静音本地音频
* - false: 取消静音本地音频(默认)
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
muteLocalAudioStream(mute: boolean): number {
return this.rtcChannel.muteLocalAudioStream(mute);
}
/**
* 静音或解除静音本地上行的音频辅流。
* @since V5.4.0
* <pre>
* <b>NOTE:</b>
* - 静音状态会在通话结束后被重置为非静音。
* - 该方法仅可在加入房间后调用。
* </pre>
* @param {boolean} mute 是否静音本地音频辅流发送。
* <pre>
* - true:静音本地音频辅流(默认)。
* - false:取消静音本地音频辅流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
muteLocalSubStreamAudio(mute: boolean): number {
return this.rtcChannel.muteLocalSubStreamAudio(mute);
}
/**
* 开启或关闭本地视频采集和渲染
* <pre>
* 该方法启用本地视频采集功能。
* 该方法设置内部引擎为启用状态,在 {@link NERtcChannel#leaveChannel} 后仍然有效。
* </pre>
* @param {boolean} enabled 是否启用本地视频:
* <pre>
* - true:开启本地视频采集和渲染 (默认)。
* - false:关闭使用本地摄像头设备。关闭后,远端用户会接收不到本地用户的视频流。但本地用户依然可以接收远端用户的视频流。设置为 false 时,该方法不需要本地有摄像头。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableLocalVideo(enabled: boolean): number {
return this.rtcChannel.enableLocalVideo(enabled);
}
/**
* 开启或关闭本地视频采集和渲染
* @since V5.4.0
* <pre>
* 该方法启用本地视频采集功能。
* 该方法设置内部引擎为启用状态,在 {@link NERtcChannel#leaveChannel} 后仍然有效。
* </pre>
* @param {number} streamType 视频通道类型:
* <pre>
* - 0:主流。
* - 1:辅流。
* </pre>
* @param {boolean} enabled 是否启用本地视频:
* <pre>
* - true:开启本地视频采集和渲染 (默认)。
* - false:关闭使用本地摄像头设备。关闭后,远端用户会接收不到本地用户的视频流。但本地用户依然可以接收远端用户的视频流。设置为 false 时,该方法不需要本地有摄像头。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableLocalVideoWithType(type: number, enabled: boolean): number {
return this.rtcChannel.enableLocalVideoWithType(type, enabled);
}
/**
* 开关本地视频发送。
* <pre>
* 调用该方法禁视频流时,SDK 不再发送本地视频流,但摄像头仍然处于工作状态。相比于 {@link NERtcChannel#enableLocalVideo} (false) 用于控制本地视频流发送的方法,该方法响应速度更快。该方法不影响本地视频流获取,没有禁用摄像头。
* </pre>
* @param {boolean} mute
* <pre>
* - true: 不发送本地视频流
* - false: 发送本地视频流(默认)
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
muteLocalVideoStream(enabled: boolean): number {
return this.rtcChannel.muteLocalVideoStream(enabled);
}
/**
* 开关本地视频发送。
* <pre>
* 调用该方法禁视频流时,SDK 不再发送本地视频流,但摄像头仍然处于工作状态。相比于 {@link NERtcChannel#enableLocalVideo} (false) 用于控制本地视频流发送的方法,该方法响应速度更快。该方法不影响本地视频流获取,没有禁用摄像头。
* </pre>
* @param {number} streamType 视频通道类型。
* <pre>
* - 0:视频主流。
* - 1:视频辅流。
* </pre>
* @param {boolean} mute
* <pre>
* - true: 不发送本地视频流
* - false: 发送本地视频流(默认)
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
muteLocalVideoStreamWithType(type: number, enabled: boolean): number {
return this.rtcChannel.muteLocalVideoStreamWithType(type, enabled);
}
/**
* 启用说话者音量提示。该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量。
* <pre>
* 启用该方法后,无论频道内是否有人说话,可以通过{@link NERtcChannel#on}方法监听 onRemoteAudioVolumeIndication,根据设置的间隔时间返回音量提示事件。
* </pre>
* @param {boolean} enable 是否启用说话者音量提示。
* @param {number} interval 指定音量提示的时间间隔,单位为毫秒。必须设置为 100 毫秒的整数倍值。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableAudioVolumeIndication(enabled: boolean, interval: number, enableVad: boolean): number {
return this.rtcChannel.enableAudioVolumeIndication(enabled, interval, enableVad);
}
// /**
// * 枚举屏幕分享源信息。
// * @since 5.5.20
// * @param {Object} thumbSize 屏幕或窗口的缩略图的目标尺寸(宽高单位为像素):
// * @param {number} thumbSize.width 缩略图缩略图宽度 px 默认 0
// * @param {number} thumbSize.height 缩略图高度 px 默认 0
// * <pre>
// * <b>NOTE:</b>
// * - SDK 会在保证原图不变形的前提下,缩放原图,使图片最长边和目标尺寸的最长边的长度一致。
// * - 如果目标尺寸大于原图尺寸,缩略图即为原图,SDK 不进行缩放操作。
// * </pre>
// * @param {Object} iconSize 程序所对应的图标的目标尺寸 px。
// * @param {number} iconSize.width 程序所对应的图标宽度 px 默认 0
// * @param {number} iconSize.height 程序所对应的图标高度 px 默认 0
// * <b>NOTE:</b>
// * - SDK 会在保证原图不变形的前提下,缩放原图,使图片最长边和目标尺寸的最长边的长度一致。
// * - 如果目标尺寸大于原图尺寸,缩略图即为原图,SDK 不进行缩放操作。
// * </pre>
// * @param includeScreen 除了窗口信息外,SDK 是否还返回屏幕信息:
// * <pre>
// * - true:SDK 返回屏幕和窗口信息。
// * - false:SDK 仅返回窗口信息。
// * </pre>
// * @returns {Object[]}
// * <pre>
// * - Object[]:调用成功。
// * <table style="width:100%;">
// * <tr><td>Object.type</td><td>int</td><td>信息源类型:-1-未知 0-窗口 1-屏幕 2-自定义。</td></tr>
// * <tr><td>Object.source_id</td><td>number</td><td>信息源 ID</td></tr>
// * <tr><td>Object.source_name</td><td>String</td><td>信息源名称。</td></tr>
// * <tr><td>Object.thumb_image</td><td>object</td><td>缩略图信息,使用前需要判断是否 undefined:
// * - buffer - BGRA 二进制数据
// * - length - 数据大小 byte
// * - width - 图片宽度 px
// * - height - 图片高度 px</td></tr>
// * <tr><td>Object.icon_image</td><td>object</td><td>图标信息,使用前需要判断是否 undefined:
// * - buffer - BGRA 二进制数据
// * - length - 数据大小 byte
// * - width - 图片宽度 px
// * - height - 图片高度 px</td></tr>
// * </table>
// * - NULL:调用失败。
// * </pre>
// */
// getScreenCaptureSources(thumbSize: NERtcSize, iconSize: NERtcSize, includeScreen: boolean): Array<Object> {
// return this.rtcChannel.getScreenCaptureSources(thumbSize, iconSize, includeScreen);
// }
// /**
// * 枚举屏幕分享源信息。
// * @since 5.5.20
// * @param {CaptureSoureInfo} source 屏幕或窗口的缩略图的目标尺寸(宽高单位为像素):
// * @param {number} source.type 信息源类型:-1-未知 0-窗口 1-屏幕 2-自定义
// * @param {number} source.source_id 信息源 ID
// * @param {object} [regionRect=] (可选) 指定待共享区域相对于整个屏幕屏幕的位置。如果设置的共享区域超出了屏幕的边界,则只共享屏幕内的内容;如果将 width 或 height 设为 0, 则共享整个屏幕。
// * @param {number} regionRect.x 左上角的横向偏移
// * @param {number} regionRect.y 左上角的纵向偏移
// * @param {number} regionRect.width 待共享区域的宽
// * @param {number} regionRect.height 待共享区域的高
// * @param {object} param 屏幕共享的编码参数配置。
// * @param {object} [param.profile=2] 屏幕共享编码参数配置:
// * <pre>
// * - 0 640x480, 5fps
// * - 1 1280x720, 5fps
// * - 2 1920x1080, 5fps。默认
// * - 3 自定义
// * </pre>
// * @param {object} param.dimensions 屏幕共享视频发送的最大像素值,param.profile=3 时生效:
// * @param {number} param.dimensions.width 宽度
// * @param {number} param.dimensions.height 高度
// * @param {number} [param.frame_rate=5] 共享视频的帧率,param.profile=3 时生效,单位为 fps;默认值为 5,建议不要超过 15
// * @param {number} [param.bitrate=0] 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值
// * @param {boolean} param.capture_mouse_cursor 是否采集鼠标用于屏幕共享
// * @param {boolean} param.window_focus 调用 {@link NERtcEngine#startScreenCaptureByWindowId} 方法共享窗口时,是否将该窗口前置
// * @param {number[]} param.excluded_window_list 待屏蔽窗口的 ID 列表
// * @param {number} param.excluded_window_count 待屏蔽窗口的数量
// * @param {number} param.prefer 编码策略倾向:
// * <pre>
// * - 0 动画模式
// * - 1 细节模式
// * </pre>
// */
// setScreenCaptureSource(source: CaptureSoureInfo, regionRect: NERtcRectangle, capture_params: NERtcScreenCaptureParameters): number {
// return this.rtcChannel.setScreenCaptureSource(source, regionRect, capture_params);
// }
/**
* 通过指定区域共享屏幕。共享一个屏幕或该屏幕的部分区域。用户需要在该方法中指定想要共享的屏幕区域。
* <pre>
* <b>NOTE:</b>
* - 该方法仅适用于 Windows。
* - 该方法打开视频辅流。
* </pre>
* @param {object} screenRect 指定待共享的屏幕相对于虚拟屏的位置。
* @param {number} screenRect.x 左上角的横向偏移
* @param {number} screenRect.y 左上角的纵向偏移
* @param {number} screenRect.width 待共享区域的宽
* @param {number} screenRect.height 待共享区域的高
* @param {object} [regionRect=] (可选) 指定待共享区域相对于整个屏幕屏幕的位置。如果设置的共享区域超出了屏幕的边界,则只共享屏幕内的内容;如果将 width 或 height 设为 0, 则共享整个屏幕。
* @param {number} regionRect.x 左上角的横向偏移
* @param {number} regionRect.y 左上角的纵向偏移
* @param {number} regionRect.width 待共享区域的宽
* @param {number} regionRect.height 待共享区域的高
* @param {object} param 屏幕共享的编码参数配置。
* @param {object} [param.profile=2] 屏幕共享编码参数配置:
* <pre>
* - 0 640x480, 5fps
* - 1 1280x720, 5fps
* - 2 1920x1080, 5fps。默认
* - 3 自定义
* </pre>
* @param {object} param.dimensions 屏幕共享视频发送的最大像素值,param.profile=3 时生效:
* @param {number} param.dimensions.width 宽度
* @param {number} param.dimensions.height 高度
* @param {number} [param.frame_rate=5] 共享视频的帧率,param.profile=3 时生效,单位为 fps;默认值为 5,建议不要超过 15
* @param {number} [param.bitrate=0] 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值
* @param {boolean} param.capture_mouse_cursor 是否采集鼠标用于屏幕共享
* @param {boolean} param.window_focus 调用 {@link NERtcChannel#startScreenCaptureByWindowId} 方法共享窗口时,是否将该窗口前置
* @param {number[]} param.excluded_window_list 待屏蔽窗口的 ID 列表
* @param {number} param.excluded_window_count 待屏蔽窗口的数量
* @param {number} param.prefer 编码策略倾向:
* <pre>
* - 0 动画模式
* - 1 细节模式
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
startScreenCaptureByScreenRect(screenRect: NERtcRectangle, regionRect: NERtcRectangle, param: NERtcScreenCaptureParameters): number {
return this.rtcChannel.startScreenCaptureByScreenRect(screenRect, regionRect, param);
}
/**
* 通过屏幕 ID 共享屏幕。共享一个屏幕或该屏幕的部分区域。用户需要在该方法中指定想要共享的屏幕 ID。
* <pre>
* <b>NOTE:</b>
* - 该方法仅适用于 Windows 和 macOS。
* - 该方法打开视频辅流。
* </pre>
* @param {number} displayId 指定待共享的屏幕 ID。开发者需要通过该参数指定您要共享的那个屏幕。
* @param {object} [regionRect=] (可选) 指定待共享区域相对于整个屏幕屏幕的位置。如果设置的共享区域超出了屏幕的边界,则只共享屏幕内的内容;如果将 width 或 height 设为 0, 则共享整个屏幕。
* @param {number} regionRect.x 左上角的横向偏移
* @param {number} regionRect.y 左上角的纵向偏移
* @param {number} regionRect.width 待共享区域的宽
* @param {number} regionRect.height 待共享区域的高
* @param {object} param 屏幕共享的编码参数配置。
* @param {object} [param.profile=2] 屏幕共享编码参数配置:
* <pre>
* - 0 640x480, 5fps
* - 1 1280x720, 5fps
* - 2 1920x1080, 5fps。默认
* - 3 自定义
* </pre>
* @param {object} param.dimensions 屏幕共享视频发送的最大像素值,param.profile=3 时生效:
* @param {number} param.dimensions.width 宽度
* @param {number} param.dimensions.height 高度
* @param {number} [param.frame_rate=5] 共享视频的帧率,param.profile=3 时生效,单位为 fps;默认值为 5,建议不要超过 15
* @param {number} [param.bitrate=0] 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值
* @param {boolean} param.capture_mouse_cursor 是否采集鼠标用于屏幕共享
* @param {boolean} param.window_focus 调用 {@link NERtcChannel#startScreenCaptureByWindowId} 方法共享窗口时,是否将该窗口前置
* @param {number[]} param.excluded_window_list 待屏蔽窗口的 ID 列表
* @param {number} param.excluded_window_count 待屏蔽窗口的数量
* @param {number} param.prefer 编码策略倾向:
* <pre>
* - 0 动画模式
* - 1 细节模式
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - -100: 需要先调用 {@link NERtcChannel#enumerateScreenCaptureSourceInfo} 缓存桌面信息
* - 其他:方法调用失败。
* </pre>
*/
startScreenCaptureByDisplayId(displayId: string, regionRect: NERtcRectangle, param: NERtcScreenCaptureParameters): number {
return this.rtcChannel.startScreenCaptureByDisplayId(displayId, regionRect, param);
}
/**
* 通过窗口 ID 共享窗口。共享一个窗口或该窗口的部分区域。用户需要在该方法中指定想要共享的窗口 ID。
* <pre>
* <b>NOTE:</b>
* - 该方法仅适用于 Windows 和 macOS。
* - 该方法打开视频辅流。
* </pre>
* @param {number} windowid 指定待共享的窗口 ID。
* @param {object} [regionRect=] (可选) 指定待共享区域相对于整个屏幕屏幕的位置。如果设置的共享区域超出了屏幕的边界,则只共享屏幕内的内容;如果将 width 或 height 设为 0, 则共享整个屏幕。
* @param {number} regionRect.x 左上角的横向偏移
* @param {number} regionRect.y 左上角的纵向偏移
* @param {number} regionRect.width 待共享区域的宽
* @param {number} regionRect.height 待共享区域的高
* @param {object} param 屏幕共享的编码参数配置。
* @param {object} [param.profile=2] 屏幕共享编码参数配置:
* <pre>
* - 0 640x480, 5fps
* - 1 1280x720, 5fps
* - 2 1920x1080, 5fps。默认
* - 3 自定义
* </pre>
* @param {object} param.dimensions 屏幕共享视频发送的最大像素值,param.profile=3 时生效:
* @param {number} param.dimensions.width 宽度
* @param {number} param.dimensions.height 高度
* @param {number} [param.frame_rate=5] 共享视频的帧率,param.profile=3 时生效,单位为 fps;默认值为 5,建议不要超过 15
* @param {number} [param.bitrate=0] 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值
* @param {boolean} param.capture_mouse_cursor 是否采集鼠标用于屏幕共享
* @param {boolean} param.window_focus 调用 {@link NERtcChannel#startScreenCaptureByWindowId} 方法共享窗口时,是否将该窗口前置
* @param {number[]} param.excluded_window_list 待屏蔽窗口的 ID 列表
* @param {number} param.excluded_window_count 待屏蔽窗口的数量
* @param {number} param.prefer 编码策略倾向:
* <pre>
* - 0 动画模式
* - 1 细节模式
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
startScreenCaptureByWindowId(windowid: string, regionRect: NERtcRectangle, param: NERtcScreenCaptureParameters): number {
return this.rtcChannel.startScreenCaptureByWindowId(windowid, regionRect, param);
}
/**
* 在共享屏幕或窗口时,更新共享的区域。
* @param {object} param 屏幕共享的编码参数配置。
* @param {object} [param.profile=2] 屏幕共享编码参数配置:
* <pre>
* - 0 640x480, 5fps
* - 1 1280x720, 5fps
* - 2 1920x1080, 5fps。默认
* - 3 自定义
* </pre>
* @param {object} param.dimensions 屏幕共享视频发送的最大像素值,param.profile=3 时生效:
* @param {number} param.dimensions.width 宽度
* @param {number} param.dimensions.height 高度
* @param {number} [param.frame_rate=5] 共享视频的帧率,param.profile=3 时生效,单位为 fps;默认值为 5,建议不要超过 15
* @param {number} [param.bitrate=0] 共享视频的码率,单位为 bps;默认值为 0,表示 SDK 根据当前共享屏幕的分辨率计算出一个合理的值
* @param {boolean} param.capture_mouse_cursor 是否采集鼠标用于屏幕共享
* @param {boolean} param.window_focus 调用 {@link NERtcChannel#startScreenCaptureByWindowId} 方法共享窗口时,是否将该窗口前置
* @param {number[]} param.excluded_window_list 待屏蔽窗口的 ID 列表
* @param {number} param.excluded_window_count 待屏蔽窗口的数量
* @param {number} param.prefer 编码策略倾向:
* <pre>
* - 0 动画模式
* - 1 细节模式
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
updateScreenCaptureRegion(regionRect: NERtcRectangle): number {
return this.rtcChannel.updateScreenCaptureRegion(regionRect);
}
/**
* 在共享屏幕或窗口时,更新是否显示鼠标。
* @since V5.4.0
* @param {boolean} capture_cursor 屏幕共享时是否捕捉鼠标光标。
* <pre>
* - true 共享屏幕时显示鼠标
* - false 共享屏幕时不显示鼠标
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setScreenCaptureMouseCursor(): number {
return this.rtcChannel.setScreenCaptureMouseCursor();
}
/**
* 停止屏幕共享。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
stopScreenCapture(): number {
return this.rtcChannel.stopScreenCapture();
}
/**
* 暂停屏幕共享。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
pauseScreenCapture(): number {
return this.rtcChannel.pauseScreenCapture();
}
/**
* 恢复屏幕共享。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
resumeScreenCapture(): number {
return this.rtcChannel.resumeScreenCapture();
}
/**
* 设置屏幕捕捉时需屏蔽的窗口列表, 该方法在捕捉过程中可动态调用。
* @since 4.4.8
* <pre>
* - 仅支持 Windows
* </pre>
* @param {list} window_list 需屏蔽的窗口 ID 列表, 例如:[id1,id2...]。
* @return {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setExcludeWindowList(param: NERtcScreenCaptureWindowParam): number {
return this.rtcChannel.setExcludeWindowList(param);
}
/**
* 更新屏幕共享参数。
* @since V5.4.0
* <pre>
* - 仅支持 Windows
* </pre>
* @param {list} window_list 需屏蔽的窗口 ID 列表, 例如:[id1,id2...]。
* @return {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
updateScreenCaptureParameters(captureParams: NERtcScreenCaptureWindowParam): number {
return this.rtcChannel.updateScreenCaptureParameters(captureParams);
}
/**
* 设置本地视图。
* <pre>
* 该方法设置本地视频显示信息。App 通过调用此接口绑定本地视频流的显示视窗(view)。在 App 开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。
* </pre>
* @param {Object} canvas 视频画布信息
* @param {number} canvas.mode 视频画布缩放模式
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @param {Element} canvas.view 视频画布对象
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setupLocalVideoCanvas(canvas: NERtcVideoCanvas): number {
if (canvas.view) {
//bind
this.initRender('local', canvas.view);
this.setRenderMode('local', canvas.mode);
return this.rtcChannel.setupVideoCanvas(0, true);
}
else {
//unbind
this.destroyRender('local');
return this.rtcChannel.setupVideoCanvas(0, false);
}
}
/**
* 设置本地辅流视图。
* <pre>
* 该方法设置本地辅流视频显示信息。App 通过调用此接口绑定本地辅流的显示视窗(view)。在 App 开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。
* </pre>
* @param {Object} canvas 视频画布信息
* @param {number} canvas.mode 视频显示模式
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @param {Element} canvas.view 视频画布对象
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setupLocalSubStreamVideoCanvas(canvas: NERtcVideoCanvas): number {
if (canvas.view) {
//bind
this.initSubStreamRender('local', canvas.view);
this.setSubStreamRenderMode('local', canvas.mode);
return this.rtcChannel.setupSubStreamVideoCanvas(0, true);
}
else {
//unbind
this.destroySubStreamRender('local');
return this.rtcChannel.setupSubStreamVideoCanvas(0, false);
}
}
/**
* 设置本地视图/远端视图显示模式。
* <pre>
* 该方法设置视图显示模式。App 可以多次调用此方法更改显示模式。
* </pre>
* @param {(string|number)} uid
* <pre>
* 'local':本地视图
* {number}:远端用户 ID。
* </pre>
* @param {number} mode 视频显示模式:
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setRenderMode(uid: 'local' | number, mode: NERtcVideoScalingMode): number {
if (this.renderers.has(String(uid))) {
let renderer = this.renderers.get(String(uid));
(renderer as IRenderer).setContentMode(mode);
return 0;
}
else {
return -1;
}
}
/**
* 设置辅流视图/远端辅流视图显示模式。
* <pre>
* 该方法设置视图显示模式。App 可以多次调用此方法更改显示模式。
* </pre>
* @param {(string|number)} uid
* <pre>
* 'local':本地辅流视图
* {number}:远端辅流用户 ID。
* </pre>
* @param {number} mode 视频显示模式:
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setSubStreamRenderMode(uid: 'local' | number, mode: NERtcVideoScalingMode): number {
if (this.substreamRenderers.has(String(uid))) {
let renderer = this.substreamRenderers.get(String(uid));
(renderer as IRenderer).setContentMode(mode);
return 0;
}
else {
return -1;
}
}
/**
* 设置本地视频镜像模式。
* <pre>
* 该方法设置本地视频镜像模式。App 可以多次调用此方法更改镜像模式。
* </pre>
* @param {number} mode 视频镜像模式:
* <pre>
* - 0 Windows/macOS SDK 启用镜像模式。
* - 1 启用镜像模式。
* - 2 (默认)关闭镜像模式。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setLocalVideoMirrorMode(mode: NERtcVideoMirrorMode): number {
return this.rtcChannel.setLocalVideoMirrorMode(mode);
}
/**
* 设置本地视频镜像模式。
* @since V5.4.0
* <pre>
* 通过此接口可以设置本地视频是否开启镜像模式,即画面是否左右翻转。
* <b>NOTE:</b>
* - 纯音频 SDK 禁用该接口
* - 本地视频画布的镜像模式仅影响本地用户所见,不影响远端用户所见。您的应用层可以多次调用此方法更改镜像模式。
* </pre>
* @param {number} streamType 视频通道类型。
* <pre>
* - 0:主流。
* - 1:辅流。
* </pre>
* @param {number} mode 视频镜像模式:
* <pre>
* - 0 Windows/macOS SDK 启用镜像模式。
* - 1 启用镜像模式。
* - 2 (默认)关闭镜像模式。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setLocalVideoMirrorModeWithType(type: number, mode: NERtcVideoMirrorMode): number {
return this.rtcChannel.setLocalVideoMirrorModeWithType(type, mode);
}
/**
* 设置远端用户视图。
* <pre>
* 该方法绑定远端用户和显示视图,即设定 uid 指定的用户用哪个视图显示。调用该接口时需要指定远端视频的 uid,一般可以在用户加入后设置好。
* 如果 App 不能事先知道对方的 uid,可以在 APP 收到 onUserJoined 事件时设置。
* 退出频道后,SDK 会把远端用户的绑定关系清除掉。
* </pre>
* @param {number} uid 远端用户 ID。
* @param {Object} canvas 视频画布信息
* @param {number} canvas.mode 视频画布缩放模式
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @param {Element} canvas.view 视频画布对象
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setupRemoteVideoCanvas(uid: number, canvas: NERtcVideoCanvas): number {
if (canvas.view) {
//bind
this.initRender(uid, canvas.view);
this.setRenderMode(uid, canvas.mode);
return this.rtcChannel.setupVideoCanvas(uid, true);
}
else {
//unbind
this.destroyRender(uid);
return this.rtcChannel.setupVideoCanvas(uid, false);
}
}
/**
* 设置远端用户辅流视图。
* <pre>
* 该方法绑定远端用户和辅流显示视图,即设定 uid 指定的用户用哪个视图显示。调用该接口时需要指定远端视频的 uid,一般可以在用户加入后设置好。
* <b>NODE:</b>
* - 如果 App 不能事先知道对方的 uid,可以通过{@link NERtcChannel#on}方法监听 onUserJoined 事件时设置。
* - 退出频道后,SDK 会把远端用户的绑定关系清除掉。
* </pre>
* @param {number} uid 远端用户 ID。
* @param {Object} canvas 视频画布信息
* @param {number} canvas.mode 视频显示模式
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
* - 1 视频尺寸非等比缩放。保证视频内容全部显示,且填满视窗。
* - 2 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
* </pre>
* @param {Element} canvas.view 视频画布对象
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setupRemoteSubStreamVideoCanvas(uid: number, canvas: NERtcVideoCanvas): number {
if (canvas.view) {
//bind
this.initSubStreamRender(uid, canvas.view);
this.setSubStreamRenderMode(uid, canvas.mode);
return this.rtcChannel.setupSubStreamVideoCanvas(uid, true);
}
else {
//unbind
this.destroySubStreamRender(uid);
return this.rtcChannel.setupSubStreamVideoCanvas(uid, false);
}
}
/**
* 设置参会者角色
* <pre>
* {@link NERtcChannel#setClientRole} 接口用于在直播场景中设置用户角色。默认情况下用户以主播角色加入房间。
* 在加入房间前,用户需要调用 setClientRole 接口设置本端模式为观众或主播模式。在加入房间后,用户可以通过本接口切换用户模式。
* 用户角色支持设置为主播或观众,主播和观众的权限不同。默认情况下用户以主播角色加入房间。
* 可以在通话前后设置,通话前设置会在加入频道之后生效。如果设置观众模式。则会停止音视频设备。
* </pre>
* @param {number} role 参会者模式
* <pre>
* - 主播(0):可以开关摄像头等设备、可以发布流、可以操作互动直播推流相关接口、上下线对其他房间内用户可见
* - 观众(1):不可以开关摄像头等设备、不可以发布流、不可以操作互动直播推流相关接口、上下线对其他房间内用户不可见
* </pre>
* @fires NERtcChannel#onClientRoleChanged
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setClientRole(role: NERtcClientRole): number {
return this.rtcChannel.setClientRole(role);
}
/**
* 设置本地用户的媒体流优先级。
* @since 4.4.8
* <pre>
* - 如果本地用户的优先级为高,则该用户媒体流的优先级就会高于其他用户,那么弱网环境下 SDK 会优先保证其他用户收到的本地用户媒体流的质量。
* <b>NOTE:</b>
* - 请在加入房间(joinChannel)前调用此方法。
* - 快速切换房间 (switchChannel) 后,媒体优先级会恢复为默认值,即普通优先级。
* - 一个音视频房间中只有一个高优先级的用户。建议房间中只有一位用户调用 setLocalMediaPriority 将本端媒体流设为高优先级,否则需要开启抢占模式,才能保证本地用户的高优先级设置生效。
* </pre>
* @param {number} priority 本地用户的媒体流优先级。
* <pre>
* - 50 高优先级。
* - 100 普通,默认优先级。
* </pre>
* @param {boolean} preemptive 是否开启抢占模式。默认为 false,即不开启。
* <pre>
* - 抢占模式开启后,本地用户可以抢占其他用户的高优先级,被抢占的用户的媒体流优先级变为普通优先级。在抢占者退出房间后,其他用户的优先级仍旧维持普通优先级。
* - 抢占模式关闭后,如果房间中已有高优先级用户,则本地用户的高优先级设置不生效,仍旧为普通优先级。
* </pre
* @return {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setLocalMediaPriority(priority: NERtcMediaPriorityType, preemptive:boolean): number {
return this.rtcChannel.setLocalMediaPriority(priority, preemptive);
}
/**
* 获取当前网络状态。
* @returns {number}
* <pre>
* - 1 没加入频道。
* - 2 正在加入频道。
* - 3 加入频道成功。
* - 4 正在尝试重新加入频道。
* - 5 加入频道失败。
* </pre>
*/
getConnectionState(): number {
return this.rtcChannel.getConnectionState();
}
/**
* 设置本地摄像头的视频主流采集配置。
* @since V5.4.0
* <pre>
* 通过此接口可以设置本地摄像头采集的主流视频宽度、高度、旋转角度等。
* <b>NOTE:</b>
* - 纯音频 SDK 禁用该接口。
* - 该方法仅适用于视频主流。
* - 该方法支持在加入房间后动态调用,设置成功后,会自动重启摄像头采集模块。
* - 若系统相机不支持您设置的分辨率,会自动调整为最相近一档的分辨率,因此建议您设置为常规标准的分辨率。
* - 设置较高的采集分辨率会增加性能消耗,例如 CPU 和内存占用等,尤其是在开启视频前处理的场景下。
* </pre>
* @param {object} config 摄像头采集配置:
* @param {number} config.captureWidth 本地采集的视频宽度,单位为 px。
* @param {number} config.captureHeight 本地采集的视频高度,单位为 px。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setCameraCaptureConfig(config: any): number {
return this.rtcChannel.setCameraCaptureConfig(config);
}
/**
* 设置本地摄像头的视频主流或辅流采集配置。
* @since V5.4.0
* <pre>
* 通过此接口可以设置本地摄像头采集的主流或辅流视频宽度、高度、旋转角度等。
* <b>NOTE:</b>
* - 纯音频 SDK 禁用该接口。
* - 调用该接口设置成功后,会自动重启摄像头采集模块。
* </pre>
* @param {NERtcVideoStreamType} streamType 视频通道类型。
* <pre>
* - 0:主流。
* - 1:辅流。
* </pre>
* @param {object} config 摄像头采集配置:
* @param {number} config.captureWidth 本地采集的视频宽度,单位为 px。
* @param {number} config.captureHeight 本地采集的视频高度,单位为 px。
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setCameraCaptureConfigWithType(type: number, config: any): number {
return this.rtcChannel.setCameraCaptureConfigWithType(type, config);
}
/**
* 设置视频配置。
* <pre>
* 该方法设置视频配置。每个属性对应一套视频参数,如分辨率等,会在摄像头重启后生效。所有设置的参数均为理想情况下的最大值。当视频引擎因网络环境等原因无法达到设置的分辨率的最大值时,会取最接近最大值的那个值。
* </pre>
* @param {object} config 视频配置:
* @param {number} config.max_profile 视频编码的分辨率,用于衡量编码质量:
* <pre>
* - 0 160x90/120, 15fps
* - 1 320x180/240, 15fps
* - 2 640x360/480, 30fps
* - 3 1280x720, 30fps
* - 4 1920x1080, 30fps
* </pre>
* @param {number} config.width 视频编码自定义分辨率之宽度。width 为 0 表示使用 max_profile
* @param {number} config.height 视频编码自定义分辨率之高度。height 为 0 表示使用 max_profile
* @param {number} config.crop_mode 视频画面裁剪模式:
* <pre>
* - 0 Device Defalut
* - 1 16:9
* - 2 4:3
* - 3 1:1
* </pre>
* @param {number} config.framerate 视频帧率:
* <pre>
* - 0 默认帧率
* - 7 7 帧每秒
* - 10 10 帧每秒
* - 15 15 帧每秒
* - 24 24 帧每秒
* - 30 30 帧每秒
* - 60 60 帧每秒
* </pre>
* @param {number} config.min_framerate 视频最小帧率:
* <pre>
* - 0 默认帧率
* - 7 7 帧每秒
* - 10 10 帧每秒
* - 15 15 帧每秒
* - 24 24 帧每秒
* - 30 30 帧每秒
* </pre>
* @param {number} [config.bitrate=0] 视频编码码率 kbps,取 0 时使用默认值
* @param {number} [config.min_bitrate=0] 视频编码码率下限 kbps,取 0 时使用默认值
* @param {number} config.degradation_preference 编码策略:
* <pre>
* - 0 使用引擎推荐值。通话场景使用平衡模式,直播推流场景使用清晰优先
* - 1 帧率优先
* - 2 清晰度优先
* - 3 平衡模式
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setVideoConfig(config: NERtcVideoConfig): number {
return this.rtcChannel.setVideoConfig(config);
}
/**
* 设置视频配置。
* @since V5.4.0
* <pre>
* 该方法设置视频配置。每个属性对应一套视频参数,如分辨率等,会在摄像头重启后生效。所有设置的参数均为理想情况下的最大值。当视频引擎因网络环境等原因无法达到设置的分辨率的最大值时,会取最接近最大值的那个值。
* </pre>
* @param {number} streamType 视频通道类型。
* <pre>
* - 0:主流。
* - 1:辅流。
* </pre>
* @param {object} config 视频配置:
* @param {number} config.max_profile 视频编码的分辨率,用于衡量编码质量:
* <pre>
* - 0 160x90/120, 15fps
* - 1 320x180/240, 15fps
* - 2 640x360/480, 30fps
* - 3 1280x720, 30fps
* - 4 1920x1080, 30fps
* </pre>
* @param {number} config.width 视频编码自定义分辨率之宽度。width 为 0 表示使用 max_profile
* @param {number} config.height 视频编码自定义分辨率之高度。height 为 0 表示使用 max_profile
* @param {number} config.crop_mode 视频画面裁剪模式:
* <pre>
* - 0 Device Defalut
* - 1 16:9
* - 2 4:3
* - 3 1:1
* </pre>
* @param {number} config.framerate 视频帧率:
* <pre>
* - 0 默认帧率
* - 7 7 帧每秒
* - 10 10 帧每秒
* - 15 15 帧每秒
* - 24 24 帧每秒
* - 30 30 帧每秒
* - 60 60 帧每秒
* </pre>
* @param {number} config.min_framerate 视频最小帧率:
* <pre>
* - 0 默认帧率
* - 7 7 帧每秒
* - 10 10 帧每秒
* - 15 15 帧每秒
* - 24 24 帧每秒
* - 30 30 帧每秒
* </pre>
* @param {number} [config.bitrate=0] 视频编码码率 kbps,取 0 时使用默认值
* @param {number} [config.min_bitrate=0] 视频编码码率下限 kbps,取 0 时使用默认值
* @param {number} config.degradation_preference 编码策略:
* <pre>
* - 0 使用引擎推荐值。通话场景使用平衡模式,直播推流场景使用清晰优先
* - 1 帧率优先
* - 2 清晰度优先
* - 3 平衡模式
* </pre>
* @param {number} config.mirror_mode 设置本地视频编码的镜像模式,即本地发送视频的镜像模式,只影响远端用户看到的视频画面:
* <pre>
* - 0 Windows/macOS SDK 启用镜像模式。
* - 1 启用镜像模式。
* - 2 (默认)关闭镜像模式。
* </pre>
* @param {NERtcVideoOutputOrientationMode} config.orientation_mode 编码策略:
* <pre>
* - 0 该模式下 SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转(默认)。
* - 1 该模式下 SDK 固定输出横屏模式的视频。如果采集到的视频是竖屏模式,则视频编码器会对其进行裁剪。
* - 2 该模式下 SDK 固定输出竖屏模式的视频,如果采集到的视频是横屏模式,则视频编码器会对其进行裁剪。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setVideoConfigWithType(type: number, config: NERtcVideoConfig): number {
return this.rtcChannel.setVideoConfigWithType(type, config);
}
/**
* 设置视频双流发送。
* <pre>
* 调用该方法控制是否支持发送双流,只对摄像头数据生效,自定义输入、取屏等无效。设置后,会在摄像头重启后生效。
* </pre>
* @param {boolean} enable
* <pre>
* - true: 双流发送(默认)
* - false: 只发送一个流
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
enableDualStreamMode(enabled: boolean): number {
return this.rtcChannel.enableDualStreamMode(enabled);
}
/**
* 订阅/取消订阅指定音频流。
* @param {number} uid 指定用户的 ID
* @param {boolean} subscribe
* <pre>
* - true:订阅指定音频流(默认)。
* - false:取消订阅指定音频流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
subscribeRemoteAudioStream(uid: number, enabled: boolean): number {
return this.rtcChannel.subscribeRemoteAudioStream(uid, enabled);
}
/**
* 订阅/取消订阅指定音频辅流
* @since V5.4.0
* @param {number} uid 指定用户的 ID
* @param {boolean} subscribe
* <pre>
* - true:订阅指定音频辅流(默认)。
* - false:取消订阅指定音频辅流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
subscribeRemoteSubStreamAudio(uid: number, enabled: boolean): number {
return this.rtcChannel.subscribeRemoteSubStreamAudio(uid, enabled);
}
/**
* 取消或恢复订阅所有远端用户的音频主流。
* @since V5.4.0
* <pre>
* 加入房间时,默认订阅所有远端用户的音频主流。
* <b>NOTE:</b>
* - 设置该方法的 subscribe 参数为 true 后,对后续加入房间的用户同样生效。
* - 在开启自动订阅(默认)时,设置该方法的 subscribe 参数为 false 可以实现取消订阅所有远端用户的音频流,但此时无法再调用{@link NERtcChannel#subscribeRemoteAudioStream}方法单独订阅指定远端用户的音频流。
* </pre>
* @param {boolean} subscribe
* <pre>
* - true:订阅所有远端用户的音频主流。
* - false:取消订阅所有远端用户的音频主流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
subscribeAllRemoteAudioStream(subscribe: boolean): number {
return this.rtcChannel.subscribeAllRemoteAudioStream(subscribe);
}
/**
* 设置自己的音频只能被房间内指定的人订阅。
* @since V5.4.0
* <pre>
* 默认房间所有其他人都可以订阅自己的音频。
* <b>NOTE:</b>
* - 此接口需要在加入房间成功后调用。
* - 对于调用接口时不在房间的 uid 不生效。
* </pre>
* @param {Array<Number>} uids 用户 ID 数组
* @param {number} size 数组长度
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
setAudioSubscribeOnlyBy(subscribe: boolean): number {
return this.rtcChannel.setAudioSubscribeOnlyBy(subscribe);
}
/**
* 订阅 / 取消订阅指定远端用户的视频流。对方打开视频后需要主动订阅
* @param {number} uid 指定用户的用户 ID。
* @param {number} type 流类型:
* <pre>
* - 0 默认大流
* - 1 小流
* - 2 不订阅
* </pre>
* @param {boolean} subscribe
* <pre>
* - true:订阅指定远端用户的视频流。
* - false:取消订阅指定远端用户的视频流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
subscribeRemoteVideoStream(uid: number, type: number, subscribe: boolean) {
return this.rtcChannel.subscribeRemoteVideoStream(uid, type, subscribe);
}
/**
* 订阅 / 取消订阅指定远端用户的视频辅流。
* <pre>
* 对方打开视频后需要主动订阅
* <b>NOTE:</b>
* - 必须在远端加入房间后调用。
* - 必须先设置远端辅流画布。
* </pre>
* @param {number} uid 指定用户的用户 ID。
* @param {number} subscribe
* <pre>
* - true:订阅指定远端用户的视频流。
* - false:取消订阅指定远端用户的视频流。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
subscribeRemoteVideoSubStream(uid: number, sub: boolean) {
return this.rtcChannel.subscribeRemoteVideoSubStream(uid, sub);
}
/**
* 添加房间推流任务,成功添加后当前用户可以收到该直播流的状态通知。通话中有效。
* @fires NERtcChannel#onAddLiveStreamTask
* @param {Object} info 直播任务信息。
* @param {String} info.task_id 推流任务 ID,为推流任务的唯一标识,用于过程中增删任务操作 <64 chars
* @param {String} info.stream_url 直播推流地址 <256 chars
* @param {Boolean} info.server_record_enabled 服务器录制功能是否开启
* @param {Number} info.ls_mode 直播推流模式:
* <pre>
* - 0 推流带视频
* - 1 推流纯音频
* </pre>
* @param {Object} info.config 音视频流编码参数等设置:
* @param {boolean} info.config.singleVideoPassThrough 音频编码规格。默认值为 NERtcLiveStreamAudioCodecProfileLCAAC 普通编码规格。
* @param {boolean} info.config.audioBitrate 音频推流码率。单位为 kbps,取值范围为 10~192。语音场景建议设置为 64 及以上码率,音乐场景建议设置为 128 及以上码率。
* @param {boolean} info.config.sampleRate 音频推流采样率。默认值为 NERtcLiveStreamAudioSampleRate48000 48K。
* @param {boolean} info.config.channels 音频推流声道数。1:单声道。2:(默认)双声道。
* @param {boolean} info.config.audioCodecProfile 音频编码规格。默认值为 NERtcLiveStreamAudioCodecProfileLCAAC 普通编码规格。
* <pre>
* - 0 HE-AAC 规格,表示高效音频编码规格。
* - 1 (默认)LC-AAC 规格,表示基本音频编码规格。
* </pre>
* @param {Object} info.layout 视频布局:
* @param {number} info.layout.width 视频推流宽度
* @param {number} info.layout.height 视频推流高度
* @param {number} info.layout.background_color 视频推流背景色,(R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff)
* @param {number} info.layout.user_count 成员布局个数
* @param {object[]} info.layout.users 成员布局数组:
* @param {number} info.layout.users[].uid 用户 ID
* @param {boolean} info.layout.users[].video_push 是否推送该用户视频流,info.ls_mode=1 时无效
* @param {number} info.layout.users[].adaption 视频流裁剪模式:
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充背景色
* - 1 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉
* </pre>
* @param {number} info.layout.users[].x 画面离主画面左边距
* @param {number} info.layout.users[].y 画面离主画面上边距
* @param {number} info.layout.users[].width 画面在主画面的显示宽度,画面右边超出主画面会失败
* @param {number} info.layout.users[].height 画面在主画面的显示高度,画面底边超出主画面会失败
* @param {boolean} info.layout.users[].audio_push 是否推送该用户音频流
* @param {object} info.layout.users[].bg_image 背景图信息:
* @param {String} info.layout.users[].bg_image.url 图片地址
* @param {number} info.layout.users[].bg_image.x 画面离主画面左边距
* @param {number} info.layout.users[].bg_image.y 画面离主画面上边距
* @param {number} info.layout.users[].bg_image.width 画面在主画面的显示宽度,画面右边超出主画面会失败
* @param {number} info.layout.users[].bg_image.height 画面在主画面的显示高度,画面底边超出主画面会失败
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
addLiveStreamTask(info: NERtcLiveStreamTaskInfo): number {
return this.rtcChannel.addLiveStreamTask(info);
}
/**
* 更新修改房间推流任务。通话中有效。
* @fires NERtcChannel#onUpdateLiveStreamTask
* @param {Object} info 直播任务信息。
* @param {String} info.task_id 推流任务 ID,为推流任务的唯一标识,用于过程中增删任务操作 <64 chars
* @param {String} info.stream_url 直播推流地址 <256 chars
* @param {Boolean} info.server_record_enabled 服务器录制功能是否开启
* @param {Number} info.ls_mode 直播推流模式:
* <pre>
* - 0 推流带视频
* - 1 推流纯音频
* </pre>
* @param {Object} info.layout 视频布局:
* @param {number} info.layout.width 视频推流宽度
* @param {number} info.layout.height 视频推流高度
* @param {number} info.layout.background_color 视频推流背景色,(R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff)
* @param {number} info.layout.user_count 成员布局个数
* @param {object[]} info.layout.users 成员布局数组:
* @param {number} info.layout.users[].uid 用户 ID
* @param {boolean} info.layout.users[].video_push 是否推送该用户视频流,info.ls_mode=1 时无效
* @param {number} info.layout.users[].adaption 视频流裁剪模式:
* <pre>
* - 0 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充背景色
* - 1 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉
* </pre>
* @param {number} info.layout.users[].x 画面离主画面左边距
* @param {number} info.layout.users[].y 画面离主画面上边距
* @param {number} info.layout.users[].width 画面在主画面的显示宽度,画面右边超出主画面会失败
* @param {number} info.layout.users[].height 画面在主画面的显示高度,画面底边超出主画面会失败
* @param {boolean} info.layout.users[].audio_push 是否推送该用户音频流
* @param {object} info.layout.users[].bg_image 背景图信息:
* @param {String} info.layout.users[].bg_image.url 图片地址
* @param {number} info.layout.users[].bg_image.x 画面离主画面左边距
* @param {number} info.layout.users[].bg_image.y 画面离主画面上边距
* @param {number} info.layout.users[].bg_image.width 画面在主画面的显示宽度,画面右边超出主画面会失败
* @param {number} info.layout.users[].bg_image.height 画面在主画面的显示高度,画面底边超出主画面会失败
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
updateLiveStreamTask(info: NERtcLiveStreamTaskInfo): number {
return this.rtcChannel.updateLiveStreamTask(info);
}
/**
* 删除房间推流任务。通话中有效。
* @fires NERtcChannel#onRemoveLiveStreamTask
* @param {String} taskId 直播任务 ID
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
removeLiveStreamTask(taskId: String): number {
return this.rtcChannel.removeLiveStreamTask(taskId);
}
/**
* 发送媒体补充增强信息(SEI)。
* @since 4.1.110
* <pre>
* 在本端推流传输视频流数据同时,发送流媒体补充增强信息来同步一些其他附加信息。当推流方发送 SEI 后,拉流方可通过监听 onRecvSEIMsg 的回调获取 SEI 内容。
* - 调用时机:视频流(主流)开启后,可调用此函数。
* - 数据长度限制: SEI 最大数据长度为 4096 字节,超限会发送失败。如果频繁发送大量数据会导致视频码率增大,可能会导致视频画质下降甚至卡顿。
* - 发送频率限制:最高为视频发送的帧率,建议不超过 10 次/秒。
* - 生效时间:调用本接口之后,最快在下一帧视频数据帧之后发送 SEI 数据,最慢在接下来的 5 帧视频之后发送。
* <b>NOTE:</b>
* - SEI 数据跟随视频帧发送,由于在弱网环境下可能丢帧,SEI 数据也可能随之丢失,所以建议在发送频率限制之内多次发送,保证接收端收到的概率。
* - 调用本接口时,默认使用主流通道发送 SEI。
* </pre>
* @param {ArrayBuffer} data 自定义 SEI 数据
* @return {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
sendSEIMsg(data: ArrayBuffer): number {
return this.rtcChannel.sendSEIMsg(data);
}
/**
* 发送媒体补充增强信息(SEI)。
* @since 4.1.110
* <pre>
* 在本端推流传输视频流数据同时,发送流媒体补充增强信息来同步一些其他附加信息。当推流方发送 SEI 后,拉流方可通过监听 onRecvSEIMsg 的回调获取 SEI 内容。
* - 调用时机:视频流(主流)开启后,可调用此函数。
* - 数据长度限制: SEI 最大数据长度为 4096 字节,超限会发送失败。如果频繁发送大量数据会导致视频码率增大,可能会导致视频画质下降甚至卡顿。
* - 发送频率限制:最高为视频发送的帧率,建议不超过 10 次/秒。
* - 生效时间:调用本接口之后,最快在下一帧视频数据帧之后发送 SEI 数据,最慢在接下来的 5 帧视频之后发送。
* <b>NOTE:</b>
* - SEI 数据跟随视频帧发送,由于在弱网环境下可能丢帧,SEI 数据也可能随之丢失,所以建议在发送频率限制之内多次发送,保证接收端收到的概率。
* - 调用本接口时,默认使用主流通道发送 SEI。
* </pre>
* @param {ArrayBuffer} data 自定义 SEI 数据
* @param {number} type 发送 SEI 时,使用的流通道类型:
* <pre>
* - 0: 主流通道
* - 1: 辅流通道
* </pre>
* @return {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
sendSEIMsgWithType(data: ArrayBuffer, type: NERtcStreamChannelType) {
return this.rtcChannel.sendSEIMsgWithType(data, type);
}
/**
* 在指定用户的画布上截图。
* @param {'local'|number} uid 指定用户的 uid,其中在本地用户画布上截图时,此参数为 local。
* @param {NERtcVideoStreamType} streamType 视频流类型。
* <pre>
* - 0:视频流主流。
* - 1:视频流辅流。
* </pre>
* @returns string 返回 base64 截图数据。
*/
captureImageByUid(uid: 'local' | number, streamType: NERtcVideoStreamType = NERtcVideoStreamType.kNERtcVideoStreamMain): string {
return this.captureRender(uid, streamType)
}
/**
* 调节本地播放的指定远端用户的指定流类型的信号音量
* @since 4.1.110
* <pre>
* - 加入房间后,您可以多次调用该方法设置本地播放的不同远端用户的音量;也可以反复调节本地播放的某个远端用户的音量。
* <b>NOTE:</b>
* - 请在成功加入房间后调用该方法。
* - 该方法在本次通话中有效。如果远端用户中途退出房间,则再次加入此房间时仍旧维持该设置,通话结束后设置失效。
* - 该方法调节的是本地播放的指定远端用户混音后的音量,且每次只能调整一位远端用户。若需调整多位远端用户在本地播放的音量,则需多次调用该方法。
* </pre>
* @param {number} uid 远端用户 ID。
* @param {number} volume volume 播放音量,取值范围为 [0,100]。
* <pre>
* - 0:静音。
* - 100:原始音量。
* </pre>
* @returns {number}
* <pre>
* - 0:方法调用成功。
* - 其他:方法调用失败。
* </pre>
*/
adjustUserPlaybackSignalVolume(uid: number, volume: number): number {
return this.rtcChannel.adjustUserPlaybackSignalVolume(uid, volume)
}
/**
* 调节本地播放的指定房间的所有远端用户的信号音量。
* @since V5.4.0
* <pre>
* -通过此接口可以实现在通话过程中随时调节指定房间内的所有远端用户在本地播放的混音音量。
* <b>NOTE:</b>
* - 请在引擎初始化之后调用此接口,该方法在加入房间前后都可调用。
* - 该方法设置内部引擎为启用