Pano开发者中心
  • 开发者中心
  • 下载中心

›高级功能(RTC)

新手入门

  • 简介
  • 名词解释
  • 创建第一个应用

规则说明

  • Channel ID命名规则
  • 权限控制
  • 计费说明
  • 频道最大时长说明
  • 每月一万分钟免费说明
  • 布局参数说明
  • 水印

场景方案

    教育行业

    • 1vN互动小班课
    • 互动直播大班课

快速接入

  • 简介
  • 音视频

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native
    • Unity

    白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native

高级功能(RTC)

  • 简介
  • 屏幕共享
  • 分组讨论
  • 状态回调
  • 设备诊断
  • 音量指示
  • 控制声音
  • 声卡操作
  • 混音/伴音
  • 混响
  • 耳返
  • 变声
  • 美颜
  • 音视频数据回调
  • 音视频外部采集
  • 收发多路视频
  • 多窗口渲染
  • 性能检测
  • 截图
  • 反馈

高级功能(RTS)

  • 简介
  • 白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Flutter

    标注

    • 视频标注
    • 共享标注
    • 外部标注

    消息

    • 消息服务

    远程控制

    • 远程控制

操作实践

  • 切换大小屏

RESTful API

  • 基本格式
  • 生成Token
  • 频道管理
  • 云端录制
  • CDN推流
  • 文档转码
  • 消息服务
  • 服务端消息通知

SDK API

  • SDK接口说明
  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Android (Java)
  • Web SDK (IE专用版)
  • Web SDK

    • 浏览器兼容性
    • RtcEngine
    • GroupManager
    • RtcWhiteboard
    • RtsService
    • RtcMessage
    • Annotation
    • Constants

更新记录

  • 简介
  • Windows
  • macOS
  • iOS
  • Android
  • Electron
  • Flutter
  • React Native
  • Unity
  • Web(全功能SDK)
  • Web(RTS SDK)
  • Web(IE专用音视频SDK)

帮助

  • FAQ
  • 更多帮助

分组讨论

简介

Pano SDK 支持在同一个频道中创建多个音频分组,分组之间实现隔离讨论,可以灵活用于会议、教育、娱乐、游戏等各种场景。
用户需要先加入频道,再加入分组。频道类似于大厅,分组类似于小房间。

功能特点:

  • 加入频道但未加入任何分组的用户,可以听到频道和所有分组的声音。
  • 加入分组会将你的音频发送到该分组,订阅分组可以听到该分组的声音。
  • 自动订阅音频,并且设置默认分组后,新用户加入频道会自动加入和订阅默认分组。

注意事项:

  • 一位用户可以同时加入多个分组(可以被多个分组的用户同时听到,类似于讲师或主持人)
  • 一位用户只能同时订阅一个分组(订阅分组后只能听到该分组的声音)

各端 SDK 相关接口,请查看下列介绍:

  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Android (Java)
  • Web
  • Electron
  • Flutter

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');
Last updated on 2022/3/11
← 屏幕共享状态回调 →
  • 简介
  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Android (Java)
  • Web
  • Electron
  • Flutter
浙ICP备20002645号 ©2019-2022 Pano拍乐云