分组讨论
简介
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');