房间管理类
房间管理类(Room)
Room
初始化设置
init(appKey, options) -> {Promise}
注:在init成功后才能调用room的其它方法。
建议:建议在init调用前建议先完成设备检测,因为调用init方法后会从设备列表中寻找一个设备(这个设备是否可用无法确保)
参数名 |
必填 |
类型 |
说明 |
appKey |
是 |
String |
企业domain |
options |
否 |
Object |
初始化配置项,详细可选配置如下 |
参数 |
类型 |
说明 |
tk_multistream |
Boolean |
是否开启多视频模式, 默认为 false |
checkDevice |
{ video?: boolean, audio?: boolean } |
是否检查音视频设备设备, 默认音视频设备都检查 |
| await room.init(appKey, options = {}).catch(err => {})
|
uninit()
-
该方法用于重置Room对象到未初始化状态
-
方法示例
checkInit()
| var isInit = room.checkInit()
|
进出房间和房间信息
joinroom(roomOption, userOption) -> {Promise}
- 调用该方法加入已创建的房间。此方法应为Room类中首先被调用的方法。
参数名 |
必填 |
类型 |
说明 |
roomOption |
是 |
Object |
加入房间所需的基本参数 |
userOption |
是 |
Object |
用户属性 |
参数名 |
类型 |
说明 |
roomId |
String |
房间ID |
userPwd |
String |
房间口令 |
参数名 |
类型 |
说明 |
userId |
String |
用户id |
role |
Number |
用户身份 |
nickname |
String |
用户昵称 |
| await room.joinroom( {roomId: '123', userPwd: 'qwer' }, { userId: '1', role: 2, nickname: 'test' }).catch(err => {})
|
joinRoomEx(roomOption, userOption) -> {Promise}
- 调用该方法加入已创建的临时房间。此方法应为Room类中首先被调用的方法。
参数名 |
必填 |
类型 |
说明 |
roomOption |
是 |
Object |
加入房间所需的基本参数 |
userOption |
是 |
Object |
用户自定义属性 |
参数名 |
类型 |
说明 |
roomId |
String |
房间ID |
tk_token |
String |
tk签名 |
userPwd |
String |
房间口令 |
参数名 |
类型 |
说明 |
userId |
String |
用户id |
role |
Number |
用户身份 |
nickname |
String |
用户昵称 |
| await room.joinRoomEx( {roomId: '123', userPwd: 'qwer', tk_ttoken: 'asdfzxc' }, { userId: '1', role: 2, nickname: 'test' }).catch(err => {})
|
leaveroom ()
getRoomProperties()
| var property = room.getRoomProperties()
|
- 返回值
+ 该接口返回object, 以下只列举object内部分常用房间属性
参数 |
类型 |
说明 |
serial |
String |
房间号 |
roomname |
String |
房间名称 |
companyid |
String |
公司id |
maxvideo |
Number |
房间支持最大视频路数 |
videowidth |
String |
视频分辨率最大宽度 |
videoheight |
String |
视频分辨率最大高度 |
用户信息
getMySelf()
注:如果没有joinroom成功(即没有收到TK.EVENT_TYPE.roomConnected事件),则返回空对象
| var self = room.getMySelf();
|
getUser(userId)
注:该接口在大房间(即大规模房间)下使用只能获取到已经上台的用户(即发布音频/视频人的用户)和特殊用户(如:老师/助教),因此在大房间模式下,建议只使用该接口来操作上台的用户
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
被获取用户的id |
- 方法示例
| var user = room.getUser("1");
|
getUsers()
- 该方法返回房间中所有用户对象集合,返回值类型为Object。
注:该接口在大房间(即大规模房间)下使用只能获取到已经上台的用户(即发布音频/视频人的用户)和特殊用户(如:老师/助教),因此在大房间模式下,建议只使用该接口来操作上台的用户
| var users = room.getUsers();
|
类型 |
说明 |
Object |
用户集合对象,键值格式为 userid: user |
getRoomUsers({ start, max, roles, search, order }) -> {Promise}
注:该接口建议只在大房间(即大规模房间)下使用,非大房间模式下建议使用getUsers接口
参数名 |
必填 |
类型 |
说明 |
start |
否 |
Number |
开始位置,缺省为0 |
max |
否 |
Number |
最大获取个数,缺省为200 |
roles |
否 |
Array |
角色列表,缺省为所有角色,角色取值请见房间角色] |
search |
否 |
String |
昵称检索的内容,缺省为"" 【注:此处只对于用户昵称进行搜索且为模糊搜索】 |
order |
否 |
Array |
排序规则,详细规则见下文说明 |
| const users = await room.getRoomUsers({ start: 0, max: 100, roles: [0,2] , search: '', order: 'asc' }).catch(err => {})
|
getRoomUserNum({ roles, search }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
roles |
否 |
Array |
角色列表,缺省为所有角色,角色取值请见房间角色 |
search |
否 |
String |
昵称检索的内容,缺省为"" 【注:此处只对于用户昵称进行搜索且为模糊搜索】 |
| const num = await room.getRoomUserNum({ roles: [0,2] , search: '' }).catch(err => {}})
|
getUserList({ start, max, roles, search }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
options |
否 |
Object |
查询条件,参数及说明如下 |
参数名 |
类型 |
说明 |
start |
Number |
列表中起始坐标,小班课非大房间模式下不支持 |
max |
Number |
最大结果个数,小班课非大房间模式下不支持 |
roles |
Array |
用户角色数组, 会返回符合查询角色的用户列表, 用户角色取值参考房间角色 |
search |
String |
用户昵称中的关键字, 小班课非大房间模式下不支持 |
| var options = {
start: 0,
max: 200,
roles: [TK.ROOM_ROLE.TEACHER, TK.ROOM_ROLE.STUDENT]
}
const res = await room.getUserList(options).catch(err => {})
|
信令和修改属性
sendMessage({ textMessage, toID, extendJson }) -> {Promise}
- 该方法发送聊天消息给指定用户
- 接收者可通过监听
TK.EVENT_TYPE.roomTextMessage
事件获取消息内容
- 发送消息默认节流频率为 1条/秒,如需强制发送,请在
options
中配置 isforceSend: true
参数名 |
必填 |
类型 |
说明 |
textMessage |
是 |
String |
文本消息内容 |
toID |
否 |
String |
消息接收者,缺省为所有人。可能取值请见房间角色 |
extendJson |
否 |
Object |
用户可自定义的扩展数据 |
| var extenJson = {
textfont : ’Arial’,
fontsize : 14
};
await room.sendMessage({ textMessage: ‘hello world’, toID: TK.MSG_TO_ALLUSER, extenJson }).catch(err => {})
|
pubMsg(params) -> {Promise}
- 该方法发布用户自定义消息
- 接收者可通过监听
TK.EVENT_TYPE.roomPubmsg事件
事件获取消息内容
- 若房间中所有用户已退出,此消息会被自动删除
参数名 |
必填 |
类型 |
说明 |
name |
是 |
String |
消息名 |
id |
是 |
String |
消息ID |
toID |
否 |
String |
消息接收者。角色取值请见消息发送角色 |
data |
是 |
Object |
消息携带的数据信息 |
save |
否 |
Boolean |
息是否保存到服务器,默认为false。若不保存到服务器,晚于发布消息时刻进入房间的用户不会收到此消息,只有发布消息时刻前进入房间的用户可收到此消息;若保存到服务器,在该消息未被删除的情况下,任何时刻进入房间的用户都会收到此消息。 |
associatedMsgID |
否 |
String |
关联的消息ID。假设此消息关联了一条msgId为‘test-msg’的消息,那么当’test-msg’消息被删除后,此消息也被删除 |
associatedUserID |
否 |
String |
关联的用户ID。假设此消息关联了一个id为‘user-id-123’的用户,那么当user-id-123’用户离开房间后,此消息将被删除 |
|
|
|
注:若关联了用户ID,则该用户离开后,则该消息的接收者(即:发送pubMsg时指定的toID)会收到TK.EVENT_TYPE.roomDelmsg事件 |
1
2
3
4
5
6
7
8
9
10
11
12
13 | var msgData = {
textmsg : ‘every body will receive the hello world message’,
textfont : ‘Arial’,
fontsize : 14
};
var params = {
name : ‘sendTextMsg’,
id : ‘sendTextMsg’,
toID : TK.MSG_TO_ALLEXCEPTSENDER,
data : msgData,
save : true,
};
await room.pubMsg(params).catch(err => {})
|
delMsg(params) -> {Promise}
- 该方法用于删除用户自定义消息
- 接收者可通过监听
TK.EVENT_TYPE.roomDelmsg
事件获取消息内容
- 删除消息的ID必须与pubMsg方法发布的消息ID对应,否则为无效消息,接收者不会收到事件
参数名 |
必填 |
类型 |
说明 |
name |
是 |
String |
消息名 |
id |
是 |
String |
消息ID |
toID |
否 |
String |
消息接收者。角色取值请见消息发送角色 |
data |
否 |
Object |
消息携带的数据信息(不建议携带数据) |
| var params = {
name : ‘sendTextMsg’,
id : ‘sendTextMsg’,
toID : TK.MSG_TO_ALLEXCEPTSENDER,
data : {}
};
await room.delMsg(params).catch(err => {})
|
evictUser({ id, causeJson }) -> {Promise}
- 该方法用于将用户请出房间
- 被请出房间的用户将会收到
TK.EVENT_TYPE.roomParticipantEvicted
事件
参数名 |
必填 |
类型 |
说明 |
id |
是 |
String |
被请出房间的用户ID |
causeJson |
否 |
Object |
请出房间的原因。用户自定义(如果包含"reason"参数,则reason必须小于400) |
| var cause = {
reason : 100,
say : ‘good-bye’
};
await room.evictUser({ id: ‘user-id-123’, causeJson: cause }).catch(err => {})
|
changeUserProperty({ id, toID, properties }) -> {Promise}
- 该方法改变或添加某用户属性,并将属性变化通知给房间中的指定用户。
- 被通知的用户会收到
TK.EVENT_TYPE.roomUserPropertyChanged
事件
- 在大房间模式下,事件派发
TK.EVENT_TYPE.roomUserPropertyChanged
(用户属性改变)有限制, 详情请见 TK.EVENT_TYPE.roomUserPropertyChanged事件派发
参数名 |
必填 |
类型 |
说明 |
id |
是 |
String |
被改变属性的用户ID |
toID |
否 |
String |
被通知的用户。可能取值请见消息发送角色 |
properties |
是 |
Object |
修改的用户属性集合 |
| var self = room.getMySelf();
var prop = {};
if (self.nickname === ‘tester’) {
prop.nickname : ‘tester-abc’;
}
if (!self. hasOwnProperty(‘age’)) {
prop.age = 18;
}
await room.changeUserProperty({ id: self.id, toID: TK.MSG_TO_ALLUSER, properties: prop }).catch(err => {})
|
batchChangeUserProperty({ ids, toID, properties }) -> {Promise}
- 该方法批量改变或添加某些用户属性,并将属性变化通知给房间中的指定用户。
- 被通知的用户会收到
TK.EVENT_TYPE.roomUserPropertyChanged
事件
- 在大房间模式下,事件派发
TK.EVENT_TYPE.roomUserPropertyChanged
(用户属性改变)有限制, 详情请见 TK.EVENT_TYPE.roomUserPropertyChanged 事件派发
参数名 |
必填 |
类型 |
说明 |
ids |
是 |
Array |
被改变属性的用户ID列表 |
toID |
否 |
String |
被通知的用户。可能取值请见消息发送角色 |
properties |
是 |
Object |
修改的用户属性集合 |
| var ids=[ user1.id, user2.id, user3.id ] ;
var prop = {
age:20
};
await room.batchChangeUserProperty({ ids: ids, toID: TK.MSG_TO_ALLUSER, properties: prop }).catch(err => {})
|
changeUserPropertyByRole({ roles, toID, properties }) -> {Promise}
- 该方法批量改变或添加某些角色的用户属性,并将属性变化通知给房间中的指定用户
- 被通知的用户会收到
TK.EVENT_TYPE.roomUserPropertyChanged
事件
- 在大房间模式下,事件派发
TK.EVENT_TYPE.roomUserPropertyChanged
(用户属性改变)有限制, 详情请见 TK.EVENT_TYPE.roomUserPropertyChanged 事件派发
参数名 |
必填 |
类型 |
说明 |
roles |
是 |
Array |
被改变属性的角色列表,可能取值请见房间角色 |
toID |
是 |
String |
被通知的用户。可能取值请见消息发送角色 |
properties |
是 |
Object |
修改的用户属性集合 |
| var roles=[TK.ROOM_ROLE.STUDENT, TK.ROOM_ROLE.ASSISTANT] ;
var prop = {
age:20
};
await room.changeUserPropertyByRole({ roles: roles, toID: TK.MSG_TO_ALLUSER, properties: prop }).catch(err => {})
|
发布和播放音视频
- 该方法将自己的视频发布出去
- 房间中的人会收到
TK.EVENT_TYPE.roomUserVideoStateChanged
事件, 解析事件消息后视频为发布状态,可通过调用playVideo
方法观看发布者的视频。
- 如果是多视频模式调用该方法时需要传入设备的ID
参数名 |
必填 |
类型 |
说明 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
| await room.publishVideo().catch(err => {})
|
- 该方法停止发布自己的视频
- 房间中的人会收到
TK.EVENT_TYPE.roomUserVideoStateChanged
事件, 解析事件消息后视频为取消发布状态,可通过调用unplayVideo
方法关闭发布者的视频。
- 如果是多视频模式调用该方法时需要传入设备的ID
参数名 |
必填 |
类型 |
说明 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
| await room.unpublishVideo().catch(err => {})
|
publishAudio() -> {Promise}
| await room.publishAudio().catch(err => {})
|
unpublishAudio() -> {Promise}
| await room.unpublishAudio().catch(err => {})
|
- 该方法用于播放指定用户的视频
- 若播放本地视频,可直接调用
- 若播放其他用户视频,必须在收到
TK.EVENT_TYPE.roomUserVideoStateChanged
事件后且视频为发布状态方可调用
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。若为"",则播放自己视频 |
elementId |
是 |
String |
dom元素ID。该dom元素用于盛放播放器 |
options |
否 |
Object |
播放配置项。包含属性见下文说明 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
参数 |
类型 |
说明 |
mode |
Number |
用于表示视频显示模式(是否裁减),取值见 视频显示模式, 默认为 TK_VIDEO_MODE.ASPECT_RATIO_CONTAIN 不裁剪 |
mirror |
Boolean |
是否镜像播放 |
| await room.playVideo({ userId: ‘user-id-123’, elementId: ‘element-id-123’, options: {mirror: true} }).catch(err => {})
|
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。若为"",则停止播放自己视频 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
| await room.unplayVideo({ userId: ‘user-id-123’ }).catch(err => {})
|
playAudio({ userId }) -> {Promise}
- 该方法用于播放指定用户的音频
- 若播放其他用户音频,必须在收到
TK.EVENT_TYPE.roomUserAudioStateChanged
事件后且音频为发布状态方可调用
- 用户不能播放自己的音频
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。 |
| await room.playAudio({ userId: ‘user-id-123’ }).catch(err => {})
|
unplayAudio({ userId }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。 |
| await room.unplayAudio ({ userId: ‘user-id-123’ }).catch(err => {})
|
设置本地音视频属性
getDeviceMgr()
| var devMgr = room.getDeviceMgr();
|
setLocalVideoMirror(isMirror)
- 该方法设置本地视频是否启用视频镜像
- 房间默认不启用本地视频镜像
参数名 |
必填 |
类型 |
说明 |
isMirror |
是 |
Boolean |
本地视频是否启用视频镜像 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
| room.setLocalVideoMirror(true);
|
getVideoProfile()
-该方法获取当前视频分辨率属性信息
参数名 |
必填 |
类型 |
说明 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
| var profile = room.getVideoProfile();
|
- 返回值
参数名 |
类型 |
说明 |
width |
Number |
水平分辨率 |
height |
Number |
垂直分辨率 |
maxfps |
Number |
最大帧率 |
- 该方法设置视频分辨率属性
- 注:设置的分辨率及帧率不可超过预约房间时设定的最大分辨率的乘积(width*height)及最大帧率,若分辨率超出,则根据比例缩放当前设置的分辨率,若帧率超出,则设置为预约房间时的最大帧率。
参数名 |
必填 |
类型 |
说明 |
profile |
是 |
Object |
视频分辨率属性信息。详细属性见下文说明 |
videoinputDeviceId |
否 |
String |
[多视频模式必选]视频设备ID |
参数名 |
类型 |
说明 |
width |
Number |
水平分辨率 |
height |
Number |
垂直分辨率 |
maxfps |
Number |
最大帧率 |
| var profile = {
width : 80,
height : 60,
maxfps : 10
};
await room.setVideoProfile({ profile }).catch(err => {})
|
getAudioVolume({ userId, type }) -> {Promise}
- 该方法获取指定用户的当前时刻音频采集音量(即麦克风输入音量)
- 如果您想实时表示本地或远端音量的变化,我们建议您使用
registerAudioVolumeListener
接口来实时获取
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID |
type |
否 |
String |
需要操作媒体类型,默认为TK.MEDIA_TYPE.DEVICE_AV , 取值范围见媒体类型 |
| const volume = await room.getAudioVolume({ userId: room.getMySelf().id }).catch(err => {})
|
setRemoteAudioVolume({ volume, userId, type }) -> {Promise}
- 该方法设置指定用户的音频播放音量
- 此方法在调用
playAudio
方法后方能生效
参数名 |
必填 |
类型 |
说明 |
volume |
是 |
Number |
播放音量值。取值区间[0,100] |
userId |
是 |
String |
指定的用户ID |
type |
否 |
String |
需要操作媒体类型, 默认为TK.MEDIA_TYPE.DEVICE_AV , 取值范围见媒体类型 |
| await room.setRemoteAudioVolume({ volume: 80, userId: "userId-xxx" }).catch(err => {})
|
registerAudioVolumeListener({ userId, msInterval, onVolume, type }) -> {Promise}
- 该方法用于获取指定用户的实时音量变化,无需用户自己使用setTimeout或setInterval定时调用getAudioVolume方法,是getAudioVolume 的升级方法。
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。若为’’,则监听自己的音量变化 |
msInterval |
是 |
Number |
毫秒级时间间隔。最小值为50 |
onVolume |
是 |
Function |
获取音量回调。取值区间[0,100] |
type |
否 |
String |
需要操作媒体类型, 默认为TK.MEDIA_TYPE.DEVICE_AV , 取值范围见媒体类型 |
| await room.registerAudioVolumeListener({ userId: room.getMySelf().id, msInterval: 80, onVolume: (vol, userId) => {
console.log(‘user: ’ + userId + ‘. volume: ’ + vol);
} }).catch(err => {})
|
unregisterAudioVolumeListener({ userId, type }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
指定的用户ID。若为’’,则移除自己的音量监听器 |
type |
否 |
String |
需要操作媒体类型, 默认为TK.MEDIA_TYPE.DEVICE_AV , 取值范围见媒体类型 |
| await room.unregisterAudioVolumeListener({ userId: room.getMySelf().id }).catch(err => {})
|
disableVideoDevice(tk_disablevideo)
- 该方法用于改变自己视频设备的禁用状态,房间视频设备默认不禁用
- 设置视频设备禁用后,将不会打开本地摄像头,无法发布视频数据。
- 如需发布视频,需要取消禁用后重新调用
publishVideo
参数名 |
必填 |
类型 |
说明 |
tk_disablevideo |
是 |
Boolean |
是否禁用视频设备 |
| room.disableVideoDevice (true)
|
setAutoProcessDeviceChangeEvent(autoProcess)
- 该方法设置SDK是否自动处理设备改变(插拔)事件
- 若设定为自动处理,在单视频模式下,设备插拔后SDK会自动选择设备重新发布本地音视频(若当前正在发布音视频),在多视频模式下会自动将移除的设备取消发布(即:主动执行
unpublishVideo
,但是不主动unplayVideo
)
- 若设定为非自动处理,则设备拔出后,视频画面会停留在最后一帧。不主动指定为自动处理的情况下,SDK不会自动处理
- 在多视频模式下,如果移除的是主摄像头设备,则SDK会自动找视频设备列表的第一个设备自动切换主摄像头
参数名 |
必填 |
类型 |
说明 |
autoProcess |
是 |
Boolean |
指定是否自动处理设备改变(插拔)事件 |
| room.setAutoProcessDeviceChangeEvent(true)
|
分享和播放桌面共享流
startShareScreen(screenInfo) -> {Promise}
- 该方法开始进行屏幕共享
- 桌面共享流的接收者会收到
TK.EVENT_TYPE.roomUserScreenStateChanged
事件, 解析事件消息后共享流为发布状态,可通过调用playRemoteScreen
方法播放共享者的屏幕视频
参数名 |
必填 |
类型 |
说明 |
screenInfo |
否 |
Object |
共享参数,参数配置见下文 |
参数名 |
必填 |
类型 |
说明 |
toID |
否 |
String |
共享流接收者,默认为TK.MSG_TO_ALLUSER , 可选值见 消息发送角色 |
| await room.startShareScreen().catch(err => {})
|
stopShareScreen() -> {Promise}
| await room.stopShareScreen().catch(err => {})
|
playRemoteScreen({ userId, elementId, options = {} }) -> {Promise}
- 该方法用于播放屏幕共享流
- 必须在收到
TK.EVENT_TYPE.roomUserScreenStateChanged
事件后且共享流为发布状态方可调用
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户id |
elementId |
是 |
String |
dom元素ID。该dom元素用于盛放播放器 |
options |
否 |
Object |
播放配置项,具体参数见下文 |
参数名 |
必填 |
类型 |
说明 |
mirror |
否 |
Boolean |
视频是否镜像显示,默认不镜像 |
mode |
否 |
String |
用于表示视频显示模式(是否裁减),取值见视频显示模式 , 默认为 TK_VIDEO_MODE.ASPECT_RATIO_CONTAIN 不裁剪 |
| await room.playRemoteScreen({ userId: "user-1233", elementId: "user-123-dom" }).catch(err => {})
|
unplayRemoteScreen({ userId }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户id |
| await room.unplayRemoteScreen({ userId: "user-1233" }).catch(err => {})
|
分享和播放媒体流
- 共享媒体文件是指将已上传到服务器的媒体文件(音频文件或视频文件)
- 共享的媒体文件必须是已经上传服务器的,不能共享非服务器上的媒体文件,因为该媒体文件是由服务器进行共享
- 该方法开始共享媒体文件
- 共享成功后,房间内的人会收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件,解析事件消息后媒体流为发布状态,可通过调用playRemoteMedia
方法播放媒体流
- 因为该媒体文件是由服务器进行共享,因此自己收到
TK.EVENT_TYPE.roomUserMediaStateChanged
后也需要调用playRemoteMedia
进行播放
参数名 |
必填 |
类型 |
说明 |
url |
是 |
String |
共享的媒体文件的绝对路径 |
isVideo |
否 |
Boolean |
是否是视频文件,缺省为false |
options |
否 |
Object |
共享配置项, 说明见下文 |
参数名 |
必填 |
类型 |
说明 |
toID |
否 |
String |
发送给谁 , 默认发送给所有人 |
attrs |
否 |
Object |
流携带的attributes数据 |
| await room.startShareMedia({ url: "xxx-url", isVideo: false }).catch(err => {})
|
- 该方法结束共享媒体文件
- 结束共享后,房间内的人会收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件,解析事件消息后媒体流为取消发布状态,可通过调用unplayRemoteMedia
方法关闭媒体流
- 因为该媒体文件是由服务器进行共享,因此自己收到
TK.EVENT_TYPE.roomUserMediaStateChanged
后也需要调用unplayRemoteMedia
进行关闭
参数名 |
必填 |
类型 |
说明 |
onlyStopMyself |
否 |
Boolean |
是否只停止自己共享的媒体文件 |
| await room.stopShareMedia().catch(err => {})
|
参数名 |
必填 |
类型 |
说明 |
pause |
是 |
Boolean |
是否暂停(或恢复)共享媒体文件 |
| await room.pauseShareMedia({ pause: true }).catch(err => {})
|
- 该方法控制共享媒体文件的进度,使媒体文件跳跃到指定的时间点继续播放
参数名 |
必填 |
类型 |
说明 |
positionPercent |
是 |
Number |
指定进度的百分比,取值范围为[0-1] |
| await room.seekMedia({ positionPercent: 0.5 }).catch(err => {})
|
- 该方法播放房间中共享的媒体文件
- 在收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件后,若媒体流为发布状态,且媒体流类型为media
,则调用此方法观看
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户ID |
elementId |
是 |
String |
Dom元素ID。该Dom元素用于盛放播放器 |
options |
否 |
Object |
播放配置项,详细配置见下文 |
参数名 |
必填 |
类型 |
说明 |
mirror |
否 |
Boolean |
视频是否镜像显示,默认不镜像 |
mode |
否 |
String |
用于表示视频显示模式(是否裁减),取值见 视频显示模式 , 默认为 TK_VIDEO_MODE.ASPECT_RATIO_CONTAIN 不裁剪 |
| await room.playRemoteMedia({ userId: "user-123", elementId: "user-123-dom" }).catch(err => {})
|
- 该方法停止播放共享的媒体文件
- 在收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件后,若媒体流为取消发布状态,且媒体流类型为media
,则调用此方法关闭播放器
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户ID |
| await room.unplayRemoteMedia({ userId: "user-123" }).catch(err => {})
|
- 该方法播放远端共享的媒体文件(拓课客户端用户共享的用户本地媒体文件)
- 在收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件后,若媒体流为发布状态,且媒体流类型为file
,则调用此方法观看
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户ID |
elementId |
是 |
String |
Dom元素ID。该Dom元素用于盛放播放器 |
options |
否 |
Object |
播放配置项,详细配置见下文 |
参数名 |
必填 |
类型 |
说明 |
mirror |
否 |
Boolean |
视频是否镜像显示,默认不镜像 |
mode |
否 |
String |
用于表示视频显示模式(是否裁减),取值见 视频显示模式 , 默认为 TK_VIDEO_MODE.ASPECT_RATIO_CONTAIN 不裁剪 |
| await room.playRemoteMediaFile({ userId: "user-123", elementId: "user-123-dom" }).catch(err => {})
|
- 该方法关闭播放远端共享的媒体文件(拓课客户端用户共享的用户本地媒体文件)
- 在收到
TK.EVENT_TYPE.roomUserMediaStateChanged
事件后,若媒体流为取消发布状态,且媒体流类型为file
,则调用此方法关闭播放器
参数名 |
必填 |
类型 |
说明 |
userId |
是 |
String |
共享者的用户ID |
| await room.unplayRemoteMediaFile({ userId: "user-123" }).catch(err => {})
|
房间状态
switchOnlyAudioRoom({ onlyAudio }) -> {Promise}
参数名 |
必填 |
类型 |
说明 |
onlyAudio |
是 |
Boolean |
是否切换纯音频房间 |
| await room.switchOnlyAudioRoom({ onlyAudio: true }).catch(err => {})
|
服务器录制和本地录制
startServerRecord
- 该方法开始服务器端录制
- 连续调用两次
startServerRecord
(即没调用stopServerRecord
就再次调用startServerRecord
)将以第1次调用为准
参数名 |
必填 |
类型 |
说明 |
spec |
否 |
Object |
录制配置,详细配置信息如下 |
参数名 |
类型 |
说明 |
recordMode |
String |
录制模式 (standard :标准常规录制), (mix : 自定义混流录制) |
mixStreamParams |
Object |
混流模式参数,仅混流模式生效,详细说明如下 |
参数名 |
类型 |
说明 |
template |
Number |
混流布局模板ID,0等分布局; 1画中画布局; 2自定义布局 |
backgroundColor |
String |
颜色值 |
customConfig |
Object |
自定义配置,配置说明如下 |
参数名 |
类型 |
说明 |
backgroundColor |
String |
颜色值,如设置,优先级高于 mixStreamParams.backgroundColor |
noStreamTimeout_s |
Number |
停止混流时限, 开始混流后,房间中没有用户的流,停止混流时限,单位为(秒:s) |
videoLayout |
Array |
自定义用户的视频流样式,数组中传入用户样式对象videoLayoutUser ,用户样式对象说明如下 |
参数名 |
类型 |
说明 |
uid |
String |
用户id, 若视频流为桌面共享流,则id应为 uid:screen |
x_coord |
Number |
窗口x坐标,取值为相对于整个视频宽度百分比 |
y_coord |
Number |
窗口y坐标,取值为相对于整个视频高度百分比 |
width |
Number |
窗口宽,取值为相对于整个视频宽度百分比 |
height |
Number |
窗口高,取值为相对于整个视频高度百分比 |
alpha |
Number |
窗口透明度 |
play_video |
Boolean |
是否播放视频,默认播放true |
play_audio |
Boolean |
是否播放音频,默认播放true |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | const recordParams ={
recordMode: 'mix',
mixStreamParams: {
template: 0,
backgroundColor: '#0d69fb',
customConfig: {
backgroundColor: '#0d69fb',
noStreamTimeout_s: 30,
videoLayout: [
{
uid: 'xxx',
x_coord: 0.81,
y_coord: 0.1,
width: 0.18,
height: 0.24,
alpha: 1,
play_video: true,
play_audio: true
}
]
}
}
}
room.startServerRecord(recordParams)
|
stopServerRecord
pauseServerRecord
resumeServerRecord
| room.resumeServerRecord()
|
getServerRecordState
- 该方法获取服务器录制状态,返回录制状态枚举值
-
录制状态枚举值见服务器录制状态
-
方法示例
| const recordState = room.getServerRecordState()
|