实现音视频通话功能

更新时间: 2024/09/27 10:50:00

自 IM UIKit v9.4.0 开始,会话消息模块(NEChatUIKit)支持音视频通话功能。该功能基于云信呼叫组件实现。

本文介绍如何在 IM UIKit 中引入和初始化呼叫组件,进而在您的 IM 应用中实现音视频通话。

功能介绍

实现音视频通话功能后,用户在会话界面的输入区域点击更多>音视频更多按钮.png>发起音视频通话icon.png),即可快速发起音频通话或视频通话。

UIKit 音视频通话效果.png

开发环境

  • Xcode 10 及以上版本。
  • iOS 10.0 及以上版本的 iOS 设备。
  • 已安装 CocoaPods。

前提条件

  • 已开通 IM 即时通讯、音视频通话 2.0、音视频通话2.0-话单以及信令能力。开通服务的操作流程请参考 开通能力

  • 集成会话消息界面

实现流程

步骤 1:引入呼叫组件

  1. 在 Podfile 文件中引入呼叫组件。

    platform :ios, '10.0'
    
    target 'your project name' do
    # Comment the next line if you don't want to use dynamic frameworks
        use_frameworks!
        pod 'NERtcCallUIKit', '1.8.2'  
        pod 'NERtcCallKit', '1.8.2'
        pod 'NERtcSDK', '4.6.29'
    end
    
  2. 执行 pod install 命令导入组件。

  • 建议引入呼叫组件 1.8.2 及以上版本。
  • 如果引入 1.8.2 之前的版本,则不支持步骤 2 提及的通过路由方式发起音视频通话。您需要修改源码来调用呼叫组件的音视频通话能力。
  • 如果需要在 Objective-C 项目中导入组件,头文件引用请参考以下引用方式。
    #import <NEConversationUIKit/NEConversationUIKit-Swift.h>
    #import <NEContactUIKit/NEContactUIKit-Swift.h>
    #import <NEChatUIKit/NEChatUIKit-Swift.h>
    #import <NETeamUIKit/NETeamUIKit-Swift.h>
    #import <NERtcCallUIKit/NERtcCallUIKit.h>
    ...
    

步骤2:初始化呼叫组件

对于不同的呼叫 UI 组件版本,初始化接口不同。

使用低于 2.1.0 版本的呼叫 UI 组件

在发起音视频通话前,需先调用 setup 方法初始化呼叫组件。

呼叫组件初始化相关代码内容,建议放在 IM 登录之前执行。

参数 类型 必传 说明
appKey String 在云信控制台创建应用时获取到的 App Key
apnsCerName String APNs 推送证书名称
disableRecord BOOL 是否关闭话单,默认 NO,不关闭
joinRtcWhenCall BOOL 主叫是否在呼叫时加入 RTC,默认 NO,不加入
globalInit BOOL 是否在初始化呼叫组件时初始化 RTC,默认 YES
isDisableLog BOOL 是否初始化呼叫组件日志,默认 YES

示例代码:

Swift
//呼叫组件初始化
let option = NERtcCallOptions()
option.apnsCerName = "your cer name"
let uiConfig = NERtcCallUIConfig()
uiConfig.option = option
uiConfig.appKey = "your appkey"
uiConfig.uiConfig.showCallingSwitchCallType = option.supportAutoJoinWhenCalled
NERtcCallKit.sharedInstance().timeOutSeconds = 30
NERtcCallUIKit.sharedInstance().setup(with: uiConfig)
Objective-C
//呼叫组件初始化
NERtcCallOptions *option = [[NERtcCallOptions alloc] init];
option.APNSCerName = @"your cer name";
NERtcCallUIConfig *uiConfig = [[NERtcCallUIConfig alloc] init];
uiConfig.option = option;
uiConfig.appKey = @"your appkey";
uiConfig.uiConfig.showCallingSwitchCallType = option.supportAutoJoinWhenCalled;
NERtcCallKit.sharedInstance.timeOutSeconds = 30;
[NERtcCallUIKit.sharedInstance setupWithConfig:uiConfig];

使用 2.1.0 及以上版本的呼叫 UI 组件

在发起音视频通话前,需先调用 setup 方法初始化呼叫组件。

呼叫组件初始化相关代码内容,建议放在 IM 登录之前执行。

参数 类型 必传 说明
appKey String 在云信控制台创建应用时获取到的 App Key
enableAutoJoinSignalChannel BOOL 被叫是否自动加入channel,默认 NO,不加入
enableJoinRtcWhenCall BOOL 主叫是否在呼叫时加入 RTC,默认 NO,不加入
initRtcMode NECallInitRtcMode 是否在初始化呼叫组件时初始化 RTC,默认为 GlobalInitRtc(全局初始化),具体请参考 NECallInitRtcMode
currentUserAccId String 当前用户的 IM 账号 ID(accid)
currentUserUid uint64_t 当前用户的 RTC 账号 ID(uid)
rtcInfo NERtcEngineContext RTC 私有化配置初始化对象,不需要私有化可空

示例代码:

Swift
//呼叫组件初始化
let setup = NESetupConfig(appkey:  "your app key")
NECallEngine.sharedInstance().setTimeout(30)
let uiConfig = NECallUIKitConfig()
uiConfig.config = setup
uiConfig.appKey =  "your app key"
NERtcCallUIKit.sharedInstance().setup(with: uiConfig)
Objective-C
//呼叫组件初始化
NESetupConfig *setupConfig = [[NESetupConfig alloc] initWithAppkey:@"your app key"];
NECallUIKitConfig *config = [[NECallUIKitConfig alloc] init];
config.config = setupConfig;
config.appKey =  @"your app key";
[[NECallEngine sharedInstance] setTimeout:30];
[[NERtcCallUIKit sharedInstance] setupWithConfig:config];

步骤3:发起音视频通话

呼叫组件里,音频通话和视频通话的能力已被注册到路由中。因此您可调用 use 方法通过路由跳转至呼叫界面发起音视频通话。

方法原型(Swift)如下:

swiftpublic func use(_ url: String,
                parameters: [String: Any]? = nil,
                closure: RouteHandleCallbackClosure? = nil)
参数 类型 说明
url String 注册界面对应的跳转地址,呼叫界面对应的跳转地址为 imkit://callkit.page
parameters [String: Any] 传递到下个界面的参数
closure RouteHandleCallbackClosure (可选)异步回调

其中呼叫页面的 parameters 包括以下子参数:

parameters 参数 说明
remoteUserAccid 被呼叫方的用户账号(accid)
currentUserAccid 呼叫方的用户账号(accid)
remoteShowName 被呼叫方的用户昵称
remoteAvatar (可选)被呼叫方的用户头像
type 呼叫类型,1 为音频,2 为视频

示例代码(Swift)如下:

var param = [String: AnyObject]()
param["remoteUserAccid"] = "callee accid" 
param["currentUserAccid"] = NIMSDK.shared().loginManager.currentAccount() 
param["remoteShowName"] = "callee name" 
param["remoteAvatar"] = "callee avatar" //选填
param["type"] = NSNumber(integerLiteral: 1) as AnyObject // 呼叫类型,1 为音频,2 为视频
Router.shared.use("imkit://callkit.page", parameters: param)

相关信息

其他功能开通

如果需要实现“屏蔽黑名单用户发起的语音/视频通话请求”,需要在云信控制台开启该功能。 如未开通该功能,黑名单用户仍可以向将其拉黑的用户发起通话请求。

  1. 在控制台首页应用管理中选择应用,然后单击 IM 即时通讯下的功能配置按钮进入功能配置页。

    image.png
  2. 在顶部选择基础功能页签,开启被拉黑时被拉黑者无法唤起呼叫

错误码

呼叫组件相关错误码,请参见错误码

常见问题

集成组件后出现编译错误

更多问题

更多问题,请参见呼叫组件常见问题

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 开发环境
  • 前提条件
  • 实现流程
  • 步骤 1:引入呼叫组件
  • 步骤2:初始化呼叫组件
  • 步骤3:发起音视频通话
  • 相关信息
  • 其他功能开通
  • 错误码
  • 常见问题
  • 集成组件后出现编译错误
  • 更多问题