分组讨论
简介
Pano SDK 支持在同一个频道中创建多个音频分组,分组之间实现隔离讨论,可以灵活用于会议、教育、娱乐、游戏等各种场景。
用户需要先加入频道,再加入分组。频道类似于大厅,分组类似于小房间。
功能特点:
- 加入频道但未加入任何分组的用户,可以听到频道和所有分组的声音。
- 加入分组会将你的音频发送到该分组,订阅分组可以听到该分组的声音。
- 自动订阅音频,并且设置默认分组后,新用户加入频道会自动加入和订阅默认分组。
注意事项:
- 一位用户可以同时加入多个分组(可以被多个分组的用户同时听到,类似于讲师或主持人)
- 一位用户只能同时订阅一个分组(订阅分组后只能听到该分组的声音)
各端 SDK 相关接口,请查看下列介绍:
Windows (C++)
通过 RtcEngine 实例的 getGroupManager 方法获取分组管理器(RtcGroupManager)。
- 通过其
setCallback方法设置分组服务的回调。 - 通过其
observeGroup方法观察指定分组的事件,unobserveGroup方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
observeAllGroups方法观察所有分组的事件,unobserveAllGroups方法取消观察。 - 通过其
setDefaultGroup方法设置默认分组。 - 通过其
joinGroup方法加入分组。 - 通过其
inviteGroupUsers方法邀请用户加入分组。 - 通过其
subscribeGroup方法订阅分组,unsubscribeGroup方法取消订阅分组。 - 通过其
leaveGroup方法离开分组。 - 通过其
dismissGroup方法解散分组。
macOS/iOS (Objective-C)
通过 PanoRtcEngineKit 实例的 groupManager 属性获取分组管理器(PanoRtcGroupManager)。
- 通过其
delegate属性设置分组服务的回调。 - 通过其
- observeGroup:方法观察指定分组的事件,- unobserveGroup:方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
- observeAllGroups方法观察所有分组的事件,- unobserveAllGroups方法取消观察。 - 通过其
- setDefaultGroup:方法设置默认分组。 - 通过其
- joinGroup:方法加入分组。 - 通过其
- inviteGroupUsers:users:方法邀请用户加入分组。 - 通过其
- subscribeGroup:方法订阅分组,- unsubscribeGroup:方法取消订阅分组。 - 通过其
- leaveGroup:方法离开分组。 - 通过其
- dismissGroup:方法解散分组。
Android (Java)
通过 RtcEngine 实例的 getGroupManager 方法获取分组管理器(RtcGroupManager)。
- 通过其
setCallback方法设置分组服务的回调。 - 通过其
observeGroup方法观察指定分组的事件,unobserveGroup方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
observeAllGroups方法观察所有分组的事件,unobserveAllGroups方法取消观察。 - 通过其
setDefaultGroup方法设置默认分组。 - 通过其
joinGroup方法加入分组。 - 通过其
inviteGroupUsers方法邀请用户加入分组。 - 通过其
subscribeGroup方法订阅分组,unsubscribeGroup方法取消订阅分组。 - 通过其
leaveGroup方法离开分组。 - 通过其
dismissGroup方法解散分组。
Web
通过 RtcEngine 实例的 getGroupManager 方法获取分组管理器(GroupManager)。
- 通过其
on方法监听分组服务的回调,off方法取消监听。 - 通过其
observeGroup方法观察指定分组的事件,unobserveGroup方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
observeAllGroups方法观察所有分组的事件,unobserveAllGroups方法取消观察。 - 通过其
setDefaultGroup方法设置默认分组,getDefaultGroup方法获取获取分组。 - 通过其
joinGroup方法加入分组。 - 通过其
inviteGroupUsers方法邀请用户加入分组。 - 通过其
subscribeGroup方法订阅分组,unsubscribeGroup方法取消订阅分组。 - 通过其
leaveGroup方法离开分组。 - 通过其
dismissGroup方法解散分组。
Electron
通过 RtcEngine 实例的 groupMgr() 方法获取分组管理器。
- 通过其
on方法监听分组服务的回调。 - 通过其
observeGroup方法观察指定分组的事件,unobserveGroup方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
observeAllGroups方法观察所有分组的事件,unobserveAllGroups方法取消观察。 - 通过其
setDefaultGroup方法设置默认分组。 - 通过其
joinGroup方法加入分组。 - 通过其
inviteGroupUsers方法邀请用户加入分组。 - 通过其
subscribeGroup方法订阅分组,unsubscribeGroup方法取消订阅分组。 - 通过其
leaveGroup方法离开分组。 - 通过其
dismissGroup方法解散分组。
示例代码:
let groupMgr = rtcEngine.groupMgr();
groupMgr.on(groupMgr.Events.groupJoinConfirm, obj => {
console.log(`Events.groupJoinConfirm, groupId: ${obj.groupId}, result: ${obj.result}`);
// Events.groupJoinConfirm, groupId: default, result: 0
})
groupMgr.on(groupMgr.Events.groupLeaveIndication, obj => {
// 自己主动离开分组,不会触发此回调
// 分组被解散会触发此回调,reason: -190 (GROUP_DISMISSED)
console.log(`Events.groupLeaveIndication, groupId: ${obj.groupId}, reason: ${obj.reason}`);
// Events.groupLeaveIndication, groupId: default, reason: -190
})
groupMgr.on(groupMgr.Events.groupDismissConfirm, obj => {
// 调用 dismissGroup 方法的用户会收到此回调
console.log(`Events.groupDismissConfirm, groupId: ${obj.groupId}, result: ${obj.result}`);
// Events.groupDismissConfirm, groupId: default, result: 0
})
groupMgr.on(groupMgr.Events.groupUserJoinIndication, obj => {
console.log(`Events.groupUserJoinIndication, groupId: ${obj.groupId}, userId: ${obj.userId}, userData: ${obj.userData}`);
// Events.groupUserJoinIndication, groupId: default, userId: 10000, userData: Test
})
groupMgr.on(groupMgr.Events.groupUserLeaveIndication, obj => {
console.log(`Events.groupUserLeaveIndication, groupId: ${obj.groupId}, userId: ${obj.userId}, reason: ${obj.reason}`);
// Events.groupUserLeaveIndication, groupId: default, userId: 10000, reason: 0
})
groupMgr.on(groupMgr.Events.groupDefaultUpdateIndication, obj => {
console.log(`Events.groupDefaultUpdateIndication, groupId: ${obj.groupId}`);
// Events.groupDefaultUpdateIndication, groupId: default
})
groupMgr.on(groupMgr.Events.groupObserveConfirm, obj => {
console.log(`Events.groupObserveConfirm, groupId: ${obj.groupId}, result: ${obj.result}`);
// Events.groupObserveConfirm, groupId: default, result: 0
})
// userData 信息会通过 groupUserJoinIndication 回调通知其他用户
groupMgr.joinGroup('default', { userData: 'Test' });
groupMgr.subscribeGroup('default');
// groupMgr.dismissGroup('default');
Flutter
通过 RtcEngineKit 实例的 groupManager 方法获取分组管理器(RtcGroupManager)。
- 通过其
setEventHandler方法设置分组服务的回调。 - 通过其
observeGroup方法观察指定分组的事件,unobserveGroup方法取消观察。- 配置观察的用途在于获取自己未加入的其他分组的事件回调
- 无需配置观察也可以收到自己当前已加入的分组的事件回调
- 通过其
observeAllGroups方法观察所有分组的事件,unobserveAllGroups方法取消观察。 - 通过其
setDefaultGroup方法设置默认分组。 - 通过其
joinGroup方法加入分组。 - 通过其
inviteGroupUsers方法邀请用户加入分组。 - 通过其
subscribeGroup方法订阅分组,unsubscribeGroup方法取消订阅分组。 - 通过其
leaveGroup方法离开分组。 - 通过其
dismissGroup方法解散分组。
示例代码:
groupManager = await engineKit?.groupManager();
groupManager?.setEventHandler(RtcGroupEventHandler(
onGroupJoinConfirm: (groupId, result) {
print('onGroupJoinConfirm, groupId: $groupId, result: $result');
// onGroupJoinConfirm, groupId: default, result: ResultCode.OK
}, onGroupLeaveIndication: (groupId, result) {
// 注意:自己主动离开分组,不会触发此回调
print('onGroupLeaveIndication, groupId: $groupId, result: $result');
// onGroupLeaveIndication, groupId: default, result: ResultCode.GroupDismissed
}, onGroupDismissConfirm: (groupId, result) {
print('onGroupDismissConfirm, groupId: $groupId, result: $result');
// onGroupDismissConfirm, groupId: default, result: ResultCode.OK
}, onGroupUserJoinIndication: (groupId, userInfo) {
print('onGroupUserJoinIndication, groupId: $groupId, userInfo: userId - ' +
userInfo.userId + ", userDada - " + userInfo.userData);
// onGroupUserJoinIndication, groupId: default, userInfo: userId - 10000, userDada - Test
}, onGroupUserLeaveIndication: (groupId, userId, reason) {
print('onGroupUserLeaveIndication, groupId: $groupId, userId: $userId, reason: $reason');
// onGroupUserLeaveIndication, groupId: default, userId: 10000, reason: ResultCode.OK
}, onGroupDefaultUpdateIndication: (groupId) {
print('onGroupDefaultUpdateIndication, groupId: $groupId');
// onGroupDefaultUpdateIndication, groupId: default
}, onGroupObserveConfirm: (groupId, result) {
print('onGroupObserveConfirm, groupId: $groupId, result: $result');
// onGroupObserveConfirm, groupId: default, result: ResultCode.OK
}));
GroupConfig groupConfig = GroupConfig('Test');
await groupManager?.joinGroup('default', groupConfig);
await groupManager?.subscribeGroup('default');
