|
|
|
|
|
# 1.概述
|
|
|
|
|
|
## 1.1 阅读对象
|
... | ... | @@ -9,7 +8,7 @@ |
|
|
- 准备接入CC视频的直播SDK相关功能
|
|
|
- 对CC云直播产品使用方法有基础的了解,[使用帮助地址](https://doc.bokecc.com/live/)
|
|
|
|
|
|
## 1.2 功能特性
|
|
|
##1.2 功能特性
|
|
|
|
|
|
| 功能 | 描述 |
|
|
|
| -------- | ---------------------------------------- |
|
... | ... | @@ -35,10 +34,11 @@ |
|
|
|
|
|
## 2.1 开发环境
|
|
|
|
|
|
- Xcode : Xcode 开发IDE
|
|
|
- Version 10.0 及以上
|
|
|
- Xcode 10.0 或以上版本
|
|
|
- 支持 iOS 9.0 或以上版本的 iOS 设备
|
|
|
- 有效的 获得场景视频 云直播账号
|
|
|
|
|
|
## 2.2 SDK配置
|
|
|
##2.2 SDK配置
|
|
|
|
|
|
### 2.2.1 CocoaPods集成
|
|
|
|
... | ... | @@ -52,7 +52,7 @@ v3.11.2 之前的版本请用如下链接: |
|
|
pod 'CCLivePlaySDK', :podspec => 'https://raw.githubusercontent.com/CCVideo/Live_iOS_Play_SDK/3.8.0/CCLivePlaySDK.podspec'
|
|
|
v3.11.2 之后的版本请用如下链接:
|
|
|
pod 'CCLivePlaySDK', :podspec => 'https://hdgit.bokecc.com/ccvideo/Live_iOS_Play_SDK/raw/3.11.2/CCLivePlaySDK.podspec'
|
|
|
|
|
|
|
|
|
PS:其中3.8.0与3.11.2为SDK版本号可自行更改。
|
|
|
```
|
|
|
|
... | ... | @@ -178,13 +178,13 @@ PS:其中3.8.0与3.11.2为SDK版本号可自行更改。 |
|
|
```
|
|
|
|
|
|
2. 在Podfile文件中添加
|
|
|
|
|
|
```
|
|
|
如果是有连麦的SDK:
|
|
|
pod 'CCLivePlaySDK', '~> 3.8.0'
|
|
|
如果是无连麦的SDK:
|
|
|
v3.11.2 之前的版本请用如下链接:
|
|
|
pod 'CCLivePlaySDK', :podspec =>
|
|
|
'https://raw.githubusercontent.com/CCVideo/Live_iOS_Play_SDK/3.8.0/CCLivePlaySDK.podspec'
|
|
|
pod 'CCLivePlaySDK', :podspec => 'https://raw.githubusercontent.com/CCVideo/Live_iOS_Play_SDK/3.8.0/CCLivePlaySDK.podspec'
|
|
|
v3.11.2 之后的版本请用如下链接:
|
|
|
pod 'CCLivePlaySDK', :podspec => 'https://hdgit.bokecc.com/ccvideo/Live_iOS_Play_SDK/raw/3.11.2/CCLivePlaySDK.podspec'
|
|
|
|
... | ... | @@ -201,7 +201,7 @@ PS:其中3.8.0与3.11.2为SDK版本号可自行更改。 |
|
|
|
|
|
|
|
|
|
|
|
### 2.2.2 手动集成
|
|
|
###2.2.2 手动集成
|
|
|
|
|
|
1.将SDK文件夹内的所有文件拖到项目中
|
|
|
|
... | ... | @@ -224,9 +224,9 @@ Destination 选择 "Frameworks" -> |
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2.3 日志存储
|
|
|
##2.3 日志存储
|
|
|
|
|
|
在AppDelegate.m文件导入头文件
|
|
|
|
... | ... | @@ -281,6 +281,62 @@ Destination 选择 "Frameworks" -> |
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 2.5 打包上线报错
|
|
|
|
|
|
打包上线过程出现以下错误,关于不支持 x86_64 和 i386 等情况.
|
|
|
|
|
|
```
|
|
|
The following issues occurred while distributing your application.
|
|
|
|
|
|
App Store Connect Operation Error
|
|
|
ERROR ITMS-90097:"Unsupported Architectures. The executable for CCLiveCloud.app/Frameworks/CCSDK.framework contains unsupported architectures '[x86_64]."
|
|
|
|
|
|
App Store Connect Operation Error
|
|
|
ERROR ITMS-90097:"Unsupported Architectures. The executable for CCLiveCloud.app/Frameworks/DWDrmServer.framework contains unsupported architectures '[x86_64]."
|
|
|
|
|
|
App Store Connect Operation Error
|
|
|
ERROR ITMS-90097:"Unsupported Architectures. The executable for CCLiveCloud.app/Frameworks/IJKMediaFramework.framework contains unsupported architectures '[x86_64]."
|
|
|
|
|
|
App Store Connect Operation Error
|
|
|
ERROR ITMS-90097:"Unsupported Architectures. The executable for CCLiveCloud.app/Frameworks/WebRTC.framework contains unsupported architectures '[x86_64,i386]."
|
|
|
```
|
|
|
|
|
|
解决方案: Target --> Build Phases --> 点击"+"按钮,选择"New Run Script Phase",在 Run 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
|
|
|
```
|
|
|
|
|
|
添加上之后,重新打包上线即可.
|
|
|
|
|
|
# 3.快速集成
|
|
|
|
|
|
## 3.1 配置参数
|
... | ... | @@ -313,7 +369,12 @@ Destination 选择 "Frameworks" -> |
|
|
* 必填参数 scalingMode; //屏幕适配方式
|
|
|
* (已弃用!) security //是否使用https
|
|
|
* 必填参数 defaultColor; //ppt默认底色,不写默认为白色
|
|
|
* 必填参数 PPTScalingMode; //PPT适配方式 PPT适配模式分为四种,1.一种是全部填充屏幕,可拉伸变形,2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边,3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边,4.根据直播间文档显示模式的返回值进行设置(推荐)(The New Method)
|
|
|
* 必填参数 PPTScalingMode; //PPT适配方式
|
|
|
PPT适配模式分为四种,
|
|
|
1.拉伸填充,PPT内容全部展示在显示区域,会被拉伸或压缩,不会存在黑边
|
|
|
2.等比居中,PPT内容保持原始比例,适应窗口展示在显示区域,会存在黑边
|
|
|
3.等比填充,PPT内容保持原始比例,以横向或纵向适应显示区域,另一方向将会超出显示区域,超出部分会被裁减,不会存在黑边
|
|
|
4.根据直播间文档显示模式的返回值进行设置(推荐)
|
|
|
* 必填参数 pauseInBackGround; //后台是否继续播放,注意:如果开启后台播放需要打开 xcode->Capabilities->Background Modes->on->Audio,AirPlay,and Picture in Picture
|
|
|
* (选填参数)viewercustomua; //用户自定义参数,需和后台协商,没有定制传@""
|
|
|
*/
|
... | ... | @@ -420,11 +481,12 @@ Destination 选择 "Frameworks" -> |
|
|
*/
|
|
|
@property(nonatomic,assign)BOOL pauseInBackGround;//后台是否继续播放,注意:如果开启后台播放需要打开 xcode->Capabilities->Background Modes->on->Audio,AirPlay,and Picture in Picture
|
|
|
/**
|
|
|
* @brief PPT适配模式分为四种,
|
|
|
* 1.一种是全部填充屏幕,可拉伸变形,
|
|
|
* 2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边,
|
|
|
* 3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边
|
|
|
* 4.根据直播间文档显示模式的返回值进行设置(推荐)
|
|
|
* @brief PPT适配模式分为四种
|
|
|
* PPT适配模式分为四种,
|
|
|
* 1.拉伸填充,PPT内容全部展示在显示区域,会被拉伸或压缩,不会存在黑边
|
|
|
* 2.等比居中,PPT内容保持原始比例,适应窗口展示在显示区域,会存在黑边
|
|
|
* 3.等比填充,PPT内容保持原始比例,以横向或纵向适应显示区域,另一方向将会超出显示区域,超出部分会被裁减,不会存在黑边
|
|
|
* 4.根据直播间文档显示模式的返回值进行设置(推荐)
|
|
|
*/
|
|
|
@property(assign, nonatomic)NSInteger PPTScalingMode;//PPT适配方式,含义见上面
|
|
|
/**
|
... | ... | @@ -442,6 +504,55 @@ Destination 选择 "Frameworks" -> |
|
|
* 使用聊天分组功能时传入,不使用可以不传
|
|
|
*/
|
|
|
@property(copy, nonatomic)NSString *groupid;
|
|
|
|
|
|
```
|
|
|
|
|
|
新增 RemindModel 类 (用户进出直播间代理模型类)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* 用户进出通知
|
|
|
* HDUSER_IN_REMIND 进入直播间
|
|
|
* HDUSER_OUT_REMIND 退出直播间
|
|
|
*/
|
|
|
typedef NS_ENUM(NSUInteger, HDUSER_REMIND) {
|
|
|
HDUSER_IN_REMIND,//进入直播间
|
|
|
HDUSER_OUT_REMIND,//退出直播间
|
|
|
};
|
|
|
|
|
|
/** 用户id */
|
|
|
@property (nonatomic, copy) NSString *userId;
|
|
|
/** 昵称 */
|
|
|
@property (nonatomic, copy) NSString *userName;
|
|
|
/** 角色 */
|
|
|
@property (nonatomic, copy) NSString *userRole;
|
|
|
/** 头像 */
|
|
|
@property (nonatomic, copy) NSString *userAvatar;
|
|
|
/** 分组id */
|
|
|
@property (nonatomic, copy) NSString *groupId;
|
|
|
/** 接收端 1-讲师;2-助教;3-主持人;4-观看端 */
|
|
|
@property (nonatomic, strong) NSArray *clientType;
|
|
|
/** 用户进出通知 */
|
|
|
@property (nonatomic, assign) HDUSER_REMIND remindType;
|
|
|
/** 发送内容前缀 */
|
|
|
@property (nonatomic, copy) NSString *prefixContent;
|
|
|
/** 发送内容后缀 */
|
|
|
@property (nonatomic, copy) NSString *suffixContent;
|
|
|
|
|
|
```
|
|
|
新增 BanChatModel 类(用户禁言群发消息通知模型类)
|
|
|
|
|
|
```
|
|
|
/** 用户id */
|
|
|
@property (nonatomic, copy) NSString *userId;
|
|
|
/** 昵称 */
|
|
|
@property (nonatomic, copy) NSString *userName;
|
|
|
/** 角色 */
|
|
|
@property (nonatomic, copy) NSString *userRole;
|
|
|
/** 头像 */
|
|
|
@property (nonatomic, copy) NSString *userAvatar;
|
|
|
/** 分组id */
|
|
|
@property (nonatomic, copy) NSString *groupId;
|
|
|
```
|
|
|
|
|
|
开始配置
|
... | ... | @@ -562,6 +673,21 @@ Destination 选择 "Frameworks" -> |
|
|
* rseult playing/paused/loading/buffing
|
|
|
*/
|
|
|
-(void)videoStateChangeWithString:(NSString *) result;
|
|
|
/**
|
|
|
* @brief 获取直播开始时间和直播时长
|
|
|
* liveDuration 直播持续时间,单位(s),直播未开始返回-1"
|
|
|
* liveStartTime 新增开始直播时间(格式:yyyy-MM-dd HH:mm:ss),如果直播未开始,则返回空字符串
|
|
|
*/
|
|
|
- (void)startTimeAndDurationLiveBroadcast:(NSDictionary *)dataDic;
|
|
|
/**
|
|
|
* @brief 回调已播放时长, 如果未开始,则time为-1
|
|
|
* 触发此方法需要调用getLivePlayedTime
|
|
|
*/
|
|
|
- (void)onLivePlayedTime:(NSDictionary *)dic;
|
|
|
/**
|
|
|
获取已播放时长,调用后会响应onLivePlayedTime方法,调用间隔三秒
|
|
|
*/
|
|
|
- (void)getLivePlayedTime;
|
|
|
```
|
|
|
|
|
|
3.2.2 主动方法(可选)
|
... | ... | @@ -616,21 +742,6 @@ Destination 选择 "Frameworks" -> |
|
|
* @brief 销毁文档和视频,清除视频和文档的时候需要调用,退出播放页面的时候也需要调用
|
|
|
*/
|
|
|
- (void)requestCancel;
|
|
|
/**
|
|
|
* @brief 获取直播开始时间和直播时长
|
|
|
* liveDuration 直播持续时间,单位(s),直播未开始返回-1"
|
|
|
* liveStartTime 新增开始直播时间(格式:yyyy-MM-dd HH:mm:ss),如果直播未开始,则返回空字符串
|
|
|
*/
|
|
|
- (void)startTimeAndDurationLiveBroadcast:(NSDictionary *)dataDic;
|
|
|
/**
|
|
|
获取已播放时长,调用后会响应onLivePlayedTime方法,调用间隔三秒
|
|
|
*/
|
|
|
- (void)getLivePlayedTime;
|
|
|
/**
|
|
|
* @brief 回调已播放时长, 如果未开始,则time为-1
|
|
|
* 触发此方法需要调用getLivePlayedTime
|
|
|
*/
|
|
|
- (void)onLivePlayedTime:(NSDictionary *)dic;
|
|
|
```
|
|
|
|
|
|
## 3.3 文档功能
|
... | ... | @@ -644,7 +755,7 @@ Destination 选择 "Frameworks" -> |
|
|
- (void)getDocAspectRatioOfWidth:(CGFloat)width height:(CGFloat)height;
|
|
|
|
|
|
/**
|
|
|
* @brief 获取ppt当前页数和总页数(The new method)
|
|
|
* @brief 获取ppt当前页数和总页数 (会多次回调)
|
|
|
*
|
|
|
* 回调当前翻页的页数信息
|
|
|
* 白板docTotalPage一直为0, pageNum从1开始
|
... | ... | @@ -738,12 +849,30 @@ Destination 选择 "Frameworks" -> |
|
|
* 获取ppt列表(只能在登陆成功后调用)
|
|
|
*/
|
|
|
- (void)getDocsList;
|
|
|
|
|
|
/**
|
|
|
* @brief 主动调用方法 用于调整PPT缩放模式 (已废弃)
|
|
|
* @param docFrame 文档的frame
|
|
|
* @param PPTScalingMode PPT缩放模式
|
|
|
* 1 = 拉伸填充:PPT内容全部展示在显示区域,会被拉伸或压缩,不会存在黑边
|
|
|
* 2 = 等比居中:PPT内容保持原始比例,适应窗口展示在显示区域,会存在黑边
|
|
|
* 3 = 等比填充:PPT内容保持原始比例,以横向或纵向适应显示区域,另一方向将会超出显示区域,超出部分会被裁减,不会存在黑边
|
|
|
*
|
|
|
* 需要调整docFrame 请直接调用 - (void)changeDocFrame:(CGRect)docFrame;方法
|
|
|
*/
|
|
|
- (void)changeDocFrame:(CGRect)docFrame withPPTScalingMode:(NSInteger)PPTScalingMode;
|
|
|
/**
|
|
|
* @brief 主动调用方法 用于调整PPT缩放模式
|
|
|
* @param pptScalingMode PPT缩放模式
|
|
|
* 1 = 拉伸填充:PPT内容全部展示在显示区域,会被拉伸或压缩,不会存在黑边
|
|
|
* 2 = 等比居中:PPT内容保持原始比例,适应窗口展示在显示区域,会存在黑边
|
|
|
* 3 = 等比填充:PPT内容保持原始比例,以横向或纵向适应显示区域,另一方向将会超出显示区域,超出部分会被裁减,不会存在黑边
|
|
|
*/
|
|
|
- (void)changeDocPPTScalingMode:(NSInteger)pptScalingMode;
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 3.4 房间信息
|
|
|
##3.4 房间信息
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
... | ... | @@ -792,7 +921,7 @@ Destination 选择 "Frameworks" -> |
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 历史聊天数据
|
|
|
* @brief 历史聊天数据 (会多次回调)
|
|
|
* @param chatLogArr [{ chatId //聊天ID
|
|
|
content //聊天内容
|
|
|
groupId //聊天组ID
|
... | ... | @@ -865,6 +994,11 @@ Destination 选择 "Frameworks" -> |
|
|
* chatIds 聊天消息的id列列表
|
|
|
*/
|
|
|
-(void)chatLogManage:(NSDictionary *) manageDic;
|
|
|
/**
|
|
|
* @brief 禁言用户提示
|
|
|
* @param model BanChatModel 详情
|
|
|
*/
|
|
|
- (void)HDBanChatBroadcastWithModel:(BanChatModel *)model;
|
|
|
```
|
|
|
|
|
|
主动方法(可选)
|
... | ... | @@ -916,7 +1050,7 @@ Destination 选择 "Frameworks" -> |
|
|
*/
|
|
|
- (void)onAnswerDic:(NSDictionary *)answerDic;
|
|
|
/**
|
|
|
* @brief 收到历史提问&回答
|
|
|
* @brief 收到历史提问&回答 (会多次回调)
|
|
|
* @param questionArr [{content //问答内容
|
|
|
encryptId //加密ID
|
|
|
groupId //分组ID
|
... | ... | @@ -937,7 +1071,7 @@ Destination 选择 "Frameworks" -> |
|
|
*/
|
|
|
- (void)onQuestionArr:(NSArray *)questionArr onAnswerArr:(NSArray *)answerArr;
|
|
|
/**
|
|
|
* @brief 发布问题的ID
|
|
|
* @brief 发布问答的id
|
|
|
*/
|
|
|
- (void)publish_question:(NSString *)publishId;
|
|
|
```
|
... | ... | @@ -1057,6 +1191,8 @@ Destination 选择 "Frameworks" -> |
|
|
|
|
|
## 3.9 答题卡功能
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 开始答题
|
... | ... | @@ -1095,6 +1231,7 @@ Destination 选择 "Frameworks" -> |
|
|
"punchId": "punchId",
|
|
|
"expireTime": "2019-10-26 10:00:00",
|
|
|
"remainDuration": 124
|
|
|
"tips" // 没有提示语则不返回该字段 (新增)
|
|
|
}
|
|
|
* 当没有设置时长,即无过期时间时
|
|
|
* {
|
... | ... | @@ -1112,6 +1249,9 @@ Destination 选择 "Frameworks" -> |
|
|
-(void)hdReceivedEndPunchWithDict:(NSDictionary *)dic;
|
|
|
```
|
|
|
|
|
|
主动方法(可选)
|
|
|
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 答单选题
|
... | ... | @@ -1198,7 +1338,7 @@ Destination 选择 "Frameworks" -> |
|
|
*/
|
|
|
- (void)broadcast_msg:(NSDictionary *)dic;
|
|
|
/**
|
|
|
* @brief 接收到最后一条广播(直播中途进入,会返回最后一条广播)
|
|
|
* @brief 接收到最后一条广播(直播中途进入,会返回最后一条广播)(会多次回调)
|
|
|
* @param array[{ content //广播内容
|
|
|
publisherId //发布者ID
|
|
|
publisherName //发布者名字
|
... | ... | @@ -1207,6 +1347,15 @@ Destination 选择 "Frameworks" -> |
|
|
}]
|
|
|
*/
|
|
|
- (void)broadcastLast_msg:(NSArray *)array;
|
|
|
|
|
|
/**
|
|
|
* @brief 删除广播
|
|
|
* @param dic 删除数据
|
|
|
dic {action //操作 1.删除
|
|
|
id //广播id }
|
|
|
*/
|
|
|
- (void)broadcast_delete:(NSDictionary *)dic;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
... | ... | @@ -1326,60 +1475,75 @@ Destination 选择 "Frameworks" -> |
|
|
|
|
|
|
|
|
|
|
|
## 3.16 随堂测功能
|
|
|
##3.16 随堂测功能
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 接收到随堂测(The new method)
|
|
|
* @brief 接收到随堂测
|
|
|
* rseultDic 随堂测内容
|
|
|
resultDic {isExist //1 随堂考存在 0随堂考不存在
|
|
|
practice {id //随堂考主键ID
|
|
|
isAnswered //false 未回答过 true 回答过
|
|
|
options = ({ id //选项主键ID
|
|
|
index //选项序号})
|
|
|
publishTime //发布时间
|
|
|
status //发布状态 1开启 0关闭
|
|
|
type //题目类型 0判断 1单选 2多选}
|
|
|
serverTime //分发时间}
|
|
|
resultDic {
|
|
|
isExist //是否存在正在发布的随堂测 1 存在 0 不存在
|
|
|
practice{
|
|
|
id //随堂测ID
|
|
|
isAnswered //是否已答题 true: 已答题, false: 未答题
|
|
|
options //选项数组
|
|
|
({
|
|
|
id //选项ID
|
|
|
index //选项索引
|
|
|
})
|
|
|
publishTime //随堂测发布时间
|
|
|
status //随堂测状态: 1 发布中 2 停止发布 3 已关闭
|
|
|
type //随堂测类型: 0 判断 1 单选 2 多选
|
|
|
submitRecord //如果已答题,返回该学员答题记录,如果未答题,服务端不返回该字段
|
|
|
({
|
|
|
optionId //选项ID
|
|
|
optionIndex //选项索引
|
|
|
})
|
|
|
}
|
|
|
serverTime //分发时间
|
|
|
|
|
|
}
|
|
|
*
|
|
|
*/
|
|
|
-(void)receivePracticeWithDic:(NSDictionary *) resultDic;
|
|
|
|
|
|
/**
|
|
|
* @brief 随堂测提交结果(The new method)
|
|
|
* @brief 随堂测提交结果
|
|
|
* rseultDic 提交结果,调用commitPracticeWithPracticeId:(NSString *)practiceId options:(NSArray *)options后执行
|
|
|
*
|
|
|
resultDic {datas {practice //随堂测
|
|
|
{ answerResult //
|
|
|
id //随堂测主键ID
|
|
|
isRepeatAnswered //是否重置答案
|
|
|
{ answerResult //回答是否正确 1 正确 0 错误
|
|
|
id //随堂测ID
|
|
|
isRepeatAnswered //是否重复答题 true: 重复答题, false: 第一次答题
|
|
|
options ({ count //参与人数
|
|
|
id //选项主键ID
|
|
|
index //选项序号
|
|
|
isCorrect //是否正确
|
|
|
percent //选项占比})
|
|
|
submitRecord ({ optionId //提交记录 提交选项ID
|
|
|
submitRecord 如果重复答题,则返回该学员第一次提交的记录,否则,返回该学员当前提交记录
|
|
|
({ optionId //提交记录 提交选项ID
|
|
|
optionIndex //提交选项序号})
|
|
|
type //题型 0 判断 1单选 2多选}}}
|
|
|
type //随堂测类型: 0 判断 1 单选 2 多选}}}
|
|
|
*/
|
|
|
-(void)practiceSubmitResultsWithDic:(NSDictionary *) resultDic;
|
|
|
/**
|
|
|
* @brief 随堂测统计结果(The new method)
|
|
|
* @brief 随堂测统计结果
|
|
|
* rseultDic 统计结果,调用getPracticeStatisWithPracticeId:(NSString *)practiceId后执行
|
|
|
resultDic {practice { //随堂测
|
|
|
answerPersonNum //回答人数
|
|
|
correctPersonNum //回答正确人数
|
|
|
answerPersonNum //回答该随堂测的人数
|
|
|
correctPersonNum //回答正确的人数
|
|
|
correctRate //正确率
|
|
|
id //随堂测主键ID
|
|
|
id //随堂测ID
|
|
|
options ({ //选项数组
|
|
|
count //选择人数
|
|
|
count //选择该选项的人数
|
|
|
id //选项ID
|
|
|
index //选项序号
|
|
|
isCorrect //是否正确
|
|
|
percent //选项选择率})
|
|
|
status //状态
|
|
|
type //题型 0判断 1单选 2多选}}
|
|
|
isCorrect //是否为正确选项 1 正确 0 错误
|
|
|
percent //选择该选项的百分比})
|
|
|
status //随堂测状态 1 发布中 2 停止发布
|
|
|
type //随堂测类型: 0 判断 1 单选 2 多选}}
|
|
|
*/
|
|
|
-(void)practiceStatisResultsWithDic:(NSDictionary *) resultDic;
|
|
|
/**
|
... | ... | @@ -1394,19 +1558,19 @@ Destination 选择 "Frameworks" -> |
|
|
*/
|
|
|
-(void)practiceRankResultsWithDic:(NSDictionary *) resultDic;
|
|
|
/**
|
|
|
* @brief 停止随堂测(The new method)
|
|
|
* @brief 停止随堂测
|
|
|
* rseultDic 结果
|
|
|
* resultDic {practiceId //随堂测主键ID}
|
|
|
*/
|
|
|
-(void)practiceStopWithDic:(NSDictionary *) resultDic;
|
|
|
/**
|
|
|
* @brief 关闭随堂测(The new method)
|
|
|
* @brief 关闭随堂测
|
|
|
* rseultDic 结果
|
|
|
* resultDic {practiceId //随堂测主键ID}
|
|
|
*/
|
|
|
-(void)practiceCloseWithDic:(NSDictionary *) resultDic;
|
|
|
/**
|
|
|
* @brief 收到奖杯(The new method)
|
|
|
* @brief 收到奖杯
|
|
|
* dic 结果
|
|
|
* "type": 1 奖杯 2 其他
|
|
|
* "viewerName": 获奖用户名
|
... | ... | @@ -1489,10 +1653,97 @@ Destination 选择 "Frameworks" -> |
|
|
-(void)receivedMarqueeInfo:(NSDictionary *)dic;
|
|
|
```
|
|
|
|
|
|
## 3.19 播放器状态
|
|
|
|
|
|
播放器状态类型
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* 视频播放状态
|
|
|
* HDMoviePlaybackStateStopped 播放停止
|
|
|
* HDMoviePlaybackStatePlaying 开始播放
|
|
|
* HDMoviePlaybackStatePaused 暂停播放
|
|
|
* HDMoviePlaybackStateInterrupted 播放间断
|
|
|
* HDMoviePlaybackStateSeekingForward 播放快进
|
|
|
* HDMoviePlaybackStateSeekingBackward 播放后退
|
|
|
*/
|
|
|
typedef NS_ENUM(NSUInteger, HDMoviePlaybackState) {
|
|
|
HDMoviePlaybackStateStopped,
|
|
|
HDMoviePlaybackStatePlaying,
|
|
|
HDMoviePlaybackStatePaused,
|
|
|
HDMoviePlaybackStateInterrupted,
|
|
|
HDMoviePlaybackStateSeekingForward,
|
|
|
HDMoviePlaybackStateSeekingBackward,
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 视频加载状态
|
|
|
* HDMovieLoadStateUnknown 未知状态
|
|
|
* HDMovieLoadStatePlayable 视频未完成全部缓存,但已缓存的数据可以进行播放
|
|
|
* HDMovieLoadStatePlaythroughOK 完成缓存
|
|
|
* HDMovieLoadStateStalled 数据缓存已经停止,播放将暂停
|
|
|
*/
|
|
|
typedef NS_ENUM(NSUInteger, HDMovieLoadState) {
|
|
|
HDMovieLoadStateUnknown,
|
|
|
HDMovieLoadStatePlayable,
|
|
|
HDMovieLoadStatePlaythroughOK,
|
|
|
HDMovieLoadStateStalled,
|
|
|
};
|
|
|
```
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 视频状态改变
|
|
|
* @param state
|
|
|
* HDMoviePlaybackStateStopped 播放停止
|
|
|
* HDMoviePlaybackStatePlaying 开始播放
|
|
|
* HDMoviePlaybackStatePaused 暂停播放
|
|
|
* HDMoviePlaybackStateInterrupted 播放间断
|
|
|
* HDMoviePlaybackStateSeekingForward 播放快进
|
|
|
* HDMoviePlaybackStateSeekingBackward 播放后退
|
|
|
*/
|
|
|
- (void)HDMoviePlayBackStateDidChange:(HDMoviePlaybackState)state;
|
|
|
/**
|
|
|
* @brief 视频加载状态
|
|
|
* @param state 播放状态
|
|
|
* HDMovieLoadStateUnknown 未知状态
|
|
|
* HDMovieLoadStatePlayable 视频未完成全部缓存,但已缓存的数据可以进行播放
|
|
|
* HDMovieLoadStatePlaythroughOK 完成缓存
|
|
|
* HDMovieLoadStateStalled 数据缓存已经停止,播放将暂停
|
|
|
*/
|
|
|
- (void)HDMovieLoadStateDidChange:(HDMovieLoadState)state;
|
|
|
```
|
|
|
|
|
|
## 3.20 视频缓存速度
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 视频加载速度
|
|
|
* @param speed 视频加载速度字符串
|
|
|
*/
|
|
|
- (void)onBufferSpeed:(NSString *)speed;
|
|
|
```
|
|
|
|
|
|
## 3.21 用户进出直播间提醒
|
|
|
|
|
|
代理方法(可选)
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
* @brief 用户进出直播间提示
|
|
|
* @param model RemindModel 详情
|
|
|
*/
|
|
|
- (void)HDUserRemindWithModel:(RemindModel *)model;
|
|
|
```
|
|
|
|
|
|
|
|
|
# 4.常见问题
|
|
|
#4.常见问题
|
|
|
|
|
|
## 4.1 旋转屏错误
|
|
|
##4.1 旋转屏错误
|
|
|
|
|
|
常用的旋转屏方式
|
|
|
|
... | ... | |