群组通话

更新时间: 2024/11/26 09:36:23

本文介绍了如何通过网易云信呼叫组件(CallKit)提供的 API 进行群组通话功能开发的详细步骤和代码示例。

群组通话功能暂未实现自助开通服务,若需要使用,请联系商务经理进行开通。

适用场景

群组通话功能是现代通信应用的核心功能之一,它允许多个用户同时进行实时的视频和音频交流。无论是企业会议、在线教育、社交互动还是远程医疗咨询,这一功能都能提供高效的沟通手段,增强团队协作和信息共享。

  • 在线教育:教师和学生可以通过多人视频通话进行实时互动,共享屏幕和文档,提升在线学习体验。
  • 企业会议:团队成员无论身处何地,都能通过视频会议进行有效的远程协作和决策讨论。
  • 社交互动:朋友和家人可以通过群视频通话保持联系,共享生活瞬间。
  • 远程医疗咨询:医生和患者可以进行远程视频咨询,进行初步诊断和健康建议。
  • 紧急服务:紧急服务人员可以与现场人员进行实时视频通话,快速响应紧急情况。

前提条件

根据本文操作前,请确保您已经完成了以下设置:

调用时序

以下流程图描述了一个群组通话的基本流程,包括初始化、通话过程、邀请过程和通话结束。

sequenceDiagram
autonumber
  actor U as 用户 A(发起者)
  participant SDK as 网易云信呼叫组件
  actor E as 用户 BCD...(接受方)

  %% 初始化过程
  Note over U,SDK: 应用启动时自动初始化
  U->>SDK: 初始化
  E->>SDK: 初始化

  %% 通话过程
  par 通话过程
  U->>SDK: 开始群呼 groupCall
  SDK->>E: 发起通话
  E->>SDK: 加入通话 groupJoin
  end

  %% 邀请过程
  par 邀请过程
  U->>SDK: 邀请他人 groupInvite
  SDK->>E: 发送通话邀请
  E->>SDK: 接受邀请 groupAccept
  end

  %% 通话结束
  par 通话结束
  U->>SDK: 通话结束 groupHangup
  SDK->>E: 通知通话结束
  E-->U: 确认通话结束
  end

初始化

以下示例代码描述了在 iOS 应用中如何初始化群组通话功能,包括设置配置参数。

Swift  GroupConfigParam *param = [[GroupConfigParam alloc] init];
  param.appid = kAppKey;
  param.rtcSafeMode = YES;
  [[NEGroupCallKit sharedInstance] setupGroupCall:param];

开始群呼

以下示例代码提供了调用 groupCall 开始一个群组通话的代码示例,包括设置通话参数和处理通话结果。

SwiftGroupCallParam *param = [[GroupCallParam alloc] init];
    NSMutableArray *calleeList = [[NSMutableArray alloc] init];
    for (NEUser *user in self.datas) {
      if ([user.imAccid isEqualToString:self.caller.imAccid]) {
        user.state = GroupMemberStateInChannel;
        continue;
      }
      [calleeList addObject:user.imAccid];
    }
    param.calleeList = calleeList;
    NSString *uuid = [self getRandomString];
    param.callId = uuid;
    self.callId = uuid;
    NSLog(@"call ID : %@", param.callId);
    NSLog(@"call ID length : %lu", (unsigned long)param.callId.length);
    if ([[SettingManager shareInstance] isGroupPush] == YES) {
      param.pushParam.pushMode = GroupPushModeOpen;
      if ([[SettingManager shareInstance] customPushContent].length > 0) {
        param.pushParam.pushContent = [[SettingManager shareInstance] customPushContent];
      }
    } else {
      param.pushParam.pushMode = GroupPushModeClose;
    }

    [[NEGroupCallKit sharedInstance]
         groupCall:param
        completion:^(NSError *_Nullable error, GroupCallResult *_Nullable result) {
          if (error != nil) {
            [UIApplication.sharedApplication.keyWindow ne_makeToast:error.localizedDescription];
            [self didBack];
            return;
          }
          NSLog(@"group call :%@ result : %@", error, result);
        }];

群呼邀请

以下示例代码展示了如何调用 groupInvite 邀请其他用户加入通话。

Swift[[NEGroupCallKit sharedInstance]
    groupInvite:param
     completion:^(NSError *_Nullable error, GroupInviteResult *_Nullable result) {
       NSLog(@"groupInvite : %@", error);
       if (error != nil) {
         [UIApplication.sharedApplication.keyWindow ne_makeToast:error.localizedDescription];
         return;
       }
     }];

加入群呼

以下示例代码介绍了如何调用 groupAccept 接受通话邀请并加入通话。

SwiftGroupAcceptParam *param = [[GroupAcceptParam alloc] init];
  param.callId = self.callId;
  __weak typeof(self) weakSelf = self;
  [self startTimer];
  [[NEGroupCallKit sharedInstance]
      groupAccept:param
       completion:^(NSError *_Nullable error, GroupAcceptResult *_Nullable result) {
         if (error != nil) {
           [UIApplication.sharedApplication.keyWindow ne_makeToast:error.localizedDescription];
           [weakSelf didBack];
           return;
         }
         NSLog(@"call member user list : %@", result.groupCallInfo.calleeList);
         [DataManager.shareInstance
             fetchUserWithMembers:result.groupCallInfo.calleeList
                       completion:^(NSError *_Nullable error, NSArray<NEUser *> *_Nonnull users) {
                         NSLog(@"call neuser list : %@", users);
                         [weakSelf.datas removeAllObjects];
                         [weakSelf.datas addObjectsFromArray:users];
                         [weakSelf refreshCollection];
                       }];
       }];

挂断群呼

以下示例代码介绍了调用 groupHangup 结束通话的实现方法。

Swift  GroupHangupParam *param = [[GroupHangupParam alloc] init];
  param.callId = self.callId;
  [[NEGroupCallKit sharedInstance]
      groupHangup:param
       completion:^(NSError *_Nullable error, GroupHangupResult *_Nullable result) {
         if (error != nil) {
           [[UIApplication sharedApplication].keyWindow ne_makeToast:error.localizedDescription];
           return;
         }
       }];

通话中添加成员

在通话中添加成员时,如果您需要直接修改对应的交互(UI),请参考 Github 上的开源示例项目,在 NEGroupCallViewController.m 文件中的 inviteBtn 按钮,如需帮助您可以 提交工单 联系网易云信技术支持工程师。

Swift//UI 上添加成员按钮 具体方法参考 inviteUsers
- (NEExpandButton *)inviteBtn {
  if (!_inviteBtn) {
    _inviteBtn = [[NEExpandButton alloc] init];
    [_inviteBtn setImage:[UIImage imageNamed:@"group_add"] forState:UIControlStateNormal];
    [_inviteBtn addTarget:self
                   action:@selector(inviteUsers)
         forControlEvents:UIControlEventTouchUpInside];
  }
  return _inviteBtn;
}
此文档是否对你有帮助?
有帮助
去反馈
  • 适用场景
  • 前提条件
  • 调用时序
  • 初始化
  • 开始群呼
  • 群呼邀请
  • 加入群呼
  • 挂断群呼
  • 通话中添加成员