文档反馈
文档反馈

实现音视频通话(iOS)

网易云信音视频通话产品的基本功能包括高质量的实时音视频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音视频通话提供的基本业务流程。

前提条件

请确认您已完成以下操作:

快速跑通Sample Code

注意:在运行示例项目之前,请联系商务经理开通非安全模式。非安全模式建议只在集成开发阶段使用,请在应用正式上线前改回安全模式。

  1. SDK和示例代码下载页面或 Demo 体验页面下载需要体验的示例项目或 Demo 源码工程。

    Objective-C 工程源码为例。Podfile 文件中包括以下内容:

     # platform :ios, '9.0'
    
     target 'NERTC1to1Sample' do
       # Comment the next line if you don't want to use dynamic frameworks
       use_frameworks!
       pod 'NERtcSDK', 'x.x.x'
     end
  2. 执行安装。

    pod install
  3. 双击 NERTC1to1Sample.xcworkspace,通过 Xcode 打开工程。
  4. AppKey.h 文件中填入您的 AppKey,并注释 NETSAppDelegate.m 中的 NSAssert 语句。
  5. 运行工程。

实现音视频通话

本节主要介绍如何使用 NERTC SDK 实现音视频通话,主要流程如下图所示: 流程图 流程图

1. 导入类

在项目中导入 NERtcSDK 类:

  #import <NERtcSDK/NERtcSDK.h>

2. 初始化

先执行 - setupEngineWithContext: 方法完成初始化。

    @interface Myapp ()<NERtcEngineDelegateEx>
    ...
    NERtcEngine *coreEngine = [NERtcEngine sharedEngine];
    NERtcEngineContext *context = [[NERtcEngineContext alloc] init];
    // 设置通话相关信息的回调
    context.engineDelegate = self;
    // 设置当前应用的appKey
    context.appKey = AppKey;
    [coreEngine setupEngineWithContext:context];
    ...

3. 设置本地视图

初始化成功后,可以设置设置本地视图,来预览本地图像。您可以在加入房间之前预览,或在加入房间后预览。

4. 加入房间

加入房间前,请确保已完成初始化相关事项。若您的业务中涉及呼叫邀请等机制,建议通过信令实现。

通过 – joinChannelWithToken:channelName:myUid:completion: 方法加入房间。

  // 示例
  [NERtcEngine.sharedEngine joinChannelWithToken:@""
                                     channelName:roomId
                                           myUid:userId
                                      completion:^(NSError * _Nullable error, uint64_t channelId, uint64_t elapesd) {
                                                          if (error) {
                                                              //加入失败
                                                          } else {
                                                              //加入成功
                                                          }
                                        }];

参数说明

参数 说明
token 安全认证签名 Token。可设置为:
  • null。非安全模式下可设置为 null。安全性不高,建议在产品正式上线前联系对应商务经理转为安全模式。
  • 已获取的安全认证签名 Token。安全模式下必须设置为获取到的 Token 。若未传入正确的 Token 将无法进入房间。

    推荐使用安全模式。

channelName 房间名称,设置相同房间名称的用户会进入同一个通话房间。
注意:您也可以在加入通道前,通过创建房间接口创建房间。加入房间时,若传入的 {channelName} 未事先创建,则云信服务器内部将为其自动创建一个名为 {channelName} 的通话房间。
myUid 用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。

5. 设置远端视图

音视频通话过程中,除了要显示本地的视频画面,通常也要显示参与互动的其他连麦者/主播的远端视频画面。

  1. NERtcEngineDelegate 通过以下回调获取相关信息:

  2. 在监听到远端用户加入房间或发布视频流后,本方可以通过 – setupRemoteVideoCanvas:forUserID: 方法设置远端用户视频画布,用于显示其视频画面。

       // 示例 
       NERtcVideoCanvas *canvas = [self setupRemoteCanvasWithUid:userID];
       [NERtcEngine.sharedEngine setupRemoteVideoCanvas:canvas forUserID:userID];
  3. 在监听到远端用户发布视频流后,本方可以通过 – subscribeRemoteVideo:forUserID:streamType: 方法对其发起视频流的订阅,来将对方的视频流渲染到视频画布上。

       // 示例
       [NERtcEngine.sharedEngine subscribeRemoteVideo:YES
                                           forUserID:userID
                                           streamType:kNERtcRemoteVideoStreamTypeHigh];
  4. 监听远端用户离开房间或关闭视频功能。

6. 音频流

本地音频的采集发布和远端音频订阅播放是默认启动的,正常情况下无需开发者主动干预。

7. 退出通话房间

通过 leaveChannel 接口退出通话房间。

  // 示例
  // 退出通话房间
  [NERtcEngine.sharedEngine leaveChannel];

NERtcEngineDelegate 提供 – onNERtcEngineDidLeaveChannelWithResult: 来监听当前用户退出房间的结果。

8. 销毁实例

当确定 App 短期内不再使用音视频通话实例时,可以通过 destroyEngine 释放对应的对象资源。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     [NERtcEngine destroyEngine];

 });
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。