QNRTCSession-房间管理
成员
name | 类型 | 介绍 |
---|---|---|
users | User[] | 房间当前的用户信息 |
subscribedUsers | User[] | 房间当前的已经订阅的用户信息 |
构造函数
创建 QNRTC 实例
const myRTC = new QNRTC.QNRTCSession()
joinRoomWithToken 加入房间(异步)
加入房间
参数 | 类型 | 介绍 |
---|---|---|
roomToken | string | 房间 token,获取方式请阅读 Server-API 文档 |
返回 | 类型 | 介绍 |
---|---|---|
users | User[] | 返回房间当前的 User 信息,User 详细见类型介绍 |
try {
const users = await myRTC.joinRoomWithToken(...);
} catch(e) {
console.log('joinRoomWithToken Error!', e);
}
// or use Promise
myRTC.joinRoomWithToken(...).then((users) => {
console.log('join success!');
}).catch(e => {
console.log('joinRoomWithToken Error!', e);
})
publish 发布视频流(异步)
发布一个流到当前房间
参数 | 类型 | 介绍 |
---|---|---|
stream | Stream | 流对象,从 deviceManager 中获取 |
try {
const stream = await QNRTC.deviceManager.getLocalStream();
await myRTC.publish(stream);
} catch(e) {
console.log('publish Error!', e);
}
// or use Promise
QNRTC.deviceManager.getLocalStream()
.then(stream => myRTC.publish(stream))
.then(() => {
console.log('publish success');
}).catch(e => {
console.log('publish Error!', e);
});
unpublish 取消发布(异步)
停止向房间推流,取消发布
await myRTC.unpublish();
// or use Promise
myRTC.unpublish().then(() => console.log('un publish')).catch(console.error)
subscribe 订阅用户(异步)
订阅一名用户,获取该用户发布的流
参数 | 类型 | 介绍 |
---|---|---|
userId | string | 该用户的用户 id |
返回 | 类型 | 介绍 |
---|---|---|
stream | Stream | 订阅的流对象,调用 play 方法来播放 |
const video = document.getElementById('video');
try {
const stream = await myRTC.subscribe(userId);
stream.play(video);
} catch(e) {
console.log('subscribe Error!', e);
}
// or use Promise
myRTC.subscribe(userId).then((stream) => {
stream.play(video);
console.log('subscribe success!');
}).catch(e => {
console.log('subscribe Error!', e);
})
unsubscribe 取消订阅(异步)
取消订阅一名用户
参数 | 类型 | 介绍 |
---|---|---|
userId | string | 该用户的用户 id |
try {
await myRTC.unsubscribe(userId);
} catch(e) {
console.log('subscribe Error!', e);
}
// or use Promise
myRTC.unsubscribe(userId).then(() => {
console.log('unsubscribe success!');
}).catch(e => {
console.log('unsubscribe Error!', e);
})
mute 静音/黑屏(同步)
将发布中的视频流静音或者黑屏
参数 | 类型 | 介绍 |
---|---|---|
muteAudio | boolean | 是否静音 |
muteVideo | boolean | 是否黑屏(默认 false) |
// 黑屏
myRTC.mute(false, true);
// 静音
myRTC.mute(true);
kickoutUser 踢人(异步)
将用户踢出房间(如果调用者没有管理权限会抛出错误)
参数 | 类型 | 介绍 |
---|---|---|
userId | string | 该用户的用户 id |
try {
await myRTC.kickoutUser(userId);
} catch(e) {
console.log('kickoutUser error', e);
}
// or use Promise
myRTC.kickoutUser(userId).then(() => {}).catch(e => {
console.log('kickoutUser error', e);
})
setDefaultMergeStream 使用默认布局开启合流 (同步)
使用 SDK 默认的模版布局开启合流,默认布局会展示所有发布用户的流并铺满整个画布
SDK 会默认监听房间内所有流的状态,将其排版在合流画布上
如果您想自定义画布布局或者控制某些用户的流是否显示的话,请使用下面的手动合流接口
关于合流的详细介绍参见 合流配置
如果使用默认布局,请确认房间内同时只有一个用户调用
参数 | 类型 | 介绍 |
---|---|---|
width | number | 合流画布的宽度(app的设定) |
height | number | 合流画布的高度(app的设定) |
myRTC.setDefaultMergeStream(1920, 1080); // 尺寸请对应 app 的合流设定
setMergeStreamLayout 设置合流参数 (同步)
通过调用这个接口,客户端可以设置特定用户在合流画布上的尺寸和位置
指定的用户必须处于正在发布
的状态,否则不会有任何作用。
关于合流的详细介绍参见 合流配置
参数 | 类型 | 介绍 |
---|---|---|
userId | string | 指定用户的用户 id |
option | MergeOption | 合流配置,具体见类型介绍 |
注意!设置合流只对用户的单次发布有效,如果用户取消发布重新发布后没有再次设置,新的流不会沿用之前的配置。
如果您使用这个 API 设置自己的合流,需要确保在自己发布成功后调用。同时,SDK 会因为网络波动原因自动重新发布,此时也需要重新设置一下合流参数,可以通过
republish
事件来感知 SDK 的自动重新发布
// 当有用户发布时,设置其合流参数
myRTC.on("user-publish", (user) => {
myRTC.setMergeStreamLayout(user.userId, {
x: 0, y: 0, w: 1920, h: 1080, hidden: false, muted: false,
});
});
stopMergeStream 停止合流 (同步)
停止当前的合流,如果需要重新开始合流,再次调用相应的 setMergeStreamLayout
即可。
myRTC.stopMergeStream();
leaveRoom 离开房间(同步)
离开当前房间
myRTC.leaveRoom();
on / off / once / removeAllListeners 事件操作
通过 QNRTCSession 实例可以给各种事件挂钩子,具体的事件实现参考 EventEmitter 具体的事件列表参考下文
// 监听事件
myRTC.on('user-join', handleUserJoin);
// 只监听一次
myRTC.once('user-join', handleUserJoin);
// 取消监听
myRTC.off('user-join', handleUserJoin);
// 取消所有监听
myRTC.removeAllListeners('user-join');