技术福利【干货】音视频 iOS CallKit 开发指南

iOS CallKit 开发指南

简介

CallKit 是融云音视频通话功能的 UI 界面 SDK。包含了单人、多人音视频通话的界面的各种场景和功能。您可以快速的集成 CallKit 来实现丰富的音视频通话界面,并进行自己的 UI 定制开发。同时我们开源了 CallKit,您可以根据您的需要去使用。

GitHub 项目:CallKit 开源代码

使用说明

由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的 VoIP 不能互通。

音视频 SDK 为商用收费功能,之前的 SDK 中的 VoIP 为免费测试功能,如果您还想使用之前的 VoIP,可以使用 2.5.2 版本。

集成说明

导入 SDK

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

  • 通过 CocoaPods 管理依赖
  • 手动导入 SDK 并管理依赖

使用 CocoaPods 导入 SDK

1、 Cocoapods 的安装、使用,可以参考IM SDK - 下载与导入SDK文档。

2、 使用 CocoaPods 导入融云 SDK

在您的工程根目录下新建一个 Podfile 文件,在文件中输入以下内容。(在此以 2.8.0 版本为例,其中 “MyApp” 为自己工程名)

  target ‘MyApp‘ do
    pod ‘RongCloudIM/IMLib‘, ‘2.8.0‘
    pod ‘RongCloudIM/IMKit‘, ‘2.8.0‘
    pod ‘RongCloudIM/CallLib‘, ‘2.8.0‘
    pod ‘RongCloudIM/CallKit‘, ‘2.8.0‘
  end

然后在终端中运行以下命令:

  pod install

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

请务必保证使用的 RongCloudIM 所有模块版本号一致。 
关于融云 IM CocoaPods 功能模块的介绍和使用说明,可以参考说明文档。 
如果您使用的是2.8.0之前的SDK,请参考知识库文档

手动导入 SDK

1、 下载 SDK

您可以到融云官方网站下载 SDK。

2、 融云 IM SDK 是 Call SDK 的基础。使用 CallKit 或 CallLib,必须同时集成使用融云 IM SDK。 手动导入 IM SDK,可以参考 IM SDK - 下载与导入文档。

SDK 文件说明:

文件 说明 注意事项
RongCallKit.framework CallKit的framework 库 使用 CallKit 必须导入
RongCallLib.framework CallLib的framework 库 使用 CallLib 与使用 CallKit 都必须导入
AgoraRtcEngineKit.framework 通话引擎 必须导入,否则通话功能将无法使用

3、 手动集成了融云 SDK 之后,您需要在您的工程中导入 RongCallLib.framewrok、 RongCallKit.framewrok、AgoraRtcEngineKit.framework 以及系统库 CoreMotion.framework、VideoToolbox.framework、libresolv.tbd。

4、 在 Xcode 项目 “Build Settings -> Other Linker Flags” 中,增加"-ObjC"。

快速集成

使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMKit SDK 集成文档。

发起通话

使用 CallKit 可以通过两种方式发起通话:

  1. 在聊天界面输入扩展的加号内,点击语音通话/视频通话按钮直接发送通话。

这个功能在 SDK 中已经默认实现了,您不需要做什么额外的操作。

  1. 调用 RCCall 类中的以下方法发起通话。
  2. 发起单人通话
// RCCall Class/*!
 发起单人通话

 @param targetId  对方的用户ID
 @param mediaType 使用的媒体类型
 */- (void)startSingleCall:(NSString *)targetId
              mediaType:(RCCallMediaType)mediaType;
  • 选择成员并发起多人通话
// RCCall Class/*!
 选择成员并发起多人通话

 @param conversationType 会话类型
 @param targetId         会话目标ID
 @param mediaType        使用的媒体类型

 @discussion 此方法会先弹出选择成员界面,选择完成后再会发起通话。目前支持的会话类型有讨论组和群组。

 @warning 如果您需要在群组中调用此接口发起多人会话,需要设置并实现groupMemberDataSource。
 */- (void)startMultiCall:(RCConversationType)conversationType
              targetId:(NSString *)targetId
             mediaType:(RCCallMediaType)mediaType;

需要注意的是,如果您需要在群组中调用此接口发起多人会话,需要设置并实现 groupMemberDataSource 。
SDK 在选择群组成员的时候,会调用 getAllMembersOfGroup:result: 接口获取群成员列表并显示。

  • 直接发起多人通话
// RCCall Class/*!
 直接发起多人通话

 @param conversationType 会话类型
 @param targetId         会话目标ID
 @param mediaType        使用的媒体类型
 @param userIdList       邀请的用户ID列表

 @discussion 此方法会直接发起通话。目前支持的会话类型有讨论组和群组。

 @warning 您需要设置并实现groupMemberDataSource才能加人。
 */- (void)startMultiCallViewController:(RCConversationType)conversationType
                            targetId:(NSString *)targetId
                           mediaType:(RCCallMediaType)mediaType
                          userIdList:(NSArray *)userIdList;

通话接听

当收到一个通话呼叫的时候,

  1. 当 App 处于前台状态的时候,SDK 会自动弹出通话界面。
  2. 当 App 处于后台活动状态的时候,SDK 会弹出本地通知并播放铃声。
  3. 当 App 处于后台暂停状态的时候,如果您的 App 开启了 VoIP 后台运行模式并在开发者后台上传了 VoIP 推送证书,这时候 App 会在后台启动并弹出本地通知;否则,App 会收到远程推送提醒,VoIP Push 设置请参考 VoIP 推送设置文档

关于 App 运行状态的更多信息,您可以参考 SDK 的运行状态文档。

会话是否支持发起通话

目前,SDK 支持在单聊发起单人通话,在讨论组、群聊中发起多人通话。

您可以通过 RCCall 类的以下接口查询当前会话的通话能力。

// RCCall Class/*!
 当前会话类型是否支持音频通话

 @param conversationType 会话类型

 @return 是否支持音频通话
 */- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;/*!
 当前会话类型是否支持视频通话

 @param conversationType 会话类型

 @return 是否支持视频通话
 */- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;

设置多人最大通话人数限制

CallKit 默认音频通话最大人数为 20 人,视频通话最大人数为 9 人。

如果不符合您的需求,您可以通过 RCCall 以下接口设置最大人数。

// RCCall Class/*!
 音频通话支持的最大通话人数
 */@property (nonatomic, assign) int maxMultiAudioCallUserNumber;/*!
 视频通话支持的最大通话人数
 */@property (nonatomic, assign) int maxMultiVideoCallUserNumber;

建议您在设置最大人数的时候,考虑移动设备的带宽(主要是多路视频通话)和UI交互友好。
CallLib 的话音频和视频人数默认均没有限制。

UI 界面说明

CallKit 中默认实现了一套较为通用的通话 UI,包含单人音视频通话界面 RCCallSingleCallViewController 、多人音频通话界面RCCallAudioMultiCallViewController 、多人视频通话界面 RCCallVideoMultiCallViewController、最小化的通话界面 RCCallFloatingBoard、聊天界面的通话提示 RCCallDetailMessageCellRCCallTipMessageCell等。

如果能满足您的需求,您可以基于 CallKit 直接开发,如果您的需求较为特殊,可以直接使用 CallLib 并实现相关的界面UI,您也可以向我们商务索取CallKit 源码以供参考。

时间: 2024-12-04 16:25:11

技术福利【干货】音视频 iOS CallKit 开发指南的相关文章

iOS端im实时音视频功能快速开发实操指导!

所需工具yun2win实时音视频IOS端sdk 下载地址:https://github.com/yun2win/yun2win-sdk-iOS/tree/master/Y2W_IM_SDK yun2win官网:www.yun2win.com 简介 Y2W_RTC_SDK集成多种实时通讯能力: 实时音频 实时视频 屏幕共享 协作白板 开发流程 发起方使用Y2WRTCManager对象的createChannel方法创建Y2WRTCChannel对象 接收方使用Y2WRTCManager对象的get

iOS 8开发指南

这篇是计算机类的优质预售推荐>>>><iOS 8开发指南(第2版)> 国内第一本iOS8开发的原创图书全新改版 objective-c和swift双语讲解 全部实例视频 涵盖WatchKit HealthKit HomeKit三大热门框架 内容简介 本书共35章,循序渐进地讲解了iOS 8应用开发的基本知识.本书从搭建开发环境讲起,依次讲解了Objective-C语言基础.Swift语言基础.Cocoa Touch.Xcode Interface Builder界面开发

云+社区技术沙龙:音视频技术开发实战(北京) 报名开启

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 近年来,随着移动互联网的普及和智能终端设备的广泛应用,短视频.直播.在线教学等各类形式的音视频形式的应用越来越广泛,然而,音视频技术使用起来虽然便捷,但是在技术开发上却有"重重难关"要过. 2015年初,腾讯推出一体化云视频解决方案,正式涉足网络视频市场.腾讯凭借在QQ.腾讯视频等海量业务发展过程中,在音视频领域多年积累的核心技术与优势能力,集成了一体化的云视频解决方案,为包括在线教育.视频社交.视频网站新媒体.广电网络电视等

音视频二次开发 IP组播技术

在Internet上,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分.点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源.在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定的多个接收者发送消息的方法.1989年,IETF通过RFC1112,定义了Internet上的组播方式. 主机组的成员可以动态变化,主机有权选

web版本的音视频聊天室开发

目前网上视频聊天室.视频会议软件.可视IP电话软件随处可见,你是否想自己做一个玩玩?其实这类软件无非是视频加上网络而建成的.如果熟悉视频捕 捉和网络传输技术,根本就难不倒你.本文详细介绍了如何利用别人提供的sdk来开发视频聊天室 首先介绍一下视频聊天技术发展历程 1. C/S结构的视频聊天软件或插件.这是最早的视频聊天开发技术,已经被淘汰. 2. P2P模式的视频聊天软件或插件.这是前几年以及目前很多大型视频聊天项目的主要使用技术.也是很多小型视频聊天室使用的技术. 3.基于P2P模式+C/S模

手机端的音视频监控系统开发

网络信息化的趋势,随着流媒体技术.无线网络技术以及视频压缩技术的不断进步,视频监控技术得到了广泛的应用,同时,监控的规模和范围也在不断的扩大.人们对于安全保障的要求不断的提高,从而使得过去以图文为主的内容服务应经不能够满足用户的需求,取而代之的则是音视频多媒体服务.使用移动终端技术的视频监控系统,不仅具有体积小型化.安装傻瓜化以及配置灵活化的优势,最重要的是还降低了成本.由于网络功能和视频压缩都被集中的保存在小体积的设备中,因此,通过网络远程监控视频设备就可以获得监控视频.目前,网络视频监控不仅

从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天.屏幕共享.PPT放映等常用功能.但是在当今浏览器成为端上主流的时代,实时音视频又怎甘于落后呢?相比于需要安装包的 Zoom,直接在网页上开发一款类似的会议软件肯定会受到更多的关注.当需要开会的时候,直接通过一个链接,大家就可以接入并开始会议了.现在,使用七牛实时音视频的 Web SDK,我们可以将

音视频即时通讯开发中音频模式的采集

在很多即时通讯应用中,会根据应用场景的不同,需要对音频输入源进行选择,不同的应用场景对应不同的音频工作模式.需要支持多种音频工作(采集)模式,包括:     1.发言模式(默认):自动选择麦克风为音频输入源设备,用户说话的声音被麦克风采集,启动音频特效处理(包括:回音消除.静音检测.噪音抑制.自动增溢),该模式通常应用于互动交流,用户发言讨论等场合:     2.放歌模式:自动选择立体声混音输入源设备,本地计算机所播放的声音被采集,同时SDK内部会自动屏蔽其它用户的声音(如果不屏蔽,则用户的声音

手机端音视频的通讯开发

目前应用在手机端的各种各样的即时通讯软件层出不穷,服务提供商也提供了越来越丰富的通讯服务功能.随着互联网的发展,即时通讯的运用将日益广泛,即时通讯软件业方兴未艾. 如今市场竞争越来越激烈,如何在有限的时间内完成项目把主要精力投入项目的业务逻辑处理上,加快项目开发进展,成为现在开发类工作的重中之重.下面介绍一个基于Android 平台的简易即时通讯系统,研究了在开源服务器Openfire上各个移动客户端和服务器之间的通信系统结构,实现了客户端功能. Android 平台框架共由5 部分组成.底层核