本文介绍如何使用 anyRTC 视频通话 SDK 快速实现视频通话。
前提条件
- Xcode 9.0 或以上版本(本文 Xcode 的界面描述以 Xcode 11.0 为例)
- macOS 10.15+
- 有效的 anyRTC 开发者账号
创建 macOS 项目
-
打开 Xcode 并点击 Create a new Xcode project。
-
选择平台类型为 macOS、项目类型为 Single View App,并点击 Next。
-
输入项目名称(Product Name)、开发团队信息(Team)、组织名称(Organization Name)和语言(Language)等项目信息,并点击 Next。
如果你没有添加过开发团队信息,会看到 Add account… 按钮。点击该按钮并按照屏幕提示登入 Apple ID,完成后即可选择你的 Apple 账户作为开发团队。
-
选择项目存储路径,并点击 Create。
获取 SDK
选择如下任意一种方式获取最新版 RTC SDK。
方法一:使用 CocoaPods 获取 SDK
- 开始前确保你已安装 Cocoapods。参考 Getting Started with CocoaPods 安装说明。
- 在终端里进入项目根目录,并运行
pod init
命令。项目文件夹下会生成一个Podfile
文本文件。 - 打开
Podfile
文件,修改文件为如下内容。注意将Your App
替换为你的 Target 名称。
# platform :ios, '9.0' use_frameworks!
target 'Your App' do
pod 'ARtcKit_iOS'
end
- 在终端内运行
pod install
命令安装 SDK。成功安装后,Terminal 中会显示Pod installation complete!
,此时项目文件夹下会生成一个xcworkspace
文件。 - 打开新生成的
xcworkspace
文件。
方法二:从官网获取 SDK
-
前往 SDK 下载页面,获取最新版的 anyRTC SDK,然后解压。
-
根据你的需求,选择以下一种方法将
ARtcKit.framework
动态库复制到项目的./project_name
文件夹下(project_name
为你的项目名称)。 -
打开 Xcode,进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content菜单。
-
点击 + > Add Other… > Add Files 添加
ARtcKit.framework
动态库,并确保添加的动态库 Embed 属性设置为 Embed & Sign。 添加完成后,项目会自动链接所需系统库。
根据 Apple 官方要求,app 的 Extension 中不允许包含动态库。如果项目中的 Extension 需要集成 SDK,则添加动态库时需将文件状态改为 Do Not Embed。
基本流程
现在,我们已经将 anyRTC SDK 集成到项目中了。接下来我们要在 ViewController
中调用 anyRTC SDK 提供的核心 API 实现基础的视频通话功能,API 调用时序见下图。
1. 创建用户界面
根据场景需要,为你的项目创建视频通话的用户界面。我们推荐你在项目中添加如下元素:
- 本地视频窗口
- 远端视频窗口
你可以参考以下代码创建一个基础的用户界面。
Objective-C
// ViewController.m
@interface ViewController ()
// 定义 localView 变量
@property (nonatomic, strong) NSView *localView;
// 定义 remoteView 变量
@property (nonatomic, strong) NSView *remoteView;
@end
@implementation ViewController
...
- (void)viewDidLoad {
[super viewDidLoad];
// 调用初始化视频窗口函数
[self initViews];
// 后续步骤调用 anyRTC API 使用的函数
[self initializeARkitEngine];
[self setupLocalVideo];
[self joinChannel];
}
// 设置视频窗口布局
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.remoteView.frame = self.view.bounds;
self.localView.frame = CGRectMake(self.view.bounds.size.width - 90, 0, 90, 160);
}
- (void)initViews {
// 初始化远端视频窗口
self.remoteView = [[NSView alloc] init];
[self.view addSubview:self.remoteView];
// 初始化本地视频窗口
self.localView = [[NSView alloc] init];
[self.view addSubview:self.localView];
}
2. 导入类
在调用 anyRTC API 前,你需要在项目中导入 ARtcKit 类,并定义一个 rtcKit 变量。
Objective-C
// ViewController.h
// 导入 ARtcKit 类
#import <ARtcKit/ARtcEngineKit.h>
// 声明 ARtcEngineDelegate,用于监听回调
@interface ViewController : UIViewController <ARtcEngineDelegate>
// 定义 rtcKit 变量
@property (strong, nonatomic) ARtcEngineKit *rtcKit;
3. 初始化 ARtcEngineKit 对象
调用 sharedEngineWithAppId
创建并初始化 ARtcEngineKit
对象。你需要将 YourAppID
替换为你的 anyRTC 项目的 App ID。详见获取App ID。
你还可以根据场景需要,在初始化时注册想要监听的回调事件。
Objective-C
// ViewController.m
- (void)initializeARkitEngine {
self.rtcKit = [ARtcEngineKit sharedEngineWithAppId:@"YourAppID" delegate:self];
}
4. 设置本地视图
在加入频道前设置本地视图,以便在通话中看到本地图像。参考以下步骤设置本地视图:
- 调用
enableVideo
方法启用视频模块。 - 调用
setupLocalVideo
方法设置本地视图。
Objective-C
// ViewController.m
- (void)setupLocalVideo {
// 启用视频模块
[self.rtcKit enableVideo];
ARtcVideoCanvas *videoCanvas = [[ARtcVideoCanvas alloc] init];
videoCanvas.uid = "0";
videoCanvas.renderMode = ARVideoRenderModeHidden;
videoCanvas.view = self.localView;
// 设置本地视图
[self.rtcKit setupLocalVideo:videoCanvas];
}
5. 加入频道
调用 joinChannelByToken
加入频道。
在 joinChannelByToken
中你需要将 YourToken
替换成你自己生成的 Token,并将 YourChannelName
替换为你生成 Token 时填入的频道名称。
- 在测试阶段,你可以直接在控制台生成临时 Token。加入频道时,请确保填入的频道名和生成临时 Token 时填入的频道名一致。
- 在生产环境,我们推荐你在自己的服务端生成 Token,详见在服务端生成 Token。加入频道时,请确保填入的频道名和 uid 与生成临时 Token 时填入的频道名和 uid 一致。
用户成功加入频道后,会默认订阅频道内其他所有用户的音频流和视频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的mute
方法实现。
Objective-C
// ViewController.m
- (void)joinChannel {
[self.rtcKit joinChannelByToken:@"YourToken" channelId:@"YourChannelName" uid:nil joinSuccess:^(NSString * _Nonnull channel, NSString * uid, NSInteger elapsed) {
}];
}
6. 设置远端视图
视频通话中,通常你也需要看到其他用户。
远端用户成功加入频道后,SDK 会触发 firstRemoteVideoDecodedOfUid
回调,该回调中会包含这个远端用户的 uid
信息。在该回调中调用 setupRemoteVideo
方法,传入获取到的 uid
,设置远端用户的视图。
Objective-C
// ViewController.m
// 监听 firstRemoteVideoDecodedOfUid 回调
// SDK 接收到第一帧远端视频并成功解码时,会触发该回调
- (void)rtcEngine:(ARtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSString *)uid size: (CGSize)size elapsed:(NSInteger)elapsed {
ARtcVideoCanvas *videoCanvas = [[ARtcVideoCanvas alloc] init];
videoCanvas.uid = uid;
videoCanvas.renderMode = ARVideoRenderModeHidden;
videoCanvas.view = self.remoteView;
// 设置远端视图
[self.rtcKit setupRemoteVideo:videoCanvas];
}
7. 离开频道
根据场景需要,如结束通话、关闭 app 或 app 切换至后台时,调用 leaveChannel
离开当前通话频道。
Objective-C
// ViewController.m
- (void)leaveChannel {
[self.rtcKit leaveChannel:nil];
}
8. 销毁 ARtcEngineKit 对象
离开频道后,如果你想释放 RTC SDK 使用的所有资源,需调用 destroy
销毁 ARtcEngineKit
对象。
Objective-C
// ViewController.m
// 将以下代码填入你定义的函数中
[ARtcEngineKit destroy];
运行项目
在运行项目前,你需要设置签名和开发团队,并添加设备权限。
1. 设置签名和开发团队
- 在 Xcode 中,进入 TARGETS > Project Name > Signing & Capabilities > Signing 菜单,勾选 Automatically manage signing。
- 仔细阅读弹窗提示,并点击 Enable Automatic。
- 成功设置签名后,在 Team 处选择你的开发团队。
2. 添加设备权限
在 Xcode 中,打开 info.plist
文件。在右侧列表中添加如下内容,获取相应的设备权限:
Key | Type | Value |
---|---|---|
Privacy - Microphone Usage Description | String | 使用麦克风的目的,例如:for a call or live interactive streaming。 |
Privacy - Camera Usage Description | String | 使用摄像头的目的,例如:for a call or live interactive streaming。 |