跳到主要内容

iOS SDK (Objective-C)

基于 LiveKit 的 TgoRTC iOS (Objective-C) SDK,用于实时音视频通讯。SDK 通过 Swift Bridge 提供 Objective-C 兼容的接口。

安装与配置

1. 添加 SPM 依赖

  1. 在 Xcode 中,选择 File → Add Packages...
  2. 输入以下仓库地址:
    https://github.com/TgoRTC/TgoRTCiOS
  3. Dependency Rule 中选择 Branch: main
  4. 点击 Add Package,并勾选 TgoRTCSDK

2. 创建 Swift 桥接文件 (可选)

由于 SDK 使用 Swift 编写,Objective-C 项目通常需要一个桥接头文件。

  1. 在项目中新建一个 Swift 文件(如 TgoBridge.swift)。
  2. 当 Xcode 询问是否创建 Bridging Header 时,点击 Create Bridging Header
  3. 在需要使用 SDK 的 Objective-C 文件中导入生成的头文件:
    #import "YourProjectName-Swift.h"

3. Build Settings 配置

确保以下设置已正确配置:

  • Defines Module: Yes
  • Swift Language Version: Swift 5 或更高

快速开始

1. 初始化 SDK

TgoOptionsObjC *options = [[TgoOptionsObjC alloc] init];
options.isDebug = YES;
options.mirror = NO;

[[TgoRTCBridge shared] configureWithO:options];

2. 创建房间信息并加入

TgoRoomInfoObjC *roomInfo = [[TgoRoomInfoObjC alloc] init];
roomInfo.roomName = @"room-name";
roomInfo.token = @"your-token";
roomInfo.url = @"wss://your-server";
roomInfo.loginUID = @"local-user-id";
roomInfo.rtcType = TgoRTCTypeObjCVideo;

// 加入房间
[[TgoRTCBridge shared].room joinWithRoomInfo:roomInfo
micEnabled:YES
cameraEnabled:YES
completion:^(BOOL success) {
if (success) {
NSLog(@"加入房间成功");
}
}];

3. 监听连接状态 (Delegate)

// 设置代理
[TgoRTCBridge shared].room.delegate = self;

// 实现代理方法
- (void)room:(NSString *)roomName didChangeStatus:(TgoConnectStatusObjC)status {
switch (status) {
case TgoConnectStatusObjCConnected:
NSLog(@"已连接到房间: %@", roomName);
break;
case TgoConnectStatusObjCDisconnected:
NSLog(@"连接已断开");
break;
case TgoConnectStatusObjCConnecting:
NSLog(@"正在连接...");
break;
}
}

4. 获取参与者

// 获取本地参与者
TgoParticipantBridge *local = [[TgoRTCBridge shared] getLocalParticipant];

// 获取所有远程参与者
NSArray<TgoParticipantBridge *> *remotes = [[TgoRTCBridge shared] getRemoteParticipantsWithIncludeTimeout:NO];

// 监听新参与者加入 (通过全局代理)
[TgoRTCBridge shared].participantDelegate = self;

- (void)participantDidJoin:(TgoParticipantBridge *)participant {
NSLog(@"新用户加入: %@", participant.uid);
}

5. 媒体控制与事件

TgoParticipantBridge *local = [[TgoRTCBridge shared] getLocalParticipant];

// ========== 媒体控制 (仅本地) ==========

// 开启/关闭麦克风
[local setMicrophoneEnabled:YES completion:nil];

// 开启/关闭摄像头
[local setCameraEnabled:YES completion:nil];

// 切换前后摄像头
[local switchCamera];

// ========== 状态监听 (Delegate) ==========

local.delegate = self;

- (void)participant:(TgoParticipantBridge *)participant didUpdateMicrophoneOn:(BOOL)isOn {
NSLog(@"用户 %@ 麦克风状态: %@", participant.uid, isOn ? @"开" : @"关");
}

- (void)participant:(TgoParticipantBridge *)participant didUpdateSpeaking:(BOOL)isSpeaking {
NSLog(@"用户 %@ 正在说话: %@", participant.uid, isSpeaking ? @"是" : @"否");
}

6. 渲染视频轨道 (UIKit)

在 Objective-C 中,推荐使用 TgoVideoView (基于 UIKit) 进行渲染。

// 1. 创建视频视图
self.videoView = [[TgoVideoView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
[self.view addSubview:self.videoView];

// 2. 将参与者视频附加到视图上
TgoParticipantBridge *participant = ...;
[participant attachCameraTo:self.videoView];

// 3. 配置视图
[self.videoView setLayoutMode:TgoVideoLayoutModeFill];
[self.videoView setMirrorMode:TgoVideoMirrorModeMirror]; // 本地视频建议镜像

7. 音频管理

// 切换扬声器/听筒
[[TgoRTCBridge shared].audio toggleSpeakerphoneWithCompletion:nil];

// 获取输出设备列表
[[TgoRTCBridge shared].audio getAudioOutputDevicesWithCompletion:^(NSArray<TgoAudioOutputDeviceObjC *> *devices) {
for (TgoAudioOutputDeviceObjC *device in devices) {
NSLog(@"发现音频设备: %@ (类型: %@)", device.name, device.typeString);
}
}];

8. 离开房间

[[TgoRTCBridge shared].room leaveRoomWithCompletion:^{
NSLog(@"已离开房间");
}];

API 参考

TgoRTCBridge (Objective-C 入口)

属性类型描述
sharedTgoRTCBridge单例实例
roomTgoRoomBridge房间管理
audioTgoAudioBridge音频管理
participantDelegateid<TgoParticipantDelegateObjC>全局参与者事件代理

TgoParticipantBridge

属性类型描述
uidNSString *用户唯一 ID
isMicrophoneOnBOOL麦克风状态
isCameraOnBOOL摄像头状态
isSpeakingBOOL是否正在说话
isJoinedBOOL是否已加入
videoInfoTgoVideoInfoObjC *视频流信息 (分辨率/码率)

平台配置

权限设置 (Info.plist)

<key>NSCameraUsageDescription</key>
<string>需要访问摄像头进行视频通话</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风进行语音通话</string>