开发环境要求
Xcode 14
前提条件
操作步骤
步骤一:创建新的应用
1. 登录 实时互动-教育版 控制台,左侧导航栏选择快速跑通应用。
2. 默认进入“创建应用”界面,应用类型可选择“创建新应用”,输入应用名称,例如 TestLCIC。
若您已创建应用,应用类型项可单击“选择已有应用”。
说明:
3. 根据实际业务需求添加或编辑标签 ,单击下一步。
![](https://qcloudimg.tencent-cloud.cn/image/document/1cd4a72addd0e8ad32750843d45b7fba.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/1cd4a72addd0e8ad32750843d45b7fba.png)
说明:
应用名称只允许下划线、数字或中英文字符。
标签用于标识和组织您在腾讯云的各种资源。例如:企业可能有多个业务部门,每个部门有一个或多个 LCIC 应用,这时,企业可以通过给 LCIC 应用添加标签来标记部门信息。标签并非必选项,您可根据实际业务需求添加或编辑。
步骤二:获取 SDKAppId 和密钥(SecretKey)
1. 进入应用管理 > 应用配置,获取 SDKAppId 。
2. 进入 访问管理(CAM)控制台 获取密钥,若无密钥,需要在 API 密钥管理中进行新建,具体可参考 访问密钥管理 。
![](https://qcloudimg.tencent-cloud.cn/image/document/1626eee68ff30096864b0672ef5e0f30.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/1626eee68ff30096864b0672ef5e0f30.png)
步骤三:导入 SDK
pod 集成 SDK
LCIC SDK 已经发布到 cocoapods 库,您可以通过配置 podfile 下载安装。
pod 'TCICSDK_Pro', '1.8.4.1' pod 'TXLiteAVSDK_Professional', '11.6.15041'
步骤四:配置 App 权限
在主 App 的 info.plist 中配置 App 的权限,LCIC SDK 需要以下权限:
<key>NSCameraUsageDescription</key><key>NSMicrophoneUsageDescription</key><key>NSPhotoLibraryAddUsageDescription</key><key>NSPhotoLibraryUsageDescription</key>
步骤五:环境参数设置
在启动课堂前可设置相关环境参数,如语言、域名等参数,设置如下:
// 设置课堂域名,默认域名为:class.qcloudclass.com// targetDomain 必须为腾讯提供域名[TCICClassController setDomain:targetDomain];// 设置H5端版本号,默认为:"latest"。一般情况不需要调[TCICClassController setH5Version:targetVersion];// 设置课堂语言类型,默认为中文: "zh"[TCICClassController setClassLanuage:[msgDic objectForKey:@"lng"]];// 预加载逻辑需要放在最后,前面的调用都会清除预加载内容[TCICClassController preloadClass];
步骤六:获取进入课堂所需参数
2. 通过云 API 接口 CreateRoom 创建课堂,可以获取到课堂号(classid)信息。
3. 通过调用云 API 接口 RegisterUser 注册用户,可以获取到对应的用户 ID(userid)信息。
4. 通过云 API 接口 LoginUser 登录,可以获取到用户鉴权 token 信息。
5. scene、lng、camera、mic、speaker 为非必要参数,如果不设置则使用的是默认值。
字段 | 类型 | 含义 | 备注 | 必填 |
schoolId | int | 学校编号 | 是 | |
classId | long | 课堂编号 | 是 | |
userId | string | 用户账号 | 是 | |
token | string | 后台鉴权参数 | 是 | |
scene | string | 场景名称 | [roomConfig setValue:@"scene_name" forKey:@"scene"]; | 否 |
lng | string | 语言参数 | 可传入zh-Hans、en,默认为中文(zh-Hans)。可通过此接口设置 [roomConfig setValue:@"en" forKey:@"language"]; | 否 |
camera | int | 初始化开启摄像头 | 1为开启摄像头,0为关闭摄像头,可通过roomConfig.jsParams 设置 | 否 |
mic | int | 初始化开启麦克风 | 1为开启麦克风,0为关闭麦克风,可通过roomConfig.jsParams 设置 | 否 |
speaker | int | 初始化开启扬声器 | 1为开启扬声器,0为关闭扬声器,可通过roomConfig.jsParams 设置 | 否 |
步骤七:调起组件主页面
只需传递 4 个参数就可调起 LCIC 组件主页面,分别为学校编号、课堂编号、用户账号和 token。
TCICClassConfig *roomConfig = [[TCICClassConfig alloc] init];roomConfig.schoolId = 123456;roomConfig.userId = "test";roomConfig.token = "test_token";roomConfig.classId = 654321;[roomConfig setValue:@"en" forKey:@"language"]; //语言设置,可选[roomConfig setValue:@"scene_name" forKey:@"scene"]; //可根据场景配置不同的定制,可选[roomConfig setValue:@(0) forKey:@"preferPortrait"]; //默认横屏,可选(0 是横屏,1是竖屏)TCICClassController *vc = [TCICClassController classRoomWithConfig:roomConfig];if (vc) {[(UINavigationController *)self.window.rootViewController pushViewController:vc animated:YES];}else {NSLog(@"参数有误");}
如果您需要监听退出课堂通知,可以通过注册 TCICExitClassRoomCompleteNotify 的本地广播,参见如下代码:
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(yourselector)name:@"TCICExitClassRoomCompleteNotify" object:nil];
步骤八:SDK 授权申请
注意:
一个旗舰版仅支持授权一个正式包名,请确认无误后发送相关信息。
说明:
包名用于快直播播放器签名授权,请提供所需授权的正式应用的 App Name、Package Name 和 Bundle ID 信息。
标题
实时互动-教育版 iOS SDK 授权申请
内容
公司名称:xxx 有限公司
个人姓名:
联系方式:
App Name:
Package Name (Android):
Bundle ID (iOS):
高级功能
移动端屏幕分享
1. 创建
App Group
, 参见 TRTC 官网文档 > 步骤 1:创建 App Group。2. 创建
Broadcast Upload Extension
,参见 TRTC 官网文档 > 步骤 2:创建 Broadcast Upload Extension。3. 为新创建的
Target
,依赖依赖 TCICSDK_ReplayKit
,如下,之后重新 pod install
即可。target '新target名' do# Comment the next line if you don't want to use dynamic frameworks# use_frameworks!pod 'TCICSDK_Pro_ReplayKit'end
4. 添加下列代码复制到
SampleHandler.m
中,将 APPGROUP
改为第 1 步创建的 App Group
。#import "SampleHandler.h"#import <TXLiteAVSDK_ReplayKitExt/TXLiteAVSDK_ReplayKitExt.h>#import <TCICScreenKit/TCICScreenKit.h>// 注意:此处的 APPGROUP 需要改成上文中的创建的 App Group Identifier。#define APPGROUP ""@interface SampleHandler() <TXReplayKitExtDelegate>@end@implementation SampleHandler- (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo {[[TXReplayKitExt sharedInstance] setupWithAppGroup:APPGROUP delegate:self];[[TCICScreenKit sharedScreenKit] onScreenKitStarted];}- (void)broadcastPaused {// User has requested to pause the broadcast. Samples will stop being delivered.[[TCICScreenKit sharedScreenKit] onScreenKitPaused];}- (void)broadcastResumed {// User has requested to resume the broadcast. Samples delivery will resume.[[TCICScreenKit sharedScreenKit] onScreenKitResumed];}- (void)broadcastFinished {[[TXReplayKitExt sharedInstance] finishBroadcast];// User has requested to finish the broadcast.[[TCICScreenKit sharedScreenKit] onScreenKitFinished];}#pragma mark - TXReplayKitExtDelegate- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason{NSString *tip = @"";switch (reason) {case TXReplayKitExtReasonRequestedByMain:tip = @"屏幕共享已结束";break;case TXReplayKitExtReasonDisconnected:tip = @"应用断开";break;case TXReplayKitExtReasonVersionMismatch:tip = @"集成错误(SDK 版本号不相符合)";break;}NSError *error = [NSError errorWithDomain:NSStringFromClass(self.class) code:0 userInfo:@{NSLocalizedFailureReasonErrorKey:tip}];[self finishBroadcastWithError:error];}- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType: (RPSampleBufferType)sampleBufferType {switch (sampleBufferType) {case RPSampleBufferTypeVideo:[[TXReplayKitExt sharedInstance] sendVideoSampleBuffer:sampleBuffer];break;case RPSampleBufferTypeAudioApp:// Handle audio sample buffer for app audiobreak;case RPSampleBufferTypeAudioMic:// Handle audio sample buffer for mic audiobreak;default:break;}}@end
5. 对接主 App 端的接收逻辑:目前主 App 中的使用 TCICSDK,已支持系统屏幕分享相关逻辑,只需要业务方配置好 App Group 即可,且在进入课堂前,设置 AppGroup 即可。
TCICClassConfig *roomConfig = [[TCICClassConfig alloc] init];roomConfig.userId = "test";roomConfig.token = "test_token";roomConfig.classId = 123454;roomConfig.schoolId = xxxxx;// 通过KVC方式设置AppGroup[roomConfig setValue:@"group.com.xx.xxxx" forKey:@"appGroup"];
注意事项
1. TCICSDK 中已支持屏幕分享的触发按钮,具体可参见 TRTC 官网文档 > 步骤 4:增加屏幕分享的触发按钮(可选),但该功能有限制条件。
1.1 屏幕分享的触发按钮只支持 iOS12 以上,同时需要创建的工程,不依赖 Scene 生命周期,如果代码中已支持
Scenedelegate
,可参见 Xcode 11 删除 Scenedelegate,进行移除。以 Demo 为例,弹出效果如下,单击开始直播即可。![](https://qcloudimg.tencent-cloud.cn/image/document/91b55ba78de30be349514ea944685d2b.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/91b55ba78de30be349514ea944685d2b.png)
1.2 对于 iOS11 的机型,需要业务侧引导用户从远程控制中长按录屏进行触发,并选择业务自创建的
Broadcast Upload Extension
进行触发,下图以腾讯会议为例:![](https://qcloudimg.tencent-cloud.cn/image/document/63ebef00764e1981e99568344f4c51d0.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/63ebef00764e1981e99568344f4c51d0.png)
2. 创建的
Upload Extension
的 Deployment target
配置在 iOS 11.0
(Replay Kit
于 iOS11
才开始支持),调试时真机也尽量在 iOS11
之后。3. 主 App 要支持系统级屏幕分享,需要添加
Background Modes
。![](https://qcloudimg.tencent-cloud.cn/image/document/7003494e0d53cd41a9dd2559184b1966.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/7003494e0d53cd41a9dd2559184b1966.png)
其它文档
我们建议您在使用 LCICSDK 时,同时也接入腾讯 Bugly,帮助您快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。 接入指南参见 腾讯 Bugly 官网。
参见 开发 Demo。