实现音视频通话功能
更新时间: 2024/09/27 10:50:00
自 IM UIKit v9.4.0 开始,会话消息模块(NEChatUIKit
)支持音视频通话功能。该功能基于云信呼叫组件实现。
本文介绍如何在 IM UIKit 中引入和初始化呼叫组件,进而在您的 IM 应用中实现音视频通话。
功能介绍
实现音视频通话功能后,用户在会话界面的输入区域点击更多>音视频 (>),即可快速发起音频通话或视频通话。
开发环境
- Xcode 10 及以上版本。
- iOS 10.0 及以上版本的 iOS 设备。
- 已安装 CocoaPods。
前提条件
实现流程
步骤 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
-
执行
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)
相关信息
其他功能开通
如果需要实现“屏蔽黑名单用户发起的语音/视频通话请求”,需要在云信控制台开启该功能。 如未开通该功能,黑名单用户仍可以向将其拉黑的用户发起通话请求。
-
在控制台首页应用管理中选择应用,然后单击 IM 即时通讯下的功能配置按钮进入功能配置页。
-
在顶部选择基础功能页签,开启被拉黑时被拉黑者无法唤起呼叫。
错误码
呼叫组件相关错误码,请参见错误码。
常见问题
集成组件后出现编译错误
更多问题
更多问题,请参见呼叫组件常见问题。
此文档是否对你有帮助?