TRTC

TRTC

TRTC对象 通过 TRTC.create() 创建,提供实时音视频的核心能力:

TRTC 生命周期如图所示:

Methods

(static) create() → {TRTC}

创建一个 TRTC 对象,用于实现进房、预览、推流、拉流等功能。

注意:

  • 您必须先创建 TRTC 对象,通过调用此对象方法和监听此对象事件才能实现业务所需要的各种功能。
Example
// 创建trtc对象
const trtc = TRTC.create();
Returns:

trtc对象

Type
TRTC

(async) enterRoom(options)

进入一个音视频通话房间(以下简称"进房")。

Example
const trtc = TRTC.create();
await trtc.enterRoom({ roomId: 8888, sdkAppId, userId, userSig });
Parameters:
Name Type Description
options object required

进房参数

Properties
Name Type Default Description
sdkAppId number required

sdkAppId
实时音视频控制台 单击 应用管理 > 创建应用 创建新应用之后,即可在 应用信息 中获取 sdkAppId 信息。

userId string required

用户ID
建议限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。

userSig string required

userSig 签名
计算 userSig 的方式请参考 UserSig 相关

roomId number

数字类型的房间号,取值要求为 [1, 4294967294] 的整数;
如果需要使用字符串类型的房间号请使用 strRoomId 参数,roomId 和 strRoomId 必须填一个。若两者都填,则优先选择 roomId。

strRoomId string

字符串类型的房间号,限制长度为64字节,且仅支持以下范围的字符集:

  • 大小写英文字母(a-zA-Z)
  • 数字(0-9)
  • 空格 ! # $ % & ( ) + - : ; < = . > ? @ [ ] ^ _ { } | ~ ,

注意:建议采用数字类型的 roomId,字符串类型的房间号 "123" 与 数字类型的房间号 123 不互通。

scene string

应用场景,目前支持以下两种场景:

  • TRTC.TYPE.SCENE_RTC(默认)实时通话场景,该模式适合 1对1 的音视频通话,或者参会人数在 300 人以内的在线会议。支持最大50人同时开麦
  • TRTC.TYPE.SCENE_LIVE 互动直播场景,该模式适合十万人以内的在线直播场景,但需要您在接下来介绍的 options 参数中指定 角色(role) 这个字段
role string

用户角色,仅在 TRTC.TYPE.SCENE_LIVE 场景下有意义,TRTC.TYPE.SCENE_RTC 场景无需指定 role,目前支持两种角色:

  • TRTC.TYPE.ROLE_ANCHOR(默认) 主播
  • TRTC.TYPE.ROLE_AUDIENCE 观众
    注意:观众角色没有发布本地音视频的权限,只有收看远端流的权限。如果观众想要连麦跟主播互动, 请先通过 switchRole() 切换角色到主播后再发布本地音视频。
autoReceiveAudio boolean true

是否自动接收音频。当远端用户发布音频后,SDK 自动播放远端用户的音频。

autoReceiveVideo boolean false

是否自动接收视频。当远端用户发布视频后,SDK 自动拉流并解码远端视频,您需要调用 startRemoteVideo 播放远端视频。

enableAutoPlayDialog boolean

是否开启 SDK 自动播放失败弹窗,默认:true。

  • 默认开启,当出现自动播放失败时,SDK 会弹窗引导用户点击页面,来恢复音视频播放。
  • 可设置为 false 关闭,建议接入侧参考自动播放受限处理建议来处理自动播放失败相关问题。
userDefineRecordId string

用于设置云端录制的 userDefineRecordId(选填)。

  • 【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
  • 【参考文档】云端录制
proxy string | ProxyServer

设置代理服务器。参考最佳实践:应对防火墙受限

privateMapKey boolean

进房钥匙,若需要权限控制请携带该参数(传空或传错会导致进房失败)。
privateMapKey 权限设置

Throws:

(async) exitRoom()

退出当前音视频通话房间。

  • 退房后将会关闭和远端用户的连接,不再接收和播放远端用户音视频,并且停止本地音视频的发布。
  • 本地摄像头和麦克风的采集和预览不会因此而停止。您可以调用 stopLocalVideo()stopLocalAudio() 停止本地音视频采集。
Example
await trtc.exitRoom();
Throws:

(async) switchRole(role, optionopt)

切换用户角色,仅在 TRTC.TYPE.SCENE_LIVE 互动直播模式下生效。

互动直播模式下,一个用户可能需要在“观众”和“主播”之间来回切换。 您可以通过 enterRoom() 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。

  • 观众切换为主播,调用 trtc.switchRole(TRTC.TYPE.ROLE_ANCHOR) 将用户角色转换为 TRTC.TYPE.ROLE_ANCHOR 主播角色,之后按需调用 startLocalVideo()startLocalAudio() 发布本地音视频。
  • 主播切换为观众,调用 trtc.switchRole(TRTC.TYPE.ROLE_AUDIENCE) 将用户角色转换为 TRTC.TYPE.ROLE_AUDIENCE 观众角色,此时如果有已发布的本地音视频,SDK 会取消发布本地音视频。

注意:

  • 该接口需要在进房成功后才可以调用。
  • 关闭摄像头和麦克风后,建议及时切换成观众角色,避免主播角色占用 50路上行的资源。
Examples
// 进房成功后
// TRTC.TYPE.SCENE_LIVE 互动直播模式下,观众切换为主播
await trtc.switchRole(TRTC.TYPE.ROLE_ANCHOR);
// 观众角色切换为主播,开始推流
await trtc.startLocalVideo();
// TRTC.TYPE.SCENE_LIVE 互动直播模式下,主播切换为观众
await trtc.switchRole(TRTC.TYPE.ROLE_AUDIENCE);
// Since v5.3.0+
await trtc.switchRole(TRTC.TYPE.ROLE_ANCHOR, { privateMapKey: 'your new privateMapKey' });
Parameters:
Name Type Description
role string required

用户角色

  • TRTC.TYPE.ROLE_ANCHOR 主播,可以发布本地音视频,单个房间里最多支持 50 个主播同时发布本地音视频。
  • TRTC.TYPE.ROLE_AUDIENCE 观众,不能发布本地音视频,只能观看远端流,单个房间里的观众人数没有上限。
option object
Properties
Name Type Description
privateMapKey string

支持 v5.3.0+
privateMapKey 有可能会超时失效,您可以传入该参数更新 privateMapKey。

Throws:

destroy()

销毁 TRTC 实例

在退房之后,若业务侧无需再使用 trtc 时,需调用该接口及时销毁 trtc 实例,释放相关资源。

注意:

  • 销毁后的 trtc 实例不可再继续使用。
  • 已进房的情况下,需先调用 TRTC.exitRoom 接口退房成功后,才能调用该接口销毁 trtc。
Example
// 通话结束时
await trtc.exitRoom();
// 若后续无需再使用该 trtc,则销毁 trtc,并释放引用。
trtc.destroy();
trtc = null;
Throws:

(async) startLocalAudio(configopt)

开启本地麦克风采集,并发布到当前的房间中。

  • 调用时机:进房前后均可调用,不可重复调用。
  • 一个 trtc 实例只能开启一路麦克风,若您需要在已经开启一路麦克风的情况下,再开启一路麦克风用于测试,可以创建多个 trtc 实例实现。
Examples
// 采集默认麦克风并发布
await trtc.startLocalAudio();
// 如下是测试麦克风音量的代码示例,可用于麦克风音量检测。
trtc.enableAudioVolumeEvaluation();
trtc.on(TRTC.EVENT.AUDIO_VOLUME, event => { });
// 测试麦克风无需发布音频
await trtc.startLocalAudio({ publish: false });
// 测试完毕后,关闭麦克风
await trtc.stopLocalAudio();
Parameters:
Name Type Description
config object

配置项

Properties
Name Type Description
publish boolean

是否将本地音频发布到房间中,默认为true。若在进房前调用该接口,并且 publish = true,则在进房后 SDK 会自动发布。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

mute boolean

是否静音麦克风。参考:开关摄像头、麦克风

option object

本地音频选项

Properties
Name Type Description
microphoneId string

指定使用哪个麦克风

audioTrack MediaStreamTrack

自定义采集的 audioTrack。自定义采集与自定义播放渲染

captureVolume number

设置采集音量,默认值 100,设置小于 100 可以降低采集音量,设置大于 100 可以放大采集音量,注意有爆音风险。自 v5.2.1+ 支持。

earMonitorVolume number

设置耳返音量,取值[0, 100],本地麦克风默认静音播放。

profile string

音频编码配置, 默认TRTC.TYPE.AUDIO_PROFILE_STANDARD

Throws:

(async) updateLocalAudio(configopt)

更新本地麦克风配置。

  • 调用时机:该接口需在 startLocalAudio() 成功后调用,可以多次调用。
  • 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
Example
// 切换麦克风
const microphoneList = await TRTC.getMicrophoneList();
if (microphoneList[1]) {
  await trtc.updateLocalAudio({ option: { microphoneId: microphoneList[1].deviceId }});
}
Parameters:
Name Type Description
config object
Properties
Name Type Description
publish boolean

是否将本地音频发布到房间中,默认为 true。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

mute boolean

是否静音麦克风。参考:开关摄像头、麦克风

option object

本地音频配置

Properties
Name Type Description
microphoneId string

指定使用哪个麦克风,用来切换麦克风。

audioTrack MediaStreamTrack

自定义采集的 audioTrack。 自定义采集与自定义播放渲染

captureVolume number

设置采集音量,默认值 100,设置小于 100 可以降低采集音量,设置大于 100 可以放大采集音量,注意有爆音风险。自 v5.2.1+ 支持。

earMonitorVolume number

设置耳返音量,取值[0, 100],本地麦克风默认静音播放。

Throws:

(async) stopLocalAudio()

停止本地麦克风的采集及发布。

Example
await trtc.stopLocalAudio();
Throws:

(async) startLocalVideo(configopt)

开启本地摄像头采集,在您指定的 HTMLElement 标签下播放摄像头画面,并将摄像头画面发布到当前所在房间中。

  • 调用时机:进房前后均可调用,不可重复调用。
  • 一个 trtc 实例只能开启一路摄像头。若您需要在已经开启一路摄像头的情况下,再开启一路摄像头用于测试,可以创建多个 trtc 实例实现。
Examples

示例 1:预览及发布摄像头

// 预览及发布摄像头
await trtc.startLocalVideo({
  view: document.getElementById('localVideo'), // 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
});

示例 2:测试摄像头——只预览不发布

// 只预览摄像头画面、不发布。可用于做摄像头测试。
const config = {
  view: document.getElementById('localVideo'), // 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
  publish: false // 不发布摄像头
}
await trtc.startLocalVideo(config);
// 当需要发布视频时调用 updateLocalVideo
await trtc.updateLocalVideo({ publish:true });

示例 3:预览及发布指定的摄像头

// 使用指定的摄像头。
// 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
const view = document.getElementById('localVideo');
const cameraList = await TRTC.getCameraList();
if (cameraList[0]) {
  await trtc.startLocalVideo({
    view,
    option: {
      cameraId: cameraList[0].deviceId,
    }
  });
}
// 在移动端指定使用前置摄像头
await trtc.startLocalVideo({ view, option: { useFrontCamera: true }});
// 在移动端指定使用后置摄像头
await trtc.startLocalVideo({ view, option: { useFrontCamera: false }});
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

本地视频预览的 HTMLElement 实例或者 Id, 如果不传或传入 null, 则不会播放视频。

publish boolean

是否将本地视频发布到房间中。默认为 true,若在进房前调用该接口,SDK 会在进房成功后自动发布(若 publish=true)。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

mute boolean | string

是否临时关闭摄像头。支持传入图片 url 字符串,本地与远端将显示这张图片,房间内其他用户会收到 REMOTE_AUDIO_AVAILABLE 事件,不支持在摄像头关闭时调用。详细内容请参考:开关摄像头、麦克风.

option object

本地视频配置

Properties
Name Type Description
cameraId string

指定使用哪个摄像头,用于切换摄像头。

useFrontCamera boolean

是否使用前置摄像头。

videoTrack MediaStreamTrack

自定义采集的 videoTrack。自定义采集与自定义播放渲染

mirror 'view' | 'publish' | 'both' | boolean

视频镜像模式,默认为 'view'。可选参数如下:

  • 'view': 你看自己是镜像,对方看你是非镜像的。
  • 'publish': 你看自己是非镜像的,对方看你是镜像的。
  • 'both': 你看自己是镜像的,对方看你是镜像的。
  • false: 布尔值,代表没有任何镜像。

注意: 5.3.2 之前版本仅支持传入 boolean,true 代表本地预览镜像,false 代表没有任何镜像。

fillMode 'contain' | 'cover' | 'fill'

视频填充模式。默认为 cover。参考 CSS object-fit 属性。

profile VideoProfile

视频大流编码参数。默认值:480p_2

small boolean | VideoProfile

视频小流编码参数,参考:多人视频通话

qosPreference QOS_PREFERENCE_SMOOTH | QOS_PREFERENCE_CLEAR

设置弱网时,视频编码策略。(默认)流畅度优先(QOS_PREFERENCE_SMOOTH)或 清晰度优先(QOS_PREFERENCE_CLEAR

Throws:

(async) updateLocalVideo(configopt)

更新本地摄像头配置。

  • 该接口需在 startLocalVideo() 成功后调用。
  • 该接口可以多次调用。
  • 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
Examples

示例 1:动态切换摄像头

// 切换摄像头
const cameraList = await TRTC.getCameraList();
if (cameraList[1]) {
  await trtc.updateLocalVideo({ option: { cameraId: cameraList[1].deviceId }});
}

示例 2:停止发布视频,但保持本地预览

// 停止发布视频,但保持本地预览
await trtc.updateLocalVideo({ publish:false });
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

预览摄像头的 HTMLElement 实例或者 Id, 如果不传或传入null,则不会渲染视频,但仍然会推流并消耗带宽

publish boolean

是否将本地视频发布到房间中。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

mute boolean | string

是否临时关闭摄像头。支持传入图片 url 字符串,本地与远端将显示这张图片,房间内其他用户会收到 REMOTE_AUDIO_AVAILABLE 事件,不支持在摄像头关闭时调用。详细内容请参考:开关摄像头、麦克风.

option object

本地视频配置

Properties
Name Type Description
cameraId string

指定使用哪个摄像头,

useFrontCamera boolean

是否使用前置摄像头

videoTrack MediaStreamTrack

自定义采集的 videoTrack,自定义采集与自定义播放渲染

mirror 'view' | 'publish' | 'both' | boolean

视频镜像模式,默认为 'view'。可选参数如下:

  • 'view': 你看自己是镜像,对方看你是非镜像的。
  • 'publish': 你看自己是非镜像的,对方看你是镜像的。
  • 'both': 你看自己是镜像的,对方看你是镜像的。
  • false: 布尔值,代表没有任何镜像。
fillMode 'contain' | 'cover' | 'fill'

视频填充模式。参考 CSS object-fit 属性

profile string | VideoProfile

视频大流编码参数

small string | boolean | VideoProfile

视频小流编码参数,参考:多人视频通话

qosPreference QOS_PREFERENCE_SMOOTH | QOS_PREFERENCE_CLEAR

设置弱网时,视频编码策略。(默认)流畅度优先(QOS_PREFERENCE_SMOOTH)或 清晰度优先(QOS_PREFERENCE_SMOOTH

Throws:

(async) stopLocalVideo()

停止本地摄像头的采集、预览及发布。

Example
await trtc.stopLocalVideo();
Throws:

(async) startScreenShare(configopt)

开启屏幕分享。

Example
// 开始屏幕分享
await trtc.startScreenShare();
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

预览本地屏幕分享的 HTMLElement 实例或 Id, 如果不传或传入 null, 则不会渲染本地屏幕分享。

publish boolean

是否将屏幕分享发布到房间中。默认为 true,若在进房前调用该接口,SDK 会在进房成功后自动发布。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

option object

屏幕分享配置

Properties
Name Type Default Description
systemAudio boolean

是否采集系统声音,默认为 false。

fillMode 'contain' | 'cover' | 'fill'

视频填充模式。默认为 contain,参考 CSS object-fit 属性。

profile ScreenShareProfile

屏幕分享编码配置。 默认值:1080p

qosPreference QOS_PREFERENCE_SMOOTH | QOS_PREFERENCE_CLEAR

设置弱网时,视频编码策略。流畅度优先(QOS_PREFERENCE_SMOOTH)或 (默认)清晰度优先(QOS_PREFERENCE_CLEAR

videoTrack MediaStreamTrack

自定义采集的 videoTrack。自定义采集与自定义播放渲染

captureElement HTMLElement

采集当前页面中的某个 HTMLElement,支持 Chrome 104+。

preferDisplaySurface 'current-tab' | 'tab' | 'window' | 'monitor' 'monitor'

控制屏幕分享预选框中的不同类型采集的显示优先级,默认是 monitor,即:在屏幕分享采集预选框中,优先展示屏幕采集。若填 'current-tab',预选框只会展示当前页面。支持 Chrome 94+。

Throws:

(async) updateScreenShare(configopt)

更新屏幕分享配置

  • 该接口需在 startScreenShare() 成功后调用。
  • 该接口可以多次调用。
  • 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
Example
// 停止屏幕分享,但保持屏幕分享本地预览
await trtc.updateScreenShare({publish:false});
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

屏幕分享预览的 HTMLElement 实例或 Id, 如果不传或传入 null, 则不会渲染屏幕分享。

publish boolean

是否将屏幕分享发布到房间中。可监听该事件获取推流状态 PUBLISH_STATE_CHANGED

option object

屏幕分享配置

Properties
Name Type Description
fillMode 'contain' | 'cover' | 'fill'

视频填充模式。默认为 contain,参考 CSS object-fit 属性。

qosPreference QOS_PREFERENCE_SMOOTH | QOS_PREFERENCE_CLEAR

设置弱网时,视频编码策略。流畅度优先(QOS_PREFERENCE_SMOOTH)或 (默认)清晰度优先(QOS_PREFERENCE_CLEAR

Throws:

(async) stopScreenShare()

停止屏幕分享。

Example
await trtc.stopScreenShare();
Throws:

(async) startRemoteVideo(configopt)

播放远端视频

Example
trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, ({ userId, streamType }) => {
  // 您需在 DOM 中提前放置视频容器,建议以 `${userId}_${streamType}` 作为 element id。
  trtc.startRemoteVideo({ userId, streamType, view: `${userId}_${streamType}` });
})
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

用于播放远端视频的 HTMLElement 实例或者 Id, 如果不传或传入null, 则不会渲染视频, 但会仍然会拉流消耗带宽

userId string required

远端用户Id

streamType TRTC.TYPE.STREAM_TYPE_MAIN | TRTC.TYPE.STREAM_TYPE_SUB required

远端流类型

option object

远端视频配置

Properties
Name Type Default Description
small boolean

是否拉小流

mirror boolean

是否开启镜像

fillMode 'contain' | 'cover' | 'fill'

视频填充模式。参考 CSS object-fit 属性。

receiveWhenViewVisible boolean

支持 v5.4.0+
只在 view 可视时,才拉取视频流,不在可视区域内的流,SDK 会自动取消拉流,以达到节省流量的目的。参考:多人视频通话

viewRoot HTMLElement document.body

支持 v5.4.0+
view 的父级元素,用于计算 view 相对于 viewRoot 是否处于可视区域。建议传入 view 列表第一级父级元素,默认值是 document.body。参考:多人视频通话.

Throws:

(async) updateRemoteVideo(configopt)

更新远端视频播放配置

  • 该方法需 startRemoteVideo 成功后调用。
  • 该方法可多次调用。
  • 该方法采用增量更新的方式,只需要传入需要更新的配置项即可。
Example
const config = {
 view: document.getElementById(userId), // 你可以传入新的 view 来更新 video 播放位置。
 userId,
 streamType: TRTC.TYPE.STREAM_TYPE_MAIN
}
await trtc.updateRemoteVideo(config);
Parameters:
Name Type Description
config object
Properties
Name Type Description
view string | HTMLElement | Array.<HTMLElement> | null

用于播放远端视频的 HTMLElement 实例或者 Id, 如果不传或传入null, 则不会渲染视频, 但会仍然会拉流消耗带宽

userId string required

远端用户Id

streamType TRTC.TYPE.STREAM_TYPE_MAIN | TRTC.TYPE.STREAM_TYPE_SUB required

远端流类型:

option object

远端视频配置

Properties
Name Type Default Description
small boolean

是否拉小流,参考:多人视频通话

mirror boolean

是否开启镜像

fillMode 'contain' | 'cover' | 'fill'

视频填充模式。参考 CSS object-fit 属性。

receiveWhenViewVisible boolean

支持 v5.4.0+
只在 view 可视时,才拉取视频流,不在可视区域内的流,SDK 会自动取消拉流,以达到节省流量的目的。参考:多人视频通话

viewRoot HTMLElement document.body

支持 v5.4.0+
view 的父级元素,用于计算 view 相对于 viewRoot 是否处于可视区域。建议传入 view 列表第一级父级元素,默认值是 document.body。参考:多人视频通话.

Throws:

(async) stopRemoteVideo(config)

用于停止远端视频播放。

Example
// 停止播放所有远端用户
await trtc.stopRemoteVideo({ userId: '*' });
Parameters:
Name Type Description
config object required

远端视频配置

Properties
Name Type Description
userId string required

远端用户 userId,'*' 代表所有用户。

streamType TRTC.TYPE.STREAM_TYPE_MAIN | TRTC.TYPE.STREAM_TYPE_SUB

远端流类型,当 userId 不为 '*' 时,该字段必填。

Throws:

(async) muteRemoteAudio(userId, mute)

静音某个远端用户,并且不再拉取该用户的音频数据。仅对当前用户有效,房间内的其他用户依然可以听到被静音用户的声音。

注意:

  • 默认情况下,在进房后,SDK 会自动播放远端音频。您可以调用该接口将远端用户静音及取消静音。
  • 进房时如果传入参数 autoReceiveAudio = false,则不会自动播放远端音频。当需要播放音频时,需要调用该方法(mute 传入 false)播放远端音频。
  • 在进入房间(enterRoom)之前或之后调用本接口均生效,静音状态在退出房间(exitRoom)之后会被重置为 false。
  • 如果您希望继续拉取该用户的音频数据,仅仅是不播放,可以调用 setRemoteAudioVolume(userId, 0)
Example
// 静音所有远端用户
await trtc.muteRemoteAudio('*', true);
Parameters:
Name Type Description
userId string required

远端用户 userId,'*' 代表所有用户。

mute boolean required

是否静音

Throws:

setRemoteAudioVolume(userId, volume)

用于控制远端音频的播放音量。

  • 不支持 iOS Safari
Example
await trtc.setRemoteAudioVolume('123', 90);
Parameters:
Name Type Description
userId string required

远端用户 userId。'*' 代表所有远端用户。

volume number required

音量大小,取值范围为0 - 100,默认值为 100。
v5.1.3+ 版本支持设置 volume 大于100。需注意,设置超过 100 可能有爆音风险。

(async) startPlugin(plugin, options) → {Promise.<void>}

开启插件

pluginName 插件名称 参考教程 参数类型
'AudioMixer' 背景音乐插件 背景音乐实现方案 AudioMixerOptions
'AIDenoiser' 降噪插件 开启 AI 降噪 AIDenoiserOptions
'CDNStreaming' CDN混流插件 云端混流与转推CDN CDNStreamingOptions
'VirtualBackground' 虚拟背景插件 开启虚拟背景 VirtualBackgroundOptions
'Watermark' 水印插件 开启水印 WatermarkOptions
'BasicBeauty' 基础美颜插件 开启基础美颜 BasicBeautyOptions
Parameters:
Name Type Description
plugin PluginName required
options AudioMixerOptions | AIDenoiserOptions | CDNStreamingOptions | VirtualBackgroundOptions | WatermarkOptions | BasicBeautyOptions required
Returns:
Type
Promise.<void>

(async) updatePlugin(plugin, options) → {Promise.<void>}

更新插件

pluginName 插件名称 参考教程 参数类型
'AudioMixer' 背景音乐插件 背景音乐实现方案 UpdateAudioMixerOptions
'CDNStreaming' CDN混流插件 云端混流与转推CDN CDNStreamingOptions
'VirtualBackground' 虚拟背景插件 开启虚拟背景 UpdateVirtualBackgroundOptions
'BasicBeauty' 基础美颜插件 开启基础美颜 BasicBeautyOptions
Parameters:
Name Type Description
plugin PluginName required
options UpdateAudioMixerOptions | CDNStreamingOptions | UpdateVirtualBackgroundOptions | BasicBeautyOptions required
Returns:
Type
Promise.<void>

(async) stopPlugin(plugin, options) → {Promise.<void>}

停止插件

pluginName 插件名称 参考教程 参数类型
'AudioMixer' 背景音乐插件 背景音乐实现方案 StopAudioMixerOptions
'AIDenoiser' 降噪插件 开启 AI 降噪
'CDNStreaming' CDN混流插件 云端混流与转推CDN CDNStreamingOptions
'VirtualBackground' 虚拟背景插件 开启虚拟背景
'Watermark' 水印插件 开启水印
'BasicBeauty' 基础美颜插件 开启基础美颜
Parameters:
Name Type Description
plugin PluginName required
options StopAudioMixerOptions | CDNStreamingOptions required
Returns:
Type
Promise.<void>

enableAudioVolumeEvaluation(intervalopt, enableInBackgroundopt)

开启或关闭音量大小回调

  • 开启此功能后,无论房间内是否有人说话,SDK 会定时抛出 TRTC.on(TRTC.EVENT.AUDIO_VOLUME) 事件,反馈每一个用户的的音量大小评估值。
Example
trtc.on(TRTC.EVENT.AUDIO_VOLUME, event => {
   event.result.forEach(({ userId, volume }) => {
       const isMe = userId === ''; // 当 userId 为空串时,代表本地麦克风音量。
       if (isMe) {
           console.log(`my volume: ${volume}`);
       } else {
           console.log(`user: ${userId} volume: ${volume}`);
       }
   })
});
// 开启音量回调,并设置每 1000ms 触发一次事件
trtc.enableAudioVolumeEvaluation(1000);
// 如需关闭音量回调,传入 interval 值小于等于0即可
trtc.enableAudioVolumeEvaluation(-1);
Parameters:
Name Type Default Description
interval number 2000

用于设置音量回调事件定时触发的时间间隔。默认为 2000(ms),最小值为100(ms)。若设置小于等于0时,则关闭音量大小回调。

enableInBackground boolean false

出于性能的考虑,当页面切换到后台时,SDK 不会抛出音量回调事件。如需在页面切后台时接收音量回调事件,可设置该参数为 true。

on(eventName, handler, context)

监听 TRTC 事件

详细事件列表请参见:TRTC.EVENT

Example
trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, event => {
  // REMOTE_VIDEO_AVAILABLE event handler
});
Parameters:
Name Type Description
eventName string required

事件名

handler function required

事件回调函数

context context required

上下文

off(eventName, handler, context)

取消事件监听

Example
trtc.on(TRTC.EVENT.REMOTE_USER_ENTER, function peerJoinHandler(event) {
  // REMOTE_USER_ENTER event handler
  console.log('remote user enter');
  trtc.off(TRTC.EVENT.REMOTE_USER_ENTER, peerJoinHandler);
});
// 解除所有事件绑定
trtc.off('*');
Parameters:
Name Type Description
eventName string required

事件名,传入通配符 '*' 会解除所有事件监听。

handler function required

事件回调函数

context context required

上下文

getAudioTrack(configopt) → (nullable) {MediaStreamTrack}

获取音频轨道

Example
// Version before v5.4.3
trtc.getAudioTrack(); // 获取本地麦克风 audioTrack
trtc.getAudioTrack('remoteUserId'); // 获取远端 audioTrack
// Since v5.4.3+
trtc.getAudioTrack({ streamType: TRTC.STREAM_TYPE_SUB }); // 获取本地屏幕分享 audioTrack
// Since v5.8.2+
trtc.getAudioTrack({ processed: true }); // 获取处理后的 audioTrack
Parameters:
Name Type Description
config Object | string

不传则获取本地的 audioTrack

Properties
Name Type Default Description
userId string

不传或传空串,代表获取本地的 audioTrack。传远端用户的 userId,代表获取远端用户的 audioTrack。

streamType STREAM_TYPE_MAIN | STREAM_TYPE_SUB

stream type:

  • TRTC.TYPE.STREAM_TYPE_MAIN: 主流(用户麦克风)(默认值)
  • TRTC.TYPE.STREAM_TYPE_SUB: 辅流(用户屏幕分享),只对获取本地屏幕分享 audioTrack 有效,因为一个远端用户只有一个 audioTrack, 不区分 Main 和 Sub。
processed boolean false

是否获取处理(包括 AI 降噪、增益、混音等)后的音频轨道,默认为 false。

Returns:

音频轨道

Type
MediaStreamTrack

getVideoTrack(configopt) → {MediaStreamTrack|null}

获取视频轨道

Example
// 获取本地摄像头 videoTrack
const videoTrack = trtc.getVideoTrack();
// 获取本地屏幕分享 videoTrack
const screenVideoTrack = trtc.getVideoTrack({ streamType: TRTC.TYPE.STREAM_TYPE_SUB });
// 获取远端用户的主流 videoTrack
const remoteMainVideoTrack = trtc.getVideoTrack({ userId: 'test', streamType: TRTC.TYPE.STREAM_TYPE_MAIN });
// 获取远端用户的辅流 videoTrack
const remoteSubVideoTrack = trtc.getVideoTrack({ userId: 'test', streamType: TRTC.TYPE.STREAM_TYPE_SUB });
// Since v5.8.2+, 获取处理后的 videoTrack
const processedVideoTrack = trtc.getVideoTrack({ processed: true });
Parameters:
Name Type Description
config string

不传则获取本地摄像头 videoTrack

Properties
Name Type Default Description
userId string

不传或传空串,代表获取本地的 videoTrack。传远端用户的 userId,代表获取远端用户的 videoTrack。

streamType STREAM_TYPE_MAIN | STREAM_TYPE_SUB

远端流类型:

processed boolean false

是否获取处理(虚拟背景、镜像、水印等)后的视频轨道,默认为 false。

Returns:

视频轨道

Type
MediaStreamTrack | null

getVideoSnapshot()

获取视频帧
注意事项: Stream 必须经过播放才可以获取视频帧,如果没有播放将会返回空字符串

Since:
  • 5.4.0
Example
// 获取本地主流视频帧
trtc.getVideoSnapshot()
// 获取本地辅流视频帧
trtc.getVideoSnapshot({streamType:TRTC.TYPE.STREAM_TYPE_SUB})
// 获取远端主流视频帧
let frameData = trtc.getVideoSnapshot({userId: 'remote userId', streamType:TRTC.TYPE.STREAM_TYPE_MAIN})
// 显示视频帧
const img = document.createElement('img');
img.width = '640';
img.height = '480';
img.src = frameData;
document.body.appendChild(img);
Parameters:
Name Type Description
config.userId string required

Remote user ID

config.streamType TRTC.TYPE.STREAM_TYPE_MAIN | TRTC.TYPE.STREAM_TYPE_SUB required

获取视频帧的 stream 类型

sendSEIMessage(buffer, optionsopt)

发送 SEI Message

视频帧的头部有一个叫做 SEI 的头部数据块,该接口的原理就是利用这个被称为 SEI 的头部数据块,将您要发送的自定义信令嵌入其中,使其同视频帧一并发送出去。 SEI 消息可以伴随着视频帧一直传输到直播 CDN 上。

适用场景:视频画面的精准布局、歌词同步、直播答题等。 调用时机:在 trtc.startLocalVideo (如果设置了 toSubStream 为 true,则trtc.startLocalScreen) 后调用。

注意:

  1. 单次最大发送1KB(Byte),每秒最大调用次数30次,每秒最多发送8KB。
  2. 支持的浏览器: Chrome 86+, Edge 86+, Opera 72+,Safari 15.4+,Firefox 117+。注意:自 v5.8.0 起支持 Safari 和 Firefox。
  3. 由于 SEI 跟随视频帧一起发送,视频帧有丢失的可能,因此 SEI 也可能丢失。可在使用频次限制范围内,增加发送次数,业务侧需要在接收端做消息去重。
  4. 没有推视频流(如果设置了 toSubStream 为 true 则是辅流)时,无法发送 SEI;没有订阅视频流时,无法接收 SEI。
  5. 仅支持 H264 编码器发送 SEI。
Since:
  • v5.3.0
See:
Example
// 1. 开启 SEI
const trtc = TRTC.create({
   enableSEI: true // 开启 SEI 收发功能
})
// 2. 推流端发送 SEI
try {
 await trtc.enterRoom({
  userId: 'user_1',
  roomId: 12345,
})
 await trtc.startLocalVideo();
 const unit8Array = new Uint8Array([1, 2, 3]);
 trtc.sendSEIMessage(unit8Array.buffer);
 // 消息已通过限制,等待后续视频帧发送。
} catch(error) {
 // 发送失败,可能原因:当前浏览器不支持、参数校验未通过、未推流、没推视频流、调用次数超出限制、使用非 H264 编码器等。
 console.warn(error);
}
// 3. 拉流端接收 SEI
trtc.on(TRTC.EVENT.SEI_MESSAGE, event => {
 console.warn(`收到 ${event.userId} 的 sei ${event.data}`);
})
Parameters:
Name Type Description
buffer ArrayBuffer required

待发送的 SEI 数据

options Object
Properties
Name Type Default Description
seiPayloadType Number required

设置 SEI payload type。SDK 默认使用自定义 payloadType 243,业务侧可使用该参数将 payloadType 设置为标准的 5。当业务侧使用 5 payloadType 时,需按照规范确保 buffer 的前16字节是业务侧自定义的 uuid。

toSubStream Boolean false

设置通过辅流传输 SEI 数据。必须先调用 trtc.startLocalScreen 后才能生效。支持 v5.7.0+。

sendCustomMessage(message)

发送自定义消息,消息会广播给房间内的所有用户。

Note:

  1. 只有 TRTC.TYPE.ROLE_ANCHOR 角色可以调用 sendCustomMessage
  2. 需要在进房成功后才能发送自定义消息
  3. SDK 会保序和尽可能可靠地发送自定义消息,但是在弱网环境下是有可能丢消息的。接收端也会按顺序收到消息。
Since:
  • v5.6.0
See:
Example
// send custom message
trtc.sendCustomMessage({
  cmdId: 1,
  data: new TextEncoder().encode('hello').buffer
});
// receive custom message
trtc.on(TRTC.EVENT.CUSTOM_MESSAGE, event => {
   // event.userId: 远端发消息的 userId
   // event.cmdId: 您自定义的消息 Id
   // event.seq: 消息的序号
   // event.data: 消息内容,ArrayBuffer 类型
   console.log(`received custom msg from ${event.userId}, message: ${new TextDecoder().decode(event.data)}`)
})
Parameters:
Name Type Description
message object required
Properties
Name Type Description
cmdId number required

消息 Id,整数,取值范围 1-10。你可以为不同类型的消息设置不同的 cmdId,以降低传输延迟。

data ArrayBuffer required

消息内容

  • 一次最大发送 1KB(Byte) 数据。
  • 每秒限频调用 30 次,每秒最多发送 8KB 数据。

(static) setLogLevel(levelopt, enableUploadLogopt)

设置日志输出等级
建议在开发测试阶段设置为 DEBUG 等级,该日志等级包含详细的提示信息。 默认输出 INFO 日志等级,该日志等级包含 SDK 主要功能的日志信息。

Example
// 输出 DEBUG 以上日志等级
TRTC.setLogLevel(1);
Parameters:
Name Type Default Description
level 0-5

日志输出等级 0: TRACE 1: DEBUG 2: INFO 3: WARN 4: ERROR 5: NONE

enableUploadLog boolean true

是否开启日志上传,默认开启。不建议关闭,关闭后将影响问题排障。

(static) isSupported() → {Promise.<object>}

检测 TRTC Web SDK 是否支持当前浏览器

Example
TRTC.isSupported().then((checkResult) => {
  if(!checkResult.result) {
     console.log('checkResult', checkResult.result, 'checkDetail', checkResult.detail);
     // SDK 不支持当前浏览器,引导用户使用最新版的 Chrome 浏览器。
  }
});
Returns:

Promise 返回检测结果

Property Type Description
checkResult.result boolean 检测结果
checkResult.detail.isBrowserSupported boolean 当前浏览器是否是 SDK 支持的浏览器
checkResult.detail.isWebRTCSupported boolean 当前浏览器是否支持 WebRTC
checkResult.detail.isWebCodecsSupported boolean 当前浏览器是否支持 WebCodecs
checkResult.detail.isMediaDevicesSupported boolean 当前浏览器是否支持获取媒体设备及媒体流
checkResult.detail.isScreenShareSupported boolean 当前浏览器是否支持屏幕分享
checkResult.detail.isSmallStreamSupported boolean 当前浏览器是否支持小流
checkResult.detail.isH264EncodeSupported boolean 当前浏览器上行是否支持 H264 编码
checkResult.detail.isH264DecodeSupported boolean 当前浏览器下行是否支持 H264 编码
checkResult.detail.isVp8EncodeSupported boolean 当前浏览器上行是否支持 VP8 编码
checkResult.detail.isVp8DecodeSupported boolean 当前浏览器下行是否支持 VP8 编码
Type
Promise.<object>

(static) getCameraList(requestPermissionopt) → {Promise.<Array.<MediaDeviceInfo>>}

返回摄像头设备列表
Note

  • 该接口不支持在 http 协议下使用,请使用 https 协议部署您的网站。Privacy and security
  • 调用该接口可能会短暂打开摄像头来获取摄像头权限,以保证正常获取摄像头列表,随后 SDK 会自动释放摄像头采集。
  • 可以调用浏览器原生接口 getCapabilities 获取摄像头支持的最大分辨率、帧率、移动端设备区分前后置摄像头等。该接口支持 Chrome 67+, Edge 79+, Safari 17+, Opera 54+ 浏览器。
Example
const cameraList = await TRTC.getCameraList();
if (cameraList[0] && cameraList[0].getCapabilities) {
  const { width, height, frameRate, facingMode } = cameraList[0].getCapabilities();
  // 摄像头支持的最大分辨率、帧率。
  console.log(width.max, height.max, frameRate.max);
  // 在移动端区分该摄像头是前置还是后置。
  if (facingMode) {
    if (facingMode[0] === 'user') {
      // 前置摄像头
    } else if (facingMode[0] === 'environment') {
      // 后置摄像头
    }
  }
}
Parameters:
Name Type Default Description
requestPermission boolean true

Since v5.6.3. 是否请求获取设备权限。如果为 true,调用该接口可能会短暂打开摄像头来获取摄像头权限,以保证正常获取摄像头列表,随后 SDK 会自动释放采集。

Returns:

Promise 返回 MediaDeviceInfo 数组

Type
Promise.<Array.<MediaDeviceInfo>>

(static) getMicrophoneList(requestPermissionopt) → {Promise.<Array.<MediaDeviceInfo>>}

返回麦克风设备列表
Note

  • 该接口不支持在 http 协议下使用,请使用 https 协议部署您的网站。Privacy and security
  • 可以调用浏览器原生接口 getCapabilities 获取麦克风能力信息,例如支持的最大声道数等。该接口支持 Chrome 67+, Edge 79+, Safari 17+, Opera 54+ 浏览器。
  • Android 端一般会有多个麦克风,label 列表为: ['default', 'Speakerphone', 'Headset earpiece'],如果在 trtc.startLocalAudio 时,不指定麦克风,浏览器默认麦克风可能会采集到 Headset earpiece,此时声音会从听筒放出。若需要通过扬声器外放,则需要指定采集 label 为 Speakerphone 的麦克风。
Example
const microphoneList = await TRTC.getMicrophoneList();
if (microphoneList[0] && microphoneList[0].getCapabilities) {
  const { channelCount } = microphoneList[0].getCapabilities();
  console.log(channelCount.max);
}
Parameters:
Name Type Default Description
requestPermission boolean true

Since v5.6.3. 是否请求获取设备权限。如果为 true,调用该接口可能会短暂打开麦克风来获取麦克风权限,以保证正常获取麦克风列表,随后 SDK 会自动释放麦克风采集。

Returns:

Promise 返回 MediaDeviceInfo 数组

Type
Promise.<Array.<MediaDeviceInfo>>

(static) getSpeakerList(requestPermissionopt) → {Promise.<Array.<MediaDeviceInfo>>}

返回扬声器设备列表

不支持移动端设备

Parameters:
Name Type Default Description
requestPermission boolean true

Since v5.6.3. 是否请求获取设备权限。如果为 true,调用该接口可能会短暂打开麦克风来获取麦克风权限,以保证正常获取扬声器列表,随后 SDK 会自动释放麦克风采集。

Returns:

Promise 返回 MediaDeviceInfo 数组

Type
Promise.<Array.<MediaDeviceInfo>>

(async, static) setCurrentSpeaker(speakerId)

设置当前音频播放的扬声器

Parameters:
Name Type Description
speakerId string required

扬声器 ID