全部文档

无 UI 集成 ( 最近更新时间:2020-04-28 19:00:00 )

# 前置条件

RongCallLib 提供了单人,多人实时音视频通话的基础功能,并且提供了简单易于的接口,还封装了控制音视频通话状态的信令消息和通话控制逻辑,使其可以有效的管理通话状态。RongCallLib 是基于 RongRTCLib 实现的,RongCallLib 的音视频采集和实时传输的能力来自于 RongRTCLib

兼容性

RongCallLib 支持 iOS 8.0 及以上系统。 2.9.13 及以上版本的 RongCallLib 与 2.9.12 及其以下版本不能互通。

说明

开发者想要了解 RongCallLib 接口使用方法,除了阅读文档,还可以可以参考 RongCallKit 源代码: https://github.com/rongcloud/callkit-ios

# 服务开通
  1. 开发者后台 创建应用。
  2. 开通音视频服务,开通位置如下图。
# SDK 导入

以下两种方式可以将 SDK 导入您的项目中:

  • 通过 CocoaPods 自动导入管理依赖 (推荐使用)
  • 手动导入 SDK 并管理依赖
# 自动导入
  • 如果没有特殊要求,建议开发者使用最新版本融云 SDK ,请运行以下命令更新本地的 CocoaPods 仓库列表:
pod repo update
已复制
1
  • 请在 podfile 中添加如下内容:
pod 'RongCloudIM/IMLib''~> 2.10.5'
pod 'RongCloudRTC/RongCallLib''~> 2.10.5'
已复制
1
2
  • 请在终端中运行以下命令:
pod install
已复制
1

完成后,CocoaPods 会在您的工程根目录下生成一个 .xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 .xcodeproj

# 手动导入
  1. 在融云官网下载通讯能力 SDK 库进行集成

  2. 导入下载的通讯能力 SDK 库

  3. 添加以下系统依赖库

    • AssetsLibrary
    • MapKit
    • ImageIO
    • Security
    • SystemConfiguration
    • QuartzCore
    • AVFoundation
    • GLKit
    • OpenGLES
    • CoreGraphics
    • CoreLocation
    • CoreTelephony
    • CoreFoundation
    • CoreMedia
    • CoreAudio
    • CoreVideo
    • CFNetwork
    • AudioToolbox
    • VideoToolBox
    • AVFoundation
    • libc++.tbd
    • libz.tbd
    • libbz2.tbd
    • libiconv.tbd
    • libsqlite3.tbd
# 工程配置
  1. 音视频通话需要用到摄像头和麦克风权限,请在工程的 info.plist 中添加如下键值:

    Privacy - Microphone Usage Description

    Privacy - Camera Usage Description

  2. 音视频通话中需要用到 HTTP 请求,请在工程的 info.plist 中添加如下键值:

    App Transport Security Settings

    在此键值下再添加 Allow Arbitrary Loads 并将 Value 设置为 YES

  3. 请将工程中 Target -> Signing & Capabilities -> Background Modes 如下内容勾选:

    Audio, AirPlay, and Picture in Picture

    Voice over IP

  4. 请将工程中 Target -> Build Settings -> Enable Bitcode 将此项设置为 NO

  5. 请将工程中 Target -> Build Settings -> Other Linker Flags 在此项中添加 -ObjC。为避免造成编译失败,禁止使用 -all_load-force_load

# 初始化

在启动时,使用单例初始化IM,并连接IM服务。

示例代码

// AppKey 设置
[[RCIMClient sharedRCIMClient] initWithAppKey:@"请在开发者平台获取AppKey"];
已复制
1
2
# 连接IM

IM初始化完成后需要连接IM服务。

示例代码

// 连接IM服务
[[RCIMClient sharedRCIMClient] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
                                        dbOpened:^(RCDBErrorCode code) {}
                                         success:^(NSString *userId) {}
                                           error:^(RCConnectErrorCode status) {}
                                  tokenIncorrect:^{}];

已复制
1
2
3
4
5
6
7

# 通话监听

此代理定义在 RCCallClient 中定义了全局通话呼入的监听器 RCCallReceiveDelegate 设置并实现此代理方法即可收到来电。

- (void)didReceiveCall:(RCCallSession *)callSession;
已复制
1

示例代码

初始化 RongCallLib 后可收到 RCCallReceiveDelegate 的来电回调。

[[RCCallClient sharedRCCallClient] setDelegate:RCCallReceiveDelegate的实现类];
已复制
1

# 发起通话

使用 RongCallLib 库中 RCCallClient 的单例 startCall:targetId:to:mediaType:sessionDelegate:extra: 方法可以发起指定呼叫。

示例代码

self.callSession = [[RCCallClient sharedRCCallClient] startCall:conversationType
                                                       targetId:targetId
                                                             to:userIdList
                                                      mediaType:mediaType
                                                sessionDelegate:self
                                                          extra:nil];
已复制
1
2
3
4
5
6

# 接听通话

当需要接听通话时,利用发起呼叫返回的 callSession 或来电代理返回的 callSession 对象调用接听方法。

示例代码

[self.callSession accept:self.callSession.mediaType];
已复制
1

# 挂断通话

当需要挂断通话时,利用发起呼叫返回的 callSession 或来电代理返回的 callSession 对象调用挂断方法。

示例代码

[self.callSession hangup];
已复制
1

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助