TRTCCalling

TRTCCalling

new TRTCCalling(options) → {Object}

腾讯云 TRTCCalling SDK 接入前,您需要:

云通信控制台 中创建一个云通信应用,并取得 SDKAppID
云通信控制台-基本配置 中,选择创建好的云通信应用,开通腾讯实时音视频服务。

Examples
// 为了减小 trtc-calling-js.js 的体积,避免和接入侧已使用的 trtc-js-sdk 和 tim-js-sdk 以及 tsignaling 发生版本冲突
// trtc-js-sdk 和 tim-js-sdk 以及 tsignaling 不再被打包到 trtc-calling-js.js,在使用前您需要手动安装依赖。
npm i trtc-js-sdk --save
npm i tim-js-sdk --save
npm i tsignaling --save
npm i trtc-calling-js --save

// 如果您通过 script 方式使用 trtc-calling-js,需要按顺序先手动引入 trtc.js
<script src="./trtc.js"></script>

// 接着手动引入 tim-js.js
<script src="./tim-js.js"></script>

// 然后手动引入 tsignaling.js
<script src="./tsignaling.js"></script>

// 最后再手动引入 trtc-calling-js.js
<script src="./trtc-calling-js.js"></script>
let options = {
  SDKAppID: 0, // 接入时需要将0替换为您的云通信应用的 SDKAppID
  // 从v0.10.2起,新增 tim 参数
  // tim 参数适用于业务中已存在 TIM 实例,为保证 TIM 实例唯一性
  tim: tim
};
let trtcCalling = new TRTCCalling(options);
Parameters:
Name Type Description
options Object

配置

Properties
Name Type Description
SDKAppID Number

云通信应用的 SDKAppID

tim Any

TIM 实例(选填)

  • 从v0.10.2起,新增 tim 参数
  • tim 参数适用于业务中已存在 TIM 实例,为保证 TIM 实例唯一性
Returns:

SDK 实例

Type
Object

Methods

setLogLevel(level)

设置日志级别,低于 level 的日志将不会输出。

Example
trtcCalling.setLogLevel(0);
Parameters:
Name Type Description
level Number

日志级别

  • 0 普通级别,日志量较多,接入时建议使用
  • 1 release级别,SDK 输出关键信息,生产环境时建议使用
  • 2 告警级别,SDK 只输出告警和错误级别的日志
  • 3 错误级别,SDK 只输出错误级别的日志
  • 4 无日志级别,SDK 将不打印任何日志

on(eventName, callback, context)

监听事件

Example
let onError = function(error) {
  console.log(error);
};
trtcCalling.on(TRTCCalling.EVENT.ERROR, onError, this);
Parameters:
Name Type Description
eventName String

事件名

callback function

事件响应回调

context Any

期望 callback 执行时的上下文

off(eventName, callback, context)

取消监听事件

Example
let onError = function(error) {
  console.log(error)
};
trtcCalling.off(TRTCCalling.EVENT.ERROR, onError, this);
Parameters:
Name Type Description
eventName String

事件名

callback function

事件响应回调

context Any

期望 callback 执行时的上下文

login(params) → {Promise}

登录IM接口,所有功能需要先进行登录后才能使用

Example
let promise = trtcCalling.login({userID: 'your userID', userSig: 'your userSig'});
promise.then(() => {
  //success
}).catch(error => {
  console.warn('login error:', error)
});
Parameters:
Name Type Description
params Object

登录配置

Properties
Name Type Description
userID String

当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)

userSig String

腾讯云设计的一种安全保护签名,获取方式请参考 如何计算 UserSig

Returns:
Type
Promise

logout() → {Promise}

登出接口,登出后无法再进行拨打操作

Example
let promise = trtcCalling.logout();
promise.then(() => {
  //success
}).catch(error => {
  console.warn('logout error:', error)
});
Returns:
Type
Promise

call(params) → {Promise}

C2C邀请通话,被邀请方会收到 EVENT.INVITED 事件

  • v1.0.0 及其之后版本,取消 timeout 参数
  • v1.0.0 及其之后版本,新增 offlinePushInfo 参数 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。
Example
// v1.0.0 之前
let promise = trtcCalling.call({userID: 'user1', type: 1, timeout: 30});

// v1.0.0 版本及其之后
const offlinePushInfo = {
  title: '',
  description: '您有一个通话请求',
  extension: ''
}
let promise = trtcCalling.call({userID: 'user1', type: 1, offlinePushInfo: offlinePushInfo});


promise.then(() => {
  //success
}).catch(error => {
  console.warn('call error:', error)
});
Parameters:
Name Type Description
params Object

拨打通话配置

Properties
Name Type Description
userID String

被邀请方 userID

type Number

0-未知, 1-语音通话,2-视频通话

timeout Number

0为不超时, 单位 s(秒) -- 仅限于v1.0.0之前的版本

offlinePushInfo Object

自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0

name Type Description
title string 离线推送标题(选填)
description string 离线推送内容(选填)
androidOPPOChannelID string 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID(选填)
extension string 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0)
Returns:
Type
Promise

groupCall(params) → {Promise}

IM群组邀请通话,被邀请方会收到 EVENT.INVITED 事件

  • v1.0.0 及其之后版本,新增 offlinePushInfo 参数 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。
Example
// v1.0.0之前
let promise = trtcCalling.groupCall({userIDList: ['user1', 'user2'], type: 1, groupID: 'IM群组 ID'});

// v1.0.0及其之后
const offlinePushInfo = {
  title: '',
  description: '您有一个通话请求',
  extension: ''
}
let promise = trtcCalling.groupCall({userIDList: ['user1', 'user2'], type: 1, groupID: 'IM群组 ID', offlinePushInfo: offlinePushInfo});


promise.then(() => {
  //success
}).catch(error => {
  console.warn('groupCall error:', error)
});
Parameters:
Name Type Description
params Object

群聊拨打通话配置

Properties
Name Type Description
userIDList Array

邀请列表

type Number

0-未知, 1-语音通话,2-视频通话

groupID String

IM 群组 ID (选填)

offlinePushInfo Object

自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0

name Type Description
title string 离线推送标题(选填)
description string 离线推送内容(选填)
androidOPPOChannelID string 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID (选填)
extension string 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0)
Returns:
Type
Promise

accept(params) → {Promise}

当您作为被邀请方收到 EVENT.INVITED 事件的回调时,可以调用该接口接听来电

  • v1.0.0 及其之后版本,取消 params 参数
Example
trtcCalling.on(TrtcCalling.EVENT.INVITED, ({inviteID, sponsor, inviteData}) => {
  let roomID = inviteData.roomID
  // v1.0.0之前
  let promise = trtcCalling.accept({inviteID: '38897dbf-ecd4-4b59-a132-bc31529a2b18', roomID: roomID, callType: 1});
  // v1.0.0及其之后
  let promise = trtcCalling.accept();
  promise.then(() => {
    //success
  }).catch(error => {
    console.warn('accept error:', error);
  });
});
Parameters:
Name Type Description
params Object

群聊拨打通话配置 -- 仅限于v1.0.0之前版本

Properties
Name Type Description
inviteID String

邀请id, 标识一次邀请

roomID Number

通话房间号id

callType Number

0-未知, 1-语音通话,2-视频通话

Returns:
Type
Promise

reject(params)

当您作为被邀请方收到 EVENT.INVITED 事件的回调时,可以调用该接口拒绝来电

  • v1.0.0 及其之后版本,,取消 params 参数
Example
trtcCalling.on(TrtcCalling.EVENT.INVITED, ({inviteID, sponsor, inviteData}) => {
  // v1.0.0之前
  trtcCalling.reject({inviteID: 'user1', isBusy: true, callType: 1});
  // v1.0.0及其以后
  trtcCalling.reject();
});
Parameters:
Name Type Description
params Object

拒绝通话配置 -- 仅限于v1.0.0之前的版本

Properties
Name Type Description
inviteID String

邀请id, 标识一次邀请

isBusy Boolean

是否是忙线中

callType Number

0-未知, 1-语音通话,2-视频通话

hangup()

挂断电话

  1. 当您处于通话中,可以调用该接口结束通话
  2. 当未拨通时, 可用来取消通话
Example
trtcCalling.hangup();

startRemoteView(params) → {Promise}

当您收到 USER_ENTER 事件回调时,可以调用该接口将远端用户的摄像头数据渲染到指定的dom id节点里

Example
let promise = trtcCalling.startRemoteView({userID: 'user1', videoViewDomID: 'video_1'});
promise.then(() => {
  //success
}).catch(error => {
  console.warn('startRemoteView error:', error)
});
Parameters:
Name Type Description
params Object

渲染远端视频配置

Properties
Name Type Description
userID String

用户id

videoViewDomID String

该用户数据将渲染到该dom id节点里

options String

播放选项

Properties
Name Type Description
objectFit String

视频画面显示模式

  • contain 优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗,缩放后的视频四周会有一圈黑边。

  • cover 优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。

  • fill 保证视窗被填满的同时保证视频内容全部显示,但是不保证视频尺寸比例不变。视频的宽高会被拉伸至和视窗尺寸一致。

    播放视频流默认使用 cover 模式。

muted String

是否需要 mute 声音

  • 对于本地流,muted 默认为 true,防止播放从麦克风采集的声音。
mirror String

是否开启视频镜像预览 注意

  • 对于本地音视频流,默认开启镜像预览。建议在使用前置摄像头时开启镜像,使用后置摄像头时关闭镜像。
  • 对于远端音视频流,默认关闭镜像预览。
  • 对于屏幕分享流,不支持开启镜像预览。
  • 该参数只对本地预览有效,推流是没有镜像效果的。
Returns:
Type
Promise

stopRemoteView(params)

远端用户的摄像头关闭,可以将远端用户摄像头数据渲染出来的dom id节点移除

  • v1.0.0 及其之后版本,移除 videoViewDomID 参数
Example
// v1.0.0之前
trtcCalling.stopRemoteView({userID: 'user1', videoViewDomID: 'video_1'});
// v1.0.0及其之后
trtcCalling.stopRemoteView({userID: 'user1'});
Parameters:
Name Type Description
params Object

渲染远端视频配置

Properties
Name Type Description
userID String

用户id

startLocalView(params) → {Promise}

当您收到 USER_ENTER 事件回调时,调用该接口将本地用户的摄像头数据渲染到指定的dom id节点里

Example
let promise = trtcCalling.startLocalView({userID: 'user1', videoViewDomID: 'video_1'});
promise.then(() => {
  //success
}).catch(error => {
  console.warn('startLocalView error:', error)
});
Parameters:
Name Type Description
params Object

渲染本地视频配置

Properties
Name Type Description
userID String

用户id

videoViewDomID String

该用户数据将渲染到该dom id节点里

options String

播放选项

Properties
Name Type Description
objectFit String

视频画面显示模式

  • contain 优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗,缩放后的视频四周会有一圈黑边。

  • cover 优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。

  • fill 保证视窗被填满的同时保证视频内容全部显示,但是不保证视频尺寸比例不变。视频的宽高会被拉伸至和视窗尺寸一致。

    播放视频流默认使用 cover 模式。

muted String

是否需要 mute 声音

  • 对于本地流,muted 默认为 true,防止播放从麦克风采集的声音。
mirror String

是否开启视频镜像预览 注意

  • 对于本地音视频流,默认开启镜像预览。建议在使用前置摄像头时开启镜像,使用后置摄像头时关闭镜像。
  • 对于远端音视频流,默认关闭镜像预览。
  • 对于屏幕分享流,不支持开启镜像预览。
  • 该参数只对本地预览有效,推流是没有镜像效果的。
Returns:
Type
Promise

stopLocalView(params)

调用该接口将本地用户的摄像头数据渲染到的dom id节点移除

  • v1.0.0 及其之后版本,移除 videoViewDomID 参数
Example
// v1.0.0之前
trtcCalling.stopLocalView({userID: 'user1', videoViewDomID: 'video_1'});
// v1.0.0及其之后
trtcCalling.stopLocalView({userID: 'user1'});
Parameters:
Name Type Description
params Object

渲染本地视频配置

Properties
Name Type Description
userID String

用户id

openCamera()

您可以调用该接口开启摄像头 处于通话中的用户会收到 USER_VIDEO_AVAILABLE 回调

Example
trtcCalling.openCamera().then(() => {
  //success
}).catch(error => {
  console.warn('openCamera error:', error)
});

closeCamera()

您可以调用该接口关闭摄像头 处于通话中的用户会收到 USER_VIDEO_AVAILABLE 回调

Example
trtcCalling.closeCamera().then(() => {
  //success
}).catch(error => {
  console.warn('closeCamera error:', error)
});

setMicMute(isMute)

是否静音mic 处于通话中的用户会收到 USER_AUDIO_AVAILABLE 回调

Example
trtcCalling.setMicMute(true).then(() => {
  //success
}).catch(error => {
  console.warn('setMicMute error:', error)
});  // 开启麦克风
Parameters:
Name Type Description
isMute Boolean

true:麦克风关闭 false:麦克风打开

setVideoQuality(profile)

您可以调用此接口设置视频质量

  • v0.8.0 及其之后版本,新增该方法
  • 此方法需在 call、groupCall、accept 之前设置,之后设置不生效
Example
const profile = '720p';
trtcCalling.setVideoQuality(profile).then(() => {
  //success
}).catch(error => {
  console.warn('setVideoQuality error:', error)
});  // 设置视频质量为720p
Parameters:
Name Type Description
profile String

视频 Profile

视频 Profile 分辨率(宽 x 高)
480p 640 x 480
720p 1280 x 720
1080p 1920 x 1080
  • iOS Safari 不支持采集 1080p
  • 由于设备和浏览器的限制,视频分辨率不一定能够完全匹配,在这种情况下,浏览器会自动调整分辨率使其接近 Profile 对应的分辨率。
  • 默认使用 480p

switchToAudioCall()

您可以调用此接口将视频通话切换语音通话

  • v0.10.0 及其之后版本,新增该方法
  • 仅支持1v1通话过程中使用
  • 失败监听 ERROR 事件,code: 60001
Example
let promise = trtcCalling.switchToAudioCall() // 视频通话切换语音通话
promise.then(() => {
  //success
}).catch(error => {
  console.warn('switchToVideoCall error:', error)
});

switchToVideoCall()

您可以调用此接口将语音通话切换视频通话

  • v0.10.0 及其之后版本,新增该方法
  • 仅支持1v1通话过程中使用
  • 失败监听 ERROR 事件,code: 60002
Example
let promise = trtcCalling.switchToVideoCall() // 语音通话切换视频通话
promise.then(() => {
  //success
}).catch(error => {
  console.warn('switchToVideoCall error:', error)
});

getCameras()

您可以调用此接口获取摄像头设备列表

  • v1.0.0 及其之后版本,新增该方法
Example
trtcCalling.getCameras().then((devices)=>{
 console.log(devices)
}) // 获取摄像头列表

getMicrophones()

您可以调用此接口获取麦克风设备列表

  • v1.0.0 及其之后版本,新增该方法
Example
trtcCalling.getMicrophones().then((devices)=>{
 console.log(devices)
}) // 获取麦克风列表

switchDevice(params)

您可以调用此接口切换摄像头或麦克风设备

  • v1.0.0 及其之后版本,新增该方法
Example
let promise = trtcCalling.switchDevice({deviceType: 'video', deviceId: cameras[0].deviceId}) // 切换设备
promise.then(() => {
  //success
}).catch(error => {
  console.warn('switchDevice error:', error)
});
Parameters:
Name Type Description
params ISwitchDeviceParams
Properties
Name Type Description
deviceType string

需要切换的设备类型

  • 'video' 摄像头
  • 'audio' 麦克风
deviceId string

需要切换的设备ID

  • 摄像头设备标识通过 getCameras() 获取。
  • 麦克风设备标识通过 getMicrophones() 获取。

setSelfInfo(params)

设置自己的昵称或头像

Example
let promise = trtcCalling.setSelfInfo({nickName: 'video', avatar:'http(s)://url/to/image.jpg'})
promise.then(() => {
  //success
}).catch(error => {
  console.warn('setSelfInfo error:', error)
});
Parameters:
Name Type Description
params ISwitchDeviceParams
Properties
Name Type Description
nickName string

昵称

avatar string

头像地址