LiveUISDK 接入文档

一、功能简介

直播云iOS LiveUISDK在LiveCoreSDK基础上提供了教室模版,包括一对一教室、小班教室、大班教室。涵盖一对一及多人音视频互动、课件教学、多功能涂鸦绘制、文字聊天、多种教学小工具等功能。在此demo中,包含一套完整的教室UI和功能逻辑,快速接入。

二、产物拉取

直播云新架构iOS端的LiveUISDK、WCRLiveUIDemo等都托管于Github中。

三、Demo

1.运行demo

  • 使用终端命令cd进入代码根目录,执行命令pod install
  • 配置直播云为您分配的机构ID,以及您机构可用的Token
  • 使用Xcode打开文件WCRLiveUIDemo-iOS.xcworkspace
  • 目前仅支持真机调试,在运行前,请先设置证书信息。
  • 设置完成后,运行代码。

2.demo效果

  • 在demo的首页填写完参数后,点击进入教室,进入到教室页面。

3.demo下载

四、引入SDK

1.支持的设备和系统

支持iOS 9及以上,所有32、64位设备。但由于系统性能限制,建议使用设备为iPad4或以上机型,iPhone 6S或以上机型。

2.集成方式

支持Cocoapods方式集成和手动集成

Cocoapods方式集成

  • 添加WCRLiveUI依赖库,使用Cocoapods方式引入:

Podfile中设置source

source 'https://github.com/S-Freedom/WCRSpec.git'
source 'https://github.com/CocoaPods/Specs.git'

Podfile中引入依赖库

pod 'WCRLiveUI'

手动集成

  • 在工程中引入以下SDK,并设置为Embed&Sign WCRLiveUI.framework、ZegoAVKit2.framework 、RTCEngineDylib.framework、TXFFmpeg.xcframework 、 TXSoundTouch.xcframework

TXFFmpeg.xcframework TXSoundTouch.xcframework WCRLiveUI 、ZegoAVKit2、RTCEngineDylib

  • 通过Cocoapods添加其他依赖
  • 在工程目录下执行pod install

五、工程设置

1.关闭bitcode。在demo工程的Build Settings设置中搜索bitcode,关闭设置。(Cocoapods集成可忽略此项)

2.隐私设置。在Info.plist文件中添加麦克风、摄像头、相册访问权限。

Privacy - Microphone Usage Description       用于音视频
Privacy - Camera Usage Description           用于音视频,聊天拍照
Privacy - Photo Library Usage Description    用于聊天拍照
Privacy - Bluetooth Always Usage Description 用于使用蓝牙智能笔
Privacy - Bluetooth Peripheral Usage Description 用于使用蓝牙智能笔

3.设置APP后台任务。在demo工程中的Capabilties中开启。

六、创建教室

1、准备

  • 引入头文件 #import <WCRLiveUI/WCRLiveUI.h>

  • 定义liveRoomVc @property (nonatomic, strong) WCRBaseRoomViewController *liveRoomVc;

2、创建当前用户

创建类WCRUserInfo的实例,可以使用提供的初始化方法:

- (instancetype)initWithUID:(NSString *)uid
                      token:(nullable NSString *)token
                       name:(nullable NSString *)name
                     avatar:(nullable NSString *)avatar
                    groupId:(nullable NSString *)groupId
                       role:(WCRUserType)role
                       code:(nullable NSString *)code

其中必填字段为uidroletokencode字段二选一。

3、创建课程信息

创建类WCRClassInfo的实例,各个字段解释如下

/**
 必填 房间ID,最大32位的数字格式的字符串
 */
@property(nonatomic, copy) NSString* roomID;

/**
 必填 机构ID,直播云后台分配的机构ID
 */
@property(nonatomic, copy) NSString* appID;

/**
 课程名称,可以为空,建议填写
 */
@property(nonatomic, copy, nullable) NSString* classTitle;

/**
 必填,老师信息,上课必须有老师
 */
@property(nonatomic, copy, nullable) WCRUserInfo* teacher;

/**
 必填 房间类型,一对一、小班等
 */
@property(nonatomic, assign) WCRLiveRoomType roomType;

/**
 app名字,在提示打开麦克风摄像权限alert时需要展示,建议填写
 */
@property(nonatomic, copy) NSString* appName;

/**
 必填 课程状态
 */
@property(nonatomic, assign) WCRClassStatus classStatus;

/**
 回放类型,创建回放教室时必填,建议默认选择Video
 */
@property (nonatomic, assign) WCRRoomPlaybackMode playbackMode;

/**
 必填,教室在课堂开始前文档区域默认展现的html地址
 */
@property(nonatomic, copy) NSString* docUrlOnClassWaiting;

/**
 必填,教室在课中老师离开教室时文档区域默认展现的html地址
 */
@property(nonatomic, copy) NSString* docUrlOnTeacherLeave;

/**
必填 课表计划开课时间
 */
@property(nonatomic, copy) NSDate* schedualStartTime;

/**
必填 课表计划结束时间
 */
@property(nonatomic, copy) NSDate* schedualEndTime;

/**
 课程的实际开始时间,课前拿不到该时间可以不传,课中状态进入必须传
 */
@property(nonatomic, copy) NSDate* actualStartTime;

/**
 课程的实际结束时间,拿不到可以不传,如课程已经结束进教室必须传
 */
@property(nonatomic, copy) NSDate* actualEndTime;

/**
 离线资源相关信息,选填,若不为空,进入教室后会先下载相关资源,下载完成后再初始化消息信道与音视频相关功能
 */
@property (nonatomic, strong) WCRClassResourceModel *resourceModel;

/**
 教室内所有学生列表,小班课必填,其他班型不需要填
 */
@property(nonatomic,copy) NSArray<WCRUserInfo*> *students;

/**
必填 设置环境
 */
@property(nonatomic, assign) WCREnvironment env;


/**
 小组课组id, 小组课和同城双师课需要设置
 */
@property (nonatomic, strong) NSString *groupId;

/**
小组课组名字, 小组课和同城双师课需要设置
 */
@property (nonatomic, strong) NSString *groupName;

4、创建教室

调用类WCRBaseRoomViewController的创建方法

+ (instancetype)createWithClassInfo:(WCRClassInfo *)classInfo
                           userInfo:(WCRUserInfo *)userInfo
                        classConfig:(WCRClassConfigModel *)classConfig;

房间创建完成后,会自动进入教室。可监听回调:-roomDidJoin:获取进入教室结果。例如:

self.liveRoomVc = [WCRBaseRoomViewController createWithClassInfo:classInfo
                                                        userInfo:userInfo
                                                     classConfig:classConfig];

// 小组课和同城双师课需要设置课程Id
self.liveRoomVc.lessionId = 123456;

5、监听事件

设置delegate

self.liveRoomVc.delegate = self;

- (void)roomDidJoin:(NSError *)error{
//    监听进入教室结果
}

6、展示教室

当房间创建完成后,可调用展示Controller的方法,直接展示,例如:

[self presentViewController:liveRoomVc animated:YES completion:nil];

七、退出教室

调用接口 leaveRoom。可监听回调:-roomWillLeaveForReason:获取退出教室原因。例如:

[self.liveRoomVc leaveRoom];

- (void)roomWillLeaveForReason:(WCRLeaveClassRoomReason)reason{
    //离开教室原因
    //在这里可以做一些推出控制器的操作
    [self dismissViewControllerAnimated:YES completion:nil];
}

八、皮肤配置

创建类WCRClassConfigModel,并配置其中字段。目前支持涂鸦颜色配置、图标更换。

涂鸦颜色配置

设置doodleColorArray,暂时仅支持以下8种ARGB颜色,由于适配新老架构,只支持调整8种颜色顺序,不支持调整颜色数量。如:

NSArray *doodleColorArray = @[@0xffxd80000,
                              @0xffff8100,
                              @0xffff1400,
                              @0xff33d122,
                              @0xff02afe9,
                              @0xffa97b14,
                              @0xfff035b3,
                              @0xff000090];

更换图标

设置对应班型的SkinModel,具体参见SDK头文件。

九、Q&A

1. 是否支持模拟器?

由于底层SDK有不支持模拟器的,本教室SDK暂时不支持模拟器,如果APP里其他页面需要支持模拟器,可以使用宏隔离。如有强烈需要,请联系开发者。

2. iOS13加载不出图片?

acceptableContentTypes增加类型"application/octet-stream"

#import <AFNetworking/UIImageView+AFNetworking.h>
#import <AFNetworking/AFImageDownloader.h>
if (![UIImageView.sharedImageDownloader.sessionManager.responseSerializer.acceptableContentTypes containsObject:@"application/octet-stream"]) {

    NSMutableSet<NSString*>* acceptableContentTypes = UIImageView.sharedImageDownloader.sessionManager.responseSerializer.acceptableContentTypes.mutableCopy;

    [acceptableContentTypes addObject:@"application/octet-stream"];

    UIImageView.sharedImageDownloader.sessionManager.responseSerializer.acceptableContentTypes = acceptableContentTypes;

}

3. 上传App Store Connect时出现“Invalid Segment Alignment. The app binary at '.app/Frameworks/.framework/*' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version."

解决方法是生成binary的时候使用一段script来去掉那些不支持的结构。

在Xcode中选择项目->targets->Build Phases, 找到Embed Framework。

然后在Xcode的菜单栏Editor->Add Build Phase->Add Run Scrip Build Phase。

填入下面这段script

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

EXTRACTED_ARCHS=()

for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done

echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

results matching ""

    No results matching ""