注:关于CCSDK支持iOS最低版本问题
1. 自 3.18.0 及后续版本,支持最低iOS版本为 iOS 10.0。
2. 自 3.11.1 至 3.17.2版本,支持最低iOS版本为 iOS 9.0。
3. 3.11.0 及之前的版本,支持最低iOS版本为 iOS 8.0。
PS. 关于Xcode12最低版本支持 iOS 9.0 ,如何联调 iOS 8.0 设备?
注:选择项目中的 Build Settings ,搜索或找到 iOS Deployment Target ,点击 iOS 9.0 在展开的下拉菜单中选择 Other ,在文本框中输入 8.0 即可。
[TOC]
4.12.0
发布日期:2023.08.07
1.新增支持研讨会模式观看 2.新增防录屏开关 3.修复多人连麦已知Bug
4.11.0
发布日期:2023.07.05
1.直播新增VR直播功能 2.在线回放新增VR回放功能
Pod 接入方式
# 基础SDK
pod 'CCLivePlaySDK', '4.11.0'
pod 'HDVideoClass_BSDK', '6.25.0'
pod 'AgoraRtcEngine_iOS', '3.7.2'
pod 'HDSAliyunPlayer'
pod 'HDStreamLib'
pod 'HDSCocoaLumberjack'
pod 'HDSSZip'
pod 'HDSVRMediaFramework' //新增
PS:VR功能接入请看《VR功能接入文档》
直播新增API:
房间配置项
方法 | 说明 |
---|---|
(void)onRoomConfigure: | 房间配置项 |
示例代码
/// 4.11.0 new 房间配置项
/// @param configure 配置信息
/// PS: 问答支持发送图片开关、VR开关、自定义表情开关、房间图标
- (void)onRoomConfigure:(HDSRoomConfigureModel * _Nonnull)configure;
直播废弃API:
房间图标
方法 | 说明 |
---|---|
示例代码
/// 4.8.0 new
/// 房间图标
/// @param iconUrl 图标地址
- (void)roomIcon:(NSString *)iconUrl DEPRECATED_MSG_ATTRIBUTE("该方法已废弃,请使用 - (void)onRoomConfigure:(HDSRoomConfigureModel *_Nonnull)configure");
问答支持图片开关权限
方法 | 说明 |
---|---|
示例代码
/// 4.9.0 new
/// 问答支持图片开关权限
/// @param QPSwitch 开关
- (void)onQuestionPictureSwitch:(NSInteger)QPSwitch DEPRECATED_MSG_ATTRIBUTE("该方法已废弃,请使用 - (void)onRoomConfigure:(HDSRoomConfigureModel *_Nonnull)configure");
在线回放新增API:
房间配置项
方法 | 说明 |
---|---|
(void)onRoomConfigure: | 房间配置项 |
示例代码
/// 4.11.0 new 房间配置项
/// @param configure 配置信息
/// PS:VR开关、自定义表情开关、房间图标
- (void)onRoomConfigure:(HDSRoomConfigureModel * _Nonnull)configure;
PlayParameter 新增类
参数
参数 | 说明 |
---|---|
VRSwitch | VR开关 NO 关闭, YES 开启 |
QPSwitch | 问答支持发送图片开关 NO 关闭, YES 开启 |
customEmojiSwitch | 自定义表情开关 NO 关闭, YES 开启 |
roomIcon | 房间图标 |
示例代码
@interface HDSRoomConfigureModel : NSObject
/// VR开关 NO 关闭, YES 开启
@property (nonatomic, assign) BOOL VRSwitch;
/// 问答支持发送图片开关 NO 关闭, YES 开启
@property (nonatomic, assign) BOOL QPSwitch;
/// 自定义表情开关 NO 关闭, YES 开启
@property (nonatomic, assign) BOOL customEmojiSwitch;
/// 房间图标
@property (nonatomic, copy) NSString * _Nullable roomIcon;
@end
4.10.0
发布日期:2023.06.26
新增: 1.SDK支持免登录、主次验证和白名单验证登录方式
修复:
1.iPhone14系列设备连麦无声音的问题 2.问卷提交失败的问题
PlayParameter 新增参数
主次验证标识(直播、在线回放可选择使用)
参数名 | 类型 | 说明 |
---|---|---|
secondaryVerify | String | 主次验证标识 "1":次验证 "0":默认主验证 (非必需 可为空) |
示例代码
// 4.10.0 new
// 主次验证标识 "1":次验证 "0":默认主验证 (非必需 可为空)
@property (nonatomic, copy) NSString *secondaryVerify;
直播新增API
仅登陆失败(代理方法)
方法 | 说明 |
---|---|
(void)onLoginFailed: message: | 仅登陆失败 |
示例代码
/// 4.10.0 new 登陆失败错误回调(仅登陆方法响应代理)
/// @param code code值
/// @param message 错误信息
- (void)onLoginFailed:(NSUInteger)code message:(NSString *_Nullable)message;
初始化房间登陆成功(代理方法)
方法 | 说明 |
---|---|
(void)onRequestLoginSucced | 初始化房间登陆成功 |
示例代码
/// 4.10.0 new
/// 请求登陆成功
- (void)onRequestLoginSucced;
初始化房间登陆失败(代理方法)
方法 | 说明 |
---|---|
(void)onRequstLoginFailed: message: | 初始化房间登陆失败 |
示例代码
/// 4.10.0 new
/// 请求登陆失败
/// @param code code值
/// @param message 错误信息
- (void)onRequstLoginFailed:(NSUInteger)code message:(NSString * _Nullable)message;
直播废弃API
仅登录失败 (代理方法)
方法 | 说明 |
---|---|
仅登陆失败 |
示例代码
/**
* @brief 登录失败 (该方法已废弃,建议使用 - (void)onLoginPlaybackFailed:(NSUInteger)code message:(NSString *_Nullable)message;)
*/
- (void)loginFailed:(NSError *)error reason:(NSString *)reason DEPRECATED_MSG_ATTRIBUTE("该方法已废弃,建议使用 - (void)onLoginPlaybackFailed:(NSInteger)code message:(NSString *)message;");
直播更新注释
仅登陆(主动方法)
方法 | 说明 |
---|---|
(id)initLoginWithParameter: | 登录房间 |
示例代码
/**
* @brief 登录房间
* @param parameter 配置参数信息
* 必填参数 userId; //用户ID
* 必填参数 roomId; //房间ID
* 必填参数 viewerName; //用户名称
* 必填参数 token; //房间密码
* (选填参数) viewercustomua; //用户自定义参数,需和后台协商,没有定制传@""
*
* new ==> // Succed Delegate
* new ==> - (void)loginSucceedPlay;
*
* new ==> // Failed Delegate
* new ==> - (void)onLoginFailed:(NSUInteger)code message:(NSString *_Nullable)message;
*/
- (id)initLoginWithParameter:(PlayParameter *)parameter;
登陆并初始化SDK
方法 | 说明 |
---|---|
(id)initSDKWithParameter: succed: player: failed: | 初始化SDK |
示例代码
/// 初始化SDK
/// @param parameter 参数
/// @param succed 初始化成功回调
/// @param player 播放视图回调 (流视图异步回调,存在回调多次;无延迟直播无需关注。)
/// @param failed 初始化失败回调
///
/// new ==> // Succed Delegate
/// new ==> - (void)onRequestLoginSucced;
///
/// new ==> // Failed Delegate
/// new ==> - (void)onRequstLoginFailed:(NSUInteger)code message:(NSString * _Nullable)message;
///
- (id)initSDKWithParameter:(PlayParameter *)parameter
succed:(initSuccedClosure)succed
player:(HDSPlayerViewClosure)player
failed:(initFailedClosure)failed;
回放新增API
仅登陆失败(代理方法)
方法 | 说明 |
---|---|
(void)onLoginPlaybackFailed: message: | 仅登陆失败 |
示例代码
/// 4.10.0 new 登陆失败错误回调(仅登陆方法响应代理)
/// @param code code值
/// @param message 错误信息
- (void)onLoginPlaybackFailed:(NSUInteger)code message:(NSString *_Nullable)message;
初始化房间登陆成功(代理方法)
方法 | 说明 |
---|---|
(void)onRequestLoginPlaybackSucced | 初始化房间登陆成功 |
示例代码
/// 4.10.0 new
/// 请求登陆成功
- (void)onRequestLoginPlaybackSucced;
初始化房间登陆失败(代理方法)
方法 | 说明 |
---|---|
(void)onRequstLoginPlaybackFailed: message: | 初始化房间登陆失败 |
示例代码
/// 4.10.0 new
/// 请求登陆失败
/// @param code code值
/// @param message 错误信息
- (void)onRequstLoginPlaybackFailed:(NSUInteger)code message:(NSString * _Nullable)message;
回放废弃API
仅登录失败 (代理方法)
方法 | 说明 |
---|---|
仅登陆失败 |
示例代码
/**
* @brief 登录失败 (该方法已废弃,建议使用 - (void)onLoginPlaybackFailed:(NSUInteger)code message:(NSString *_Nullable)message;)
*/
- (void)loginFailed:(NSError *)error reason:(NSString *)reason DEPRECATED_MSG_ATTRIBUTE("该方法已废弃,建议使用 - (void)onLoginPlaybackFailed:(NSInteger)code message:(NSString *)message;");
回放更新注释
仅登陆(主动方法)
方法 | 说明 |
---|---|
(id)initLoginWithParameter: | 登录房间 |
示例代码
/**
* @brief 登录房间
* @param parameter 配置参数信息
* 必填参数 userId
* 必填参数 roomId
* 必填参数 viewerName
* 必填参数 token
* 非必填参数 security
*
* new ==> // Succed Delegate
* new ==> - (void)loginSucceedPlayback;
*
* new ==> // Failed Delegate
* new ==> - (void)onLoginPlaybackFailed:(NSUInteger)code message:(NSString *_Nullable)message;
*/
- (id)initLoginWithParameter:(PlayParameter *)parameter;
登陆并初始化SDK
方法 | 说明 |
---|---|
(id)initSDKWithParameter: succed: player: failed: | 初始化SDK |
示例代码
/// 初始化SDK
/// @param parameter 参数
/// @param succed 初始化成功回调
/// @param player 播放视图回调
/// @param failed 初始化失败回调
///
/// new ==> // Succed Delegate
/// new ==> - (void)onRequestLoginPlaybackSucced;
///
/// new ==> // Failed Delegate
/// new ==> - (void)onRequstLoginPlaybackFailed:(NSUInteger)code message:(NSString * _Nullable)message;
///
- (id)initSDKWithParameter:(PlayParameter *)parameter
succed:(initSuccedClosure)succed
player:(HDSPlayerViewClosure)player
failed:(initFailedClosure)failed;
直播、在线回放登陆错误 Code 码
错误码 | 描述 | 备注 |
---|---|---|
10000000 | 请求参数不正确,请检查后重试。 | |
20270008 | 您的Token不存在,请重新登录。 | |
10000001 | 系统出现异常,请稍后再试。 | |
20200002 | 您的账户已过期,请联系客服处理。 | |
10000034 | 您还未登录,请先登录后再试。 | |
10000005 | 该回放不存在或已被删除,请检查后重试。 | |
10000007 | 该直播不存在或已被删除,请检查后重试。 | |
10000006 | 该直播间不存在或已被删除,请检查后重试。 | |
20290005 | 请求参数错误,请检查后重试。 | |
20270000 | api登录调用失败,请检查网络连接后重试。 | |
20270011 | api登录调用超时,请检查网络连接后重试。 | |
20270002 | 名称或密码错误,请检查后重试。 | |
20270001 | 请求参数错误,请检查后重试。 | |
20270003 | 登录失败,请联系管理员添加你至白名单 | |
20270004 | 该视频不属于当前账户,请联系客服。 | |
20270005 | 该视频不可用,请联系客服。 | |
20270006 | 获取播放地址失败,请检查网络连接后重试。 | |
20270010 | 获取打点信息失败,请联系客服。 | |
20270007 | 该播放地址不存在或已被删除,请联系客服。 | |
20290009 | 不合法的产品线,请联系客服。 | |
20270012 | 手机号验证失败,请检查输入后重试。 | |
20270013 | 登记观看失败,请联系客服。 | |
20270014 | 手机号验证失败,请检查输入后重试。 | |
20270015 | 发送短信失败,请稍后再试。 | |
20270016 | 该直播间未开启直播转回放功能,请联系客服。 | |
20270017 | 回放直播间与登录直播间不符,请联系客服。 | |
20270018 | 批量获取视频信息失败,请联系客服。 | |
20270019 | 视频信息错误,请联系客服。 | |
20270020 | 该极速回放视频没有内容,请联系客服。 | |
20290015 | 企微绑定已失效,请重新绑定。 | |
20290016 | 非法的企微绑定关系,请重新绑定。 | |
20290017 | 该企微用户未在当前直播间下被授权,请联系管理员授权。 | |
20290001 | - | 接口验证返回 message,直接展示 |
4.9.1
发布日期:2023.05.17
1.优化聊天图片展示 2.优化连麦挂断声音异常问题 3.优化播放加载超时响应逻辑
4.9.0
发布日期:2023.04.06
- 问答功能支持图文问答
- 聊天新增自定义表情,优化基础表情
- 移除 armv7 架构
集成须知:
1. pod 集成(推荐)
第一步: 终端执行 "pod repo update" 更新本地 pod
$ pod repo update
第二步: 删除 "Podfile.lock" 文件
第三步: 编辑 "Podfile" 文件
# 基础SDK(必须)
pod 'CCLivePlaySDK', '4.9.0'
pod 'HDVideoClass_BSDK', '6.25.0'
pod 'HDSSZip'
pod 'HDSCocoaLumberjack', '4.9.0'
pod 'AgoraRtcEngine_iOS', '3.7.2'
pod 'HDSAliyunPlayer', '4.9.0'
pod 'HDStreamLib'
# 互动组建(可选)
pod 'HDSInteractionEngine', '4.9.0'
pod 'HDSLikeModule', '4.9.0'
pod 'HDSGiftModule', '4.9.0'
pod 'HDSVoteModule', '4.9.0'
pod 'HDSRedEnvelopeModule', '4.9.0'
pod 'HDSInvitationCardModule', '4.9.0'
pod 'HDSQuestionnaireModule', '4.9.0'
pod 'HDSLiveStoreModule', '4.9.0'
第四步: 终端执行 "pod install" 安装最新的SDK
$ pod install
2. 本地集成
第一步: 访问 https://hdgit.bokecc.com/ccvideo/Live_iOS_Play_SDK/-/tags/4.9.0 下载SDK压缩包
第二步: 解压后进入 "SDK" 文件夹,替换对应 framework
新增API:
聊天支持自定义表情
房间是否拥有自定义表情使用权限
方法 | 说明 |
---|---|
(BOOL)hasEmojisUsePermission | 房间是否拥有自定义表情使用权限(房间有聊天模版 + 自定义表情开关打开) |
示例代码
/**
* @brief 房间是否拥有自定义表情使用权限(房间有聊天模版 + 自定义表情开关打开)
*/
+ (BOOL)hasEmojisUsePermission;
每个聊天表情对应的key的集合
方法 | 说明 |
---|---|
(NSArray *)emojiKeys | 每个聊天表情对应的key的集合 |
示例代码
/**
* @brief 每个聊天表情对应的key的集合
*/
+ (NSArray *)emojiKeys;
Example code:
(lldb) po [RequestData emojiKeys]
<__NSFrozenArrayM 0x11fd8bde0>(
[大笑],
[哭],
[白眼],
[啊],
[卖萌],
[晕],
[可怜],
[无语],
[愤怒],
[色]
)
聊天表情对应plist文件配置表
方法 | 说明 |
---|---|
(NSArray *)emojisPlistInfo | 聊天表情对应plist文件配置表 |
示例代码
/**
* @brief 聊天表情对应plist文件配置表
*/
+ (NSArray *)emojisPlistInfo;
Example code:
(lldb) po [RequestData emojisPlistInfo]
<__NSArrayI 0x119ad16d0>(
{
img = "https://cclivematerial.oss-cn-beijing.aliyuncs.com/image/41A6BAB5115465D1/1678179715016_48_1847987378_%E6%99%95.png";
name = "[大笑]";
},
{
img = "https://cclivematerial.oss-cn-beijing.aliyuncs.com/image/41A6BAB5115465D1/1678179674548_24_1542554140_%E5%93%AD.png";
name = "[哭]";
}
)
根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图)
方法 | 说明 |
---|---|
(UIImage *)emojiCachedForName: | 根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图) |
示例代码
/**
* @brief 根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图)
*/
+ (UIImage *)emojiCachedForName:(NSString *)emojiName;
Example code:
(lldb) po [RequestData emojiCachedForName:@"[大笑]"]
<UIImage: 0x11ff91870>, {27, 27}
检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑)
方法 | 说明 |
---|---|
(BOOL)isEmojiLoadComplete | 检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑) |
示例代码
/**
* @brief 检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑)
*/
- (BOOL)isEmojiLoadComplete;
自定义表情加载回调监听
方法 | 说明 |
---|---|
(void)onEmojiLoadingResult: | 自定义聊天表情加载状态回调 |
示例代码
/**
* @brief 自定义聊天表情加载状态回调
*/
- (void)onEmojiLoadingResult:(BOOL)result message:(NSString *)message;
Example code:
- (void)onEmojiLoadingResult:(BOOL)result message:(NSString *)message {
NSLog(@"%s--%d--%@",__func__,result,message);
}
问答支持发送图片(直播 CCSDK/RequestData.h)
问答支持发送图片权限开关(代理方法)
方法 | 说明 |
---|---|
(void)onQuestionPictureSwitch: | 问答支持图片开关权限 |
示例代码
/// 4.9.0 new
/// 问答支持图片开关权限
/// @param QPSwitch 开关
- (void)onQuestionPictureSwitch:(NSInteger)QPSwitch;
房间历史问答 (代理方法)(新增)
方法 | 说明 |
---|---|
(void)onHistoryQA: | 房间历史问答 |
示例代码
/// 4.9.0 new
/// 房间历史问答
/// @param model 问答model
- (void)onHistoryQA:(HDSHistoryQAModel * _Nullable)model;
HDSHistoryQAModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
questions | Array [HDSQuestionModel] | 问题 | CCSDK/PlayParameter.h |
answers | Array [HDSAnswererUserModel] | 答案 | CCSDK/PlayParameter.h |
count | Integer | 问题总条数 | CCSDK/PlayParameter.h |
示例代码
@interface HDSHistoryQAModel : NSObject
/// 问题
@property (nonatomic, strong) NSArray <HDSQuestionModel *>* _Nullable questions;
/// 答案
@property (nonatomic, strong) NSArray <HDSAnswererUserModel *>* _Nullable answers;
/// 问题总条数
@property (nonatomic, assign) NSUInteger count;
@end
HDSQuestionModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
id | String | 问题Id | CCSDK/PlayParameter.h |
content | String | 提问内容 | CCSDK/PlayParameter.h |
time | Integer | 提问时间(秒)(相对直播开始时间) | CCSDK/PlayParameter.h |
triggerTime | String | 绝对时间 "yyyy-MM-dd HH:mm:ss" | CCSDK/PlayParameter.h |
publish | Integer | 是否发布 0:不发布 1:发布 | CCSDK/PlayParameter.h |
user | HDSQuestionerUserModel | 提问者 | CCSDK/PlayParameter.h |
extar | HDSQAExtra | 文件 | CCSDK/PlayParameter.h |
示例代码
@interface HDSQuestionModel : NSObject
/// id
@property (nonatomic, copy) NSString * _Nullable id;
/// 提问内容
@property (nonatomic, copy) NSString * _Nullable content;
/// 提问时间(秒)(相对直播开始时间)
@property (nonatomic, assign) NSUInteger time;
/// 绝对时间 "yyyy-MM-dd HH:mm:ss"
@property (nonatomic, copy) NSString * _Nullable triggerTime;
/// 是否发布 0:不发布 1:发布
@property (nonatomic, assign) NSUInteger publish;
/// 提问者
@property (nonatomic, strong) HDSQuestionerUserModel * _Nullable user;
/// 文件
@property (nonatomic, strong) HDSQAExtra * _Nullable extar;
@end
HDSQuestionerUserModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
id | String | 提问者Id | CCSDK/PlayParameter.h |
name | String | 提问者名称 | CCSDK/PlayParameter.h |
avatar | String | 提问者头像 | CCSDK/PlayParameter.h |
groupId | String | 提问者组 | CCSDK/PlayParameter.h |
示例代码
@interface HDSQuestionerUserModel : NSObject
/// 提问者id
@property (nonatomic, copy) NSString * _Nullable id;
/// 提问者名称
@property (nonatomic, copy) NSString * _Nullable name;
/// 提问者头像
@property (nonatomic, copy) NSString * _Nullable avatar;
/// 提问者组
@property (nonatomic, copy) NSString * _Nullable groupId;
@end
HDSQAExtra
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
img | Array [HDSQAExtraImage] | 图片数组 | CCSDK/PlayParameter.h |
示例代码
@interface HDSQAExtra : NSObject
/// 图片数组
@property (nonatomic, strong) NSArray <HDSQAExtraImage *>* _Nullable img;
@end
HDSQAExtraImage
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
order | Integer | 序号 | CCSDK/PlayParameter.h |
url | String | 地址 | CCSDK/PlayParameter.h |
示例代码
@interface HDSQAExtraImage : NSObject
/// 序号
@property (nonatomic, assign) NSInteger order;
/// 地址
@property (nonatomic, copy) NSString * _Nullable url;
@end
HDSAnserModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
questionId | String | 问题ID | CCSDK/PlayParameter.h |
content | String | 问答内容 | CCSDK/PlayParameter.h |
time | Integer | 回答时间(秒)(相对直播开始时间) | CCSDK/PlayParameter.h |
triggerTime | String | 绝对时间 "yyyy-MM-dd HH:mm:ss" | CCSDK/PlayParameter.h |
isPrivate | Integer | 是否私聊 0:否 1:是 | CCSDK/PlayParameter.h |
user | HDSQuestionerUserModel | 回答者 | CCSDK/PlayParameter.h |
extar | HDSQAExtra | 文件 | CCSDK/PlayParameter.h |
示例代码
@interface HDSAnserModel : NSObject
/// 问题ID
@property (nonatomic, copy) NSString * _Nullable questionId;
/// 问答内容
@property (nonatomic, copy) NSString * _Nullable content;
/// 回答时间(秒)(相对直播开始时间)
@property (nonatomic, assign) NSUInteger time;
/// 绝对时间 "yyyy-MM-dd HH:mm:ss"
@property (nonatomic, copy) NSString * _Nullable triggerTime;
/// 是否私聊 0:否 1:是
@property (nonatomic, assign) NSUInteger isPrivate;
/// 回答者
@property (nonatomic, strong) HDSAnswererUserModel * _Nonnull user;
/// 文件
@property (nonatomic, strong) HDSQAExtra * _Nullable extar;
@end
HDSAnswererUserModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
id | String | 提问者Id | CCSDK/PlayParameter.h |
name | String | 提问者名称 | CCSDK/PlayParameter.h |
role | String | 回答者角色 | CCSDK/PlayParameter.h |
avatar | String | 提问者头像 | CCSDK/PlayParameter.h |
groupId | String | 提问者组 | CCSDK/PlayParameter.h |
示例代码
@interface HDSAnswererUserModel : NSObject
/// 回答者id
@property (nonatomic, copy) NSString * _Nullable id;
/// 回答者名称
@property (nonatomic, copy) NSString * _Nullable name;
/// 回答者角色
@property (nonatomic, copy) NSString * _Nullable role;
/// 回答者头像
@property (nonatomic, copy) NSString * _Nullable avatar;
/// 回答者组
@property (nonatomic, copy) NSString * _Nullable groupId;
@end
房间历史问答 (代理方法)(改动)
方法 | 说明 |
---|---|
(void)onQuestionArr: onAnswerArr: | 收到提问&回答,在用户登录之前,主讲和其他用户的历史互动问答信息 (会多次回调) |
示例代码
/**
* @brief 收到提问&回答,在用户登录之前,主讲和其他用户的历史互动问答信息 (会多次回调)
*/
- (void)onQuestionArr:(NSArray *)questionArr onAnswerArr:(NSArray *)answerArr {
questionArr = [{
"content" = "";
"encryptId" = "";
"groupId" = "";
"id" = "";
"isPublish" = (0);
"questionUserAvatar" = "";
"questionUserId" = "";
"questionUserName" = "";
"time" = (0);
"triggerTime" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}]
answerArr = [{
"content" = "";
"encryptId"= "";
"groupId" = "";
"id" = "";
"isPrivate" = (0);
"answerUserAvatar" = "";
"answerUserId" = "";
"answerUserName" = "";
"time" = (0);
"triggerTime" = "";
"answerUserRole" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}]
}
收到提问(代理方法)(改动)
方法 | 说明 |
---|---|
(void)onQuestionDic: | 收到提问,用户观看时和主讲的互动问答信息 |
示例代码
/**
* @brief 收到提问,用户观看时和主讲的互动问答信息
*/
- (void)onQuestionDic:(NSDictionary *)questionDic {
questionDic = {
"content" = "";
"groupId" = "";
"id" = "";
"userAvatar" = "";
"userId" = "";
"userName" = "";
"triggerTime" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}
}
收到回答(代理方法)(改动)
方法 | 说明 |
---|---|
(void)onAnswerDic: | 收到回答,用户观看时和主讲的互动问答信息 |
示例代码
/**
* @brief 收到回答,用户观看时和主讲的互动问答信息
*/
- (void)onAnswerDic:(NSDictionary *)answerDic {
answerDic = {
"content" = "";
"groupId" = "";
"isPrivate" = 0;
"questionId" = "";
"questionUserId" = "";
"triggerTime" = "";
"userAvatar" = "";
"userId" = "";
"userName" = "";
"userRole" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}
}
提交问答(主动方法)
方法 | 说明 |
---|---|
(void)commitQuestion: imageArray: closure: | 提交问答 |
示例代码
/// 4.9.0 new
/// 提交问答
/// @param questionText 问答信息(不可为空)
/// @param imageArray 图片数据(可为空)
/// @param closure 回调
- (void)commitQuestion:(NSString * _Nonnull)questionText
imageArray:(NSArray <HDSCommitImageModel *>* _Nullable)imageArray
closure:(void(^_Nullable)(BOOL succed, NSString * _Nonnull message, NSArray <HDSUploadErrorModel *>* _Nullable failedArray))closure;
HDSCommitImageModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
name | String | 文件名 | CCSDK/PlayParameter.h |
order | Integer | 序号 | CCSDK/PlayParameter.h |
size | Integer | 文件大小 | CCSDK/PlayParameter.h |
type | String | 文件类型 | CCSDK/PlayParameter.h |
fullPath | String | 文件路径 | CCSDK/PlayParameter.h |
示例代码
/// 文件名
@property (nonatomic, copy) NSString * _Nonnull name;
/// 序号
@property (nonatomic, assign) NSUInteger order;
/// 文件大小
@property (nonatomic, assign) NSUInteger size;
/// 文件类型
@property (nonatomic, copy) NSString * _Nonnull type;
/// 文件路径
@property (nonatomic, copy) NSString * _Nonnull fullPath;
HDSUploadErrorModel
参数 | 数据类型 | 说明 | 所在类 |
---|---|---|---|
order | Integer | 序号 | CCSDK/PlayParameter.h |
name | String | 文件名 | CCSDK/PlayParameter.h |
message | String | 错误信息 | CCSDK/PlayParameter.h |
code | Integer | 错误码 | CCSDK/PlayParameter.h |
示例代码
@interface HDSUploadErrorModel : NSObject
/// 序号
@property (nonatomic, assign) NSInteger order;
/// 文件名
@property (nonatomic, copy) NSString * _Nullable name;
/// 错误信息
@property (nonatomic, copy) NSString * _Nullable message;
/// 错误码
@property (nonatomic, assign) NSInteger code;
@end
错误原因
错误值 | 说明 |
---|---|
ERROR_HISTORY_QUESTION_ANSWER_LIST | 获取房间历史问答列表失败 |
ERROR_NOT_LIVING | 请在直播中发送问答 |
ERROR_TEMPLATE_INVALID | 房间不支持问答 |
ERROR_DEBOUNCE | 操作太频繁了,休息一下吧 |
ERROR_CONTENT_EMPTY | 请输入内容,内容不可为空 |
ERROR_CONTENT_INVALID | 请输入内容,并保证长度小于1000 |
ERROR_IMG_NUMBER_INVALID | 最多只能发送6张图片 |
ERROR_FILE_INVALID | 图片文件校验失败,包括文件不存在、接口返回文件不合法 |
ERROR_REQUEST_FAILED | 请求失败,请检查网络 |
ERROR_FILE_UPLOAD_FAILED | 图片文件上传失败,请重试 |
ERROR_FILE_LARGE | 图片过大,请上传小于20M的图片 |
ERROR_FILE_TYPE_SUPPORTED | 格式不支持,请选择 JPG、PNG、JPED、BMP格式的图片 |
ERROR_FILE_PARAMETER | 参数错误,请稍后重试,或联系客服 |
ERROR_FILE_LOGIN_FAILED | 登陆异常,请重新登陆或者刷新后重试 |
ERROR_FILE_NOT_EXISTS | 图片文件不存在,请重试 |
FILE_UPLOAD_SUCCED | 图片文件上传成功 |
COMMIT_QUESTION_SUCCED | 问答提交成功 |
示例代码
ERROR_HISTORY_QUESTION_ANSWER_LIST,//获取房间历史问答列表失败
ERROR_NOT_LIVING, //请在直播中发送问答
ERROR_TEMPLATE_INVALID, //房间不支持问答
ERROR_DEBOUNCE, //操作太频繁了,休息一下吧
ERROR_CONTENT_EMPTY, //请输入内容,内容不可为空
ERROR_CONTENT_INVALID, //请输入内容,并保证长度小于1000
ERROR_IMG_NUMBER_INVALID, //最多只能发送6张图片
ERROR_FILE_INVALID, //图片文件校验失败,包括文件不存在、接口返回文件不合法
ERROR_REQUEST_FAILED, //请求失败,请检查网络
ERROR_FILE_UPLOAD_FAILED, //图片文件上传失败,请重试
ERROR_FILE_LARGE, //图片过大,请上传小于20M的图片
ERROR_FILE_TYPE_SUPPORTED, //格式不支持,请选择 JPG、PNG、JPED、BMP格式的图片
ERROR_FILE_PARAMETER, //参数错误,请稍后重试,或联系客服
ERROR_FILE_LOGIN_FAILED, //登陆异常,请重新登陆或者刷新后重试
ERROR_FILE_NOT_EXISTS, //图片文件不存在,请重试
FILE_UPLOAD_SUCCED, //图片文件上传成功
COMMIT_QUESTION_SUCCED, //问答提交成功
在线回放展示问答图片(CCSDK/RequestDataPlayBack.h)
收到本房间的历史提问&回答(代理方法)(改动)
方法 | 说明 |
---|---|
(void)onParserQuestionArr: onParserAnswerArr: | 收到本房间的历史提问&回答 |
示例代码
/**
* @brief 收到本房间的历史提问&回答
*/
- (void)onParserQuestionArr:(NSArray *)questionArr onParserAnswerArr:(NSArray *)answerArr {
questionArr = [{
"content" = "";
"encryptId" = "";
"groupId" = "";
"id" = "";
"isPublish" = (0);
"questionUserAvatar" = "";
"questionUserId" = "";
"questionUserName" = "";
"time" = (0);
"triggerTime" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}]
answerArr = [{
"content" = "";
"encryptId"= "";
"groupId" = "";
"id" = "";
"isPrivate" = (0);
"answerUserAvatar" = "";
"answerUserId" = "";
"answerUserName" = "";
"time" = (0);
"triggerTime" = "";
"answerUserRole" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}]
}
获取全量问答数据(主动)(改动)
方法 | 说明 |
---|---|
(void)fetchAllQA: | 获取全量问答数据 |
示例代码
/**
* 3.16.0 new
* @brief 获取全量问答数据
* @param completion 数据回调
*/
- (void)fetchAllQA:(void (^)(NSArray * results))completion {
results = [{
"content" = "";
"encryptId" = "";
"groupId" = "";
"id" = "";
"isPublish" = (0);
"userAvatar" = "";
"userId" = "";
"userName" = "";
"time" = (0);
"triggerTime" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
"answers" = [{
"content" = "";
"encryptId"= "";
"groupId" = "";
"id" = "";
"isPrivate" = (0);
"userAvatar" = "";
"userId" = "";
"userName" = "";
"time" = (0);
"triggerTime" = "";
"userRole" = "";
新增字段 --> "extra" = {"img":[{
"order":0,
"url":""
}]
};
}]
}]
}
4.8.0
发布日期:2023.02.15
- 新增竖屏观看功能
- 加入聊天置顶功能
- 优化公告的显示和阅读
- 直播带货支持多平台链接
- 优化demo邀请卡
- 优化播放器和回放文档画笔下载
‼ ️ 本地集成 ‘必须’ 的准备 : 替换 CCBundle 资源文件,替换 HDBaseUtils 库,替换 CCSDK 库
‼ ️ 注意事项: HDBaseUtils 需升级到 1.2.0
‼ ️ PS: 直播带货支持多平台链接改动详情见《云直播直播带货功能接入文档》
直播新增API:
房间图标(代理方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)roomIcon: | 房间图标 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 房间图标
/// @param iconUrl 图标地址
- (void)roomIcon:(NSString *)iconUrl;
聊天置顶
房间历史置顶聊天(代理方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)onHistoryTopChatRecords: | 房间历史置顶聊天记录 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 房间历史置顶聊天记录
/// @param model 置顶聊天model
- (void)onHistoryTopChatRecords:(HDSHistoryTopChatModel *)model;
HDSHistoryTopChatModel
参数 | 类型 | 说明 | 所在类 |
---|---|---|---|
records | Array | 房间置顶聊天记录 | CCSDK/PlayParameter.h |
示例代码
@interface HDSHistoryTopChatModel : NSObject
/// 房间置顶聊天记录
@property (nonatomic, strong) NSArray <HDSLiveTopChatModel *>* _Nullable records;
@end
收到新的置顶聊天(代理方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)receivedNewTopChat: | 收到聊天置顶新消息 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 收到聊天置顶新消息
/// @param model 聊天置顶model
- (void)receivedNewTopChat:(HDSLiveTopChatModel *)model;
HDSLiveTopChatModel
参数 | 类型 | 说明 | 所在类 |
---|---|---|---|
id | String | 聊天ID | CCSDK/PlayParameter.h |
content | String | 聊天内容 | CCSDK/PlayParameter.h |
fromViewerId | String | 聊天发送人Id | CCSDK/PlayParameter.h |
fromViewerName | String | 聊天发送人昵称 | CCSDK/PlayParameter.h |
fromViewerAvatar | String | 聊天发送人头像 | CCSDK/PlayParameter.h |
fromViewerGroupId | String | 聊天发送人聊天组Id | CCSDK/PlayParameter.h |
fromViewerRole | Integer | 聊天发送人角色 | CCSDK/PlayParameter.h |
top | Integer | 操作时间戳 | CCSDK/PlayParameter.h |
示例代码
@interface HDSLiveTopChatModel : NSObject
/// 聊天Id
@property (nonatomic, copy) NSString * _Nullable id;
/// 聊天内容
@property (nonatomic, copy) NSString * _Nullable content;
/// 聊天发送人Id
@property (nonatomic, copy) NSString * _Nullable fromViewerId;
/// 聊天发送人昵称
@property (nonatomic, copy) NSString * _Nullable fromViewerName;
/// 聊天发送人头像
@property (nonatomic, copy) NSString * _Nullable fromViewerAvatar;
/// 聊天发送人聊天组Id
@property (nonatomic, copy) NSString * _Nullable fromViewerGroupId;
/// 聊天发送人角色
/// 1 : publisher (主讲、推流端角色)
/// 2 : teacher (助教端角色)
/// 3 : host (主持人角色)
/// 4 : student (学生、观看端角色)
/// 10 : presenter (云课堂讲师)
/// 11 : talker (云课堂互动者)
/// 12 : audience (云课堂旁听)
/// 13 : inspector (云课堂隐身者)
/// 14 : assistant (云课堂助教)
/// 0 : other (其他角色)
@property (nonatomic, assign) NSInteger fromViewerRole;
/// 操作时间戳
@property (nonatomic, assign) NSInteger top;
@end
收到批量删除聊天置顶(代理方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)receivedDeleteTopChat: | 收到批量删除聊天置顶消息 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 收到批量删除聊天置顶消息
/// @param model 聊天置顶model
- (void)receivedDeleteTopChat:(HDSDeleteTopChatModel *)model;
HDSDeleteTopChatModel
参数 | 类型 | 说明 | 所在类 |
---|---|---|---|
chatIds | Array | 收到批量置顶聊天记录ID | CCSDK/PlayParameter.h |
示例代码
@interface HDSDeleteTopChatModel : NSObject
/// 收到批量
@property (nonatomic, strong) NSArray <NSString *>* _Nullable chatIds;
@end
获取播放器静音状态(主动方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)getPlayerMuteStatus: | 获取当前播放器静音状态 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 获取当前播放器静音状态
/// @param closure YES 静音中 NO 未静音
- (void)getPlayerMuteStatus:(void(^)(BOOL status))closure;
主动操作播放器静音操作(主动方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)mutePlayerVoice: closure: | 主动操作播放器静音操作 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 主动操作播放器静音操作
/// @param result result YES 静音 NO 解除静音
/// @param closure 操作回调
- (void)mutePlayerVoice:(BOOL)result closure:(void(^)(BOOL result))closure;
主动获取直播状态(主动方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)getLiveStatusSucced: failed: | 主动获取直播状态 | CCSDK/RequestData.h |
示例代码
/// 4.8.0 new
/// 主动获取直播状态
/// @param succedClosure 收到播放直播状态 0.正在直播 1.未开始直播
/// @param failedClosure 错误信息
- (void)getLiveStatusSucced:(void (^)(NSInteger status))succedClosure
failed:(void (^)(NSString *message))failedClosure;
在线回放新增API:
设置播放器核心(属性)
参数 | 类型 | 说明 | 所在类 |
---|---|---|---|
playbackCoreType | Enum | 在线回放播放核心(默认:PlaybackCoreTypeDefualt) | CCSDK/PlayParameter.h |
示例代码
/// 在线回放播放器核心
typedef NS_ENUM(NSUInteger, PlaybackCoreType) {
///使用HDSMedia播放器(默认)
PlaybackCoreTypeDefualt,
///使用系统AVPlayer播放器
PlaybackCoreTypeOrigin,
};
/// 在线回放播放核心(默认:PlaybackCoreTypeDefualt)
@property (nonatomic, assign) PlaybackCoreType playbackCoreType;
回调单个聊天文件数据 (会多次回调)(代理方法)
方法 | 说明 | 所在类 |
---|---|---|
(void)didReceiveChatMessage: | 回调单个聊天文件数据 (会多次回调) | CCSDK/RequestDataPlayBack.h |
示例代码
/// 回调单个聊天文件数据 (会多次回调)
/// @param chats 聊天数组
- (void)didReceiveChatMessage:(NSArray *)chats;
4.7.1
发布日期:2022.12.26
demo适配iPad
4.7.0
发布日期:2022.11.25
1.新增直播、在线回放文档重试功能 2.新增直播低延迟与多人连麦解耦 3.新增抽奖老虎机样式 4.新增红包雨自定义封面 5.新增隐私协议 6.适配iOS16 7.修复其他已知问题 8.优化Demo层UI
‼ ️ 本地集成 ‘必须’ 的准备 : 替换 CCBundle 资源文件,替换 HDBaseUtils 库,替换 CCSDK 库
文件名称 | 路径 |
---|---|
CCBundle | 压缩包 --> SDK 文件夹 --> Live_iOS_Play_SDK 文件夹 --> 选择 CCBundle.bundle 资源文件进行替换 |
HDBaseUtils | 压缩包 --> SDK 文件夹 --> HDBaseUtils 文件夹 --> 选择 HDBaseUtils.framework 库文件进行替换 |
CCSDK | 压缩包 --> SDK 文件夹 --> Live_iOS_Play_SDK 文件夹 --> 选择 CCSDK.framework 库文件进行替换 |
直播 RequestData.h
API变更:文档加载状态
方法 | 说明 |
---|---|
(void)docLoadCompleteWithIndex: | 文档加载状态 |
示例代码
/**
* @brief 文档加载状态
* index
* 0 文档组件加载成功
* 1 动态文档翻页成功
* 2 非动画文档(白板 图片)文档翻页完成
* 3 文档组件加载失败
* 4 静态文档翻页失败
* 5 动态文档翻页失败
* 6 画板翻页失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
* 9 文档组件重载失败
* 10 静态文档翻页超时
* 11 动态文档动画执行成功
* 12 动态文档动画执行超时
* 13 动态文档加载成功
* 14 动态文档加载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
文档状态说明及操作
参数 | 说明 | 操作 |
---|---|---|
0 | 文档组件加载成功 | 无 |
1 | 动态文档翻页成功 | 无 |
2 | 非动画文档(白板 图片)文档翻页完成 | 无 |
3 | 文档组件加载失败(SDK内部已做重试逻辑,但仍失败需要退出重新进入房间) | 退出重进 |
4 | 静态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
5 | 动态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
6 | 画板翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
7 | 极速动画翻页加载成功 | 无 |
8 | 极速动画翻页加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
9 | 文档组件重载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
10 | 静态文档翻页超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
11 | 动态文档动画执行成功 | 无 |
12 | 动态文档动画执行超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
13 | 动态文档加载成功 | 无 |
14 | 动态文档加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
新增API:重载翻页
方法 | 说明 |
---|---|
(void)reloadPageChange: | 重载翻页 |
示例代码
/// 重载翻页
/// @param closure 操作回调
- (void)reloadPageChange:(void (^)(BOOL result, NSString *message))closure {
if (result == NO) {
// 重载翻页操作失败,错误信息 message
}
}
在线回放 RequestDataPlayBack.h
API变更:文档加载状态
方法 | 说明 |
---|---|
(void)docLoadCompleteWithIndex: | 文档加载状态 |
示例代码
/**
* @brief 文档加载状态
* index
* 0 文档组件加载成功
* 1 动态文档翻页成功
* 2 非动画文档(白板 图片)文档翻页完成
* 3 文档组件加载失败
* 4 静态文档翻页失败
* 5 动态文档翻页失败
* 6 画板翻页失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
* 9 文档组件重载失败
* 10 静态文档翻页超时
* 11 动态文档动画执行成功
* 12 动态文档动画执行超时
* 13 动态文档加载成功
* 14 动态文档加载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
文档状态说明及操作
参数 | 说明 | 操作 |
---|---|---|
0 | 文档组件加载成功 | 无 |
1 | 动态文档翻页成功 | 无 |
2 | 非动画文档(白板 图片)文档翻页完成 | 无 |
3 | 文档组件加载失败(SDK内部已做重试逻辑,但仍失败需要退出重新进入房间) | 退出重进 |
4 | 静态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
5 | 动态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
6 | 画板翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
7 | 极速动画翻页加载成功 | 无 |
8 | 极速动画翻页加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
9 | 文档组件重载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
10 | 静态文档翻页超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
11 | 动态文档动画执行成功 | 无 |
12 | 动态文档动画执行超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
13 | 动态文档加载成功 | 无 |
14 | 动态文档加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
新增API:重载数据获取失败(代理)
方法 | 说明 |
---|---|
(void)onPageDataError | 翻页数据获取失败,请使用 "-(void)reloadPageData;" 重新获取 |
示例代码
/// 翻页数据获取失败,请使用 "-(void)reloadPageData;" 重新获取
- (void)onPageDataError;
新增API:重载翻页数据(主动)
方法 | 说明 |
---|---|
(void)reloadPageData | 重载翻页数据 |
示例代码
/// 重载翻页数据
- (void)reloadPageData;
新增API:重载翻页(主动)
方法 | 说明 |
---|---|
(void)reloadPageChange | 重载翻页 |
示例代码
/// 重载翻页
- (void)reloadPageChange;
PlayParameter.h 类中修改 NewLotteryMessageModel 类 infos 字段增加参数
参数 | 是否必须 | 注释 |
---|---|---|
onlineUsers | (NSArray 必须) | 参与抽奖名单 例:@[@{@"avar":@"头像",@"name":用户名}] |
prizeNum | (NSInteger 必须) | 奖品个数 |
onlineNumber | (NSInteger 必须) | 参与在线人数 |
lotteryType | (NSInteger 必须) | 抽奖类型 0:普通抽奖 1:老虎机抽奖 |
示例代码
/**
* 抽奖信息 infos
* infos 包含的字段: 注:字段对应的值可能为空
* lotteryStatus (NSInteger 必须) 抽奖状态: 0抽奖创建成功, 1抽奖取消成功, 2抽奖已完成, 3抽奖异常结束
* lotteryId (NSString 必须) 抽奖ID
* collectTemplate (NSArray 必须) 用户信息模板 例:@[@{@"index":index序号,@"title":提示,@"tips":@"提示"}]
* isWinner (BOOL 必须) 是否中奖
* ownUserInfo (NSDictionary 必须) 中奖者信息 例:@{@"userAvatar":头像,@"userName":用户名,@"userId":用户id,@"prizeCode":中奖码}
* prize (NSDictionary 必须) 奖品信息 例:@{@"name":奖品名字}
* userInfos (NSArray 必须) 中奖名单 例:@[@{@"userAvatar":头像,@"userName":用户名,@"userId":用户id,@"prizeCode":中奖码}]
* onlineUsers (NSArray 必须) 参与抽奖名单 例:@[@{@"avar":@"头像",@"name":用户名}]
* prizeNum (NSInteger 必须) 奖品个数
* onlineNumber (NSInteger 必须) 参与在线人数
* lotteryType (NSInteger 必须) 抽奖类型 0:普通抽奖 1:老虎机抽奖
*/
@property (nonnull, strong) NSDictionary *infos;
4.5.0
发布日期:2022.08.01
1.新增直播带货功能
PS:4.5.0 版本直播带货功能详情见《云直播直播带货功能接入文档》
4.3.0
发布日期:2022.06.15
1.新增直播邀请卡功能 2.新增直播问卷功能 3.优化已知问题 4.API变更
RequestData.h API变更
视频状态(代理方法)
方法 | 说明 |
---|---|
视频状态 |
示例代码
/**
* @brief 视频状态 (已废弃)
* rseult playing/paused/loading/buffing
*
* 播放器状态需关注以下API
* - (void)HDMoviePlayBackStateDidChange:(HDMoviePlaybackState)state;
* - (void)HDMovieLoadStateDidChange:(HDMovieLoadState)state;
*/
-(void)videoStateChangeWithString:(NSString *) result;
RequestDataPlayBack.h API变更
视频状态(代理方法)
方法 | 说明 |
---|---|
视频状态 |
示例代码
/**
* @brief 视频状态 (已废弃)
* rseult playing/paused/loading
*
* 播放器状态需关注以下API
* - (void)HDMoviePlayBackStateDidChange:(HDMoviePlaybackState)state;
* - (void)HDMovieLoadStateDidChange:(HDMovieLoadState)state;
* - (void)HDMoviePlayerPlaybackDidFinish:(HDMovieFinishReason)reason;
*/
-(void)videoStateChangeWithString:(NSString *) result;
PS:4.3.0 版本邀请卡,问卷功能详情见《云直播邀请卡功能接入文档》,《云直播问卷功能接入文档》
4.2.0
发布日期:2022.05.07
1.新增红包雨功能 2.新增投票功能 3.新增鉴黄直播结束提示 4.优化画笔流畅度
PS:4.2.0 版本投票,红包雨功能详情见《云直播投票功能接入文档》,《云直播红包雨功能接入文档》
4.1.0
发布日期:2022.04.02
1.新增声网连麦网络状态回调 2.直播新增点赞功能 3.直播新增打赏功能 4.在线回放新增试看功能 5.离线回放支持动画 6.优化已知问题
PS:4.1.0 版本点赞,打赏功能详情见《云直播点赞功能接入文档》,《云直播打赏功能接入文档》
Cocoapods 新增
Cocoapods 集成 |
---|
pod 'HDSAliyunPlayer' |
PS: 4.0.0 版本需要手动集成
alivcffmpeg.framework
AliyunPlayer.framework
artcSource.framework
artpSource.framework
RtsSDK.framework
直播 RequestData.h API
----- 新增API -----
互动组件功能配置(代理方法)
/// 互动功能配置
/// @param configModel 配置信息
- (void)onInteractionFunctionConfig:(HDSInteractionFunctionModel *)configModel;
获取互动组件Token(主动方法)
/// 获取互动组件 token
/// @param closure 操作回调 (result 操作状态, message 信息)
/// @param tokenClosure token回调 " result == YES 时返回token, result == NO 时返回 @""(空字符串) "
- (void)getInteractionTokenWithClosure:(completeHandler)closure tokenClosure:(interactionTokenClosure)tokenClosure;
推流质量回调(单人连麦)(代理方法)
/// 推流质量回调 (单人连麦)
/// @param quality 流质量
- (void)onPushStreamQuality:(HDSStreamQuality)quality;
拉流质量回调 (单人连麦)(代理方法)
/// 拉流质量回调 (单人连麦)
/// @param quality 流质量
- (void)onPullStreamQuality:(NSString *)streamID quality:(HDSStreamQuality)quality;
----- API变更 -----
双击PPT (代理方法)(已废弃)
/**
* @brief 双击ppt
*/
- (void)doubleCllickPPTView DEPRECATED_MSG_ATTRIBUTE("该方法已废弃");
PS:双击PPT API 状态变更为废弃,功能可用,但后期不再维护。
视频状态改变(代理方法)(命名变更)
/**
* @brief 视频状态改变
* @param state
* HDSMediaPlaybackStateStopped 播放停止
* HDSMediaPlaybackStatePlaying 开始播放
* HDSMediaPlaybackStatePaused 暂停播放
* HDSMediaPlaybackStateInterrupted 播放间断
* HDSMediaPlaybackStateSeekingForward 播放快进
* update --> HDSMediaPlaybackStateSeekingBackward 播放后退
*/
- (void)HDSMediaPlayBackStateDidChange:(HDSMediaPlaybackState)state;
/// update --> :(HDSMediaPlaybackState)
获取流播放状态 (主动方法)(命名变更)
/// 获取流播放状态
- (HDSMediaPlaybackState)getMediaPlayStatus;
/// update --> (HDSMediaPlaybackState)
在线回放 RequestDataPlayBack.h API
----- 新增API -----
试看功能(代理方法)
/// 试看时长
/// @param trialDuration 时长 trialDuration >= 1 代表有 试看时长 < 1 表示没有试看时长
- (void)onTrialDuration:(NSTimeInterval)trialDuration;
----- API变更 -----
双击PPT (代理方法)(已废弃)
/**
* @brief 双击ppt
*/
- (void)doubleCllickPPTView DEPRECATED_MSG_ATTRIBUTE("该方法已废弃");
PS:双击PPT API 状态变更为废弃,功能可用,但后期不再维护。
视频状态改变(代理方法)(命名变更)
/**
* @brief 视频状态改变
* @param state
* HDSMediaPlaybackStateStopped 播放停止
* HDSMediaPlaybackStatePlaying 开始播放
* HDSMediaPlaybackStatePaused 暂停播放
* HDSMediaPlaybackStateInterrupted 播放间断
* HDSMediaPlaybackStateSeekingForward 播放快进
* update --> HDSMediaPlaybackStateSeekingBackward 播放后退
*/
- (void)HDSMediaPlayBackStateDidChange:(HDSMediaPlaybackState)state;
/// update --> :(HDSMediaPlaybackState)
视频播放完成原因 (代理方法)(命名变更)
/**
* @brief 视频播放完成原因
* @param reason 原因
* HDSMediaFinishReasonPlaybackEnded 自然播放结束
* HDSMediaFinishReasonUserExited 用户人为结束
* update --> HDSMediaFinishReasonPlaybackError 发生错误崩溃结束
*/
- (void)HDSMediaPlayerPlaybackDidFinish:(HDSMediaFinishReason)reason;
/// update --> :(HDSMediaFinishReason)
获取流播放状态 (主动方法)(命名变更)
/// 获取流播放状态
- (HDSMediaPlaybackState)getMediaPlayStatus;
/// update --> (HDSMediaPlaybackState)
离线回放 OfflinePlayBack.h API
----- 新增API -----
房间配置信息(代理方法)
/// 房间配置信息
/// @param dic 配置信息
- (void)offline_roomConfiguration:(NSDictionary *)dic;
媒体准备完成(代理方法)
/**
* @brief 媒体准备完成
*/
- (void)mediaPrepared;
所有数据准备完成(代理方法)
/**
* @brief 所有数据准备完成
*
* 数据准备完成后,才能主动获取全量数据
* 获取全量聊天数据:- (void)fetchAllChat:(void (^)(NSArray * results))completion;
* 获取全量问答数据:- (void)fetchAllQA:(void (^)(NSDictionary * results))completion;
* 获取全量广播数据:- (void)fetchAllBroadcast:(void (^)(NSArray * results))completion;
* 获取全量随堂测数据:- (void)fetchAllPractic:(void (^)(NSArray * results))completion;
* 获取全量翻页数据:- (void)fetchAllPageChange:(void (^)(NSArray *results))completion;
*/
- (void)dataPrepared;
获取全量聊天数据(主动方法)
/**
* @brief 获取全量聊天数据
* @param completion 数据回调
*/
- (void)fetchAllChat:(void (^)(NSArray * results))completion;
获取全量问答数据(主动方法)
/**
* @brief 获取全量问答数据
* @param completion 数据回调
*/
- (void)fetchAllQA:(void (^)(NSArray * results))completion;
获取全量广播数据(主动方法)
/**
* @brief 获取全量广播数据
* @param completion 数据回调
*/
- (void)fetchAllBroadcast:(void (^)(NSArray * results))completion;
获取全量随堂测数据(主动方法)
/**
* @brief 获取全量随堂测数据
* @param completion 数据回调
*/
- (void)fetchAllPractic:(void (^)(NSArray * results))completion;
获取全量翻页数据(主动方法)
/**
* @brief 获取全量翻页数据
* @param completion 数据回调
*/
- (void)fetchAllPageChange:(void (^)(NSArray *results))completion;
校验文件MD5值(主动方法)
/// 校验文件MD5值
/// @param filePath 文件路径
/// @param MD5 源文件MD5值
/// @return YES 文件正常 / NO 文件已损坏
- (BOOL)HDSCheckFileMD5:(NSString *)filePath MD5:(NSString *)MD5;
----- API变更 -----
视频状态改变(代理方法)(命名变更)
/**
* @brief 视频状态改变
* @param state
* HDSMediaPlaybackStateStopped 播放停止
* HDSMediaPlaybackStatePlaying 开始播放
* HDSMediaPlaybackStatePaused 暂停播放
* HDSMediaPlaybackStateInterrupted 播放间断
* HDSMediaPlaybackStateSeekingForward 播放快进
* HDSMediaPlaybackStateSeekingBackward 播放后退
*/
- (void)HDSMediaPlayBackStateDidChange:(HDSMediaPlaybackState)state;
/// update --> :(HDSMediaPlaybackState)
视频播放完成原因 (代理方法)(命名变更)
/**
* @brief 视频播放完成原因
* @param reason 原因
* HDSMediaFinishReasonPlaybackEnded 自然播放结束
* HDSMediaFinishReasonUserExited 用户人为结束
* HDSMediaFinishReasonPlaybackError 发生错误崩溃结束
*/
- (void)HDSMediaPlayerPlaybackDidFinish:(HDSMediaFinishReason)reason;
/// update --> :(HDSMediaFinishReason)
获取流播放状态 (主动方法)(命名变更)
/// 获取流播放状态
- (HDSMediaPlaybackState)getMediaPlayStatus;
/// update --> (HDSMediaPlaybackState)
4.0.0
发布日期:2022.01.19
1.直播、在线回放新增视频logo功能 2.新增红包雨功能 3.在线回放新增自定义字段 4.登录用户名称支持40字符 5.图片地址链接替换为HTTPS 6.修复以及优化已知问题
PS: 4.0.0 版本SDK更新详情见《云直播 iOS 观看端 4.0.0 SDK 升级文档》
3.22.0
发布日期:2023.05.29
1.新增聊天自定义表情功能 2.新增网络检测页面 3.SDK层新增文档截图API 4.修复其他已知问题
新增API:
聊天支持自定义表情
房间是否拥有自定义表情使用权限
方法 | 说明 |
---|---|
(BOOL)hasEmojisUsePermission | 房间是否拥有自定义表情使用权限(房间有聊天模版 + 自定义表情开关打开) |
示例代码
/**
* @brief 房间是否拥有自定义表情使用权限(房间有聊天模版 + 自定义表情开关打开)
*/
+ (BOOL)hasEmojisUsePermission;
每个聊天表情对应的key的集合
方法 | 说明 |
---|---|
(NSArray *)emojiKeys | 每个聊天表情对应的key的集合 |
示例代码
/**
* @brief 每个聊天表情对应的key的集合
*/
+ (NSArray *)emojiKeys;
Example code:
(lldb) po [RequestData emojiKeys]
<__NSFrozenArrayM 0x11fd8bde0>(
[大笑],
[哭],
[白眼],
[啊],
[卖萌],
[晕],
[可怜],
[无语],
[愤怒],
[色]
)
聊天表情对应plist文件配置表
方法 | 说明 |
---|---|
(NSArray *)emojisPlistInfo | 聊天表情对应plist文件配置表 |
示例代码
/**
* @brief 聊天表情对应plist文件配置表
*/
+ (NSArray *)emojisPlistInfo;
Example code:
(lldb) po [RequestData emojisPlistInfo]
<__NSArrayI 0x119ad16d0>(
{
img = "https://cclivematerial.oss-cn-beijing.aliyuncs.com/image/41A6BAB5115465D1/1678179715016_48_1847987378_%E6%99%95.png";
name = "[大笑]";
},
{
img = "https://cclivematerial.oss-cn-beijing.aliyuncs.com/image/41A6BAB5115465D1/1678179674548_24_1542554140_%E5%93%AD.png";
name = "[哭]";
}
)
根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图)
方法 | 说明 |
---|---|
(UIImage *)emojiCachedForName: | 根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图) |
示例代码
/**
* @brief 根据表情name获取本地缓存表情image (如果该表情加载失败,会提供占位图)
*/
+ (UIImage *)emojiCachedForName:(NSString *)emojiName;
Example code:
(lldb) po [RequestData emojiCachedForName:@"[大笑]"]
<UIImage: 0x11ff91870>, {27, 27}
检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑)
方法 | 说明 |
---|---|
(BOOL)isEmojiLoadComplete | 检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑) |
示例代码
/**
* @brief 检查自定义聊天表情是否加载完成 (如果加载失败,会再次触发加载逻辑)
*/
- (BOOL)isEmojiLoadComplete;
自定义表情加载回调监听
方法 | 说明 |
---|---|
(void)onEmojiLoadingResult: | 自定义聊天表情加载状态回调 |
示例代码
/**
* @brief 自定义聊天表情加载状态回调
*/
- (void)onEmojiLoadingResult:(BOOL)result message:(NSString *)message;
Example code:
- (void)onEmojiLoadingResult:(BOOL)result message:(NSString *)message {
NSLog(@"%s--%d--%@",__func__,result,message);
}
获取文档截图
方法 | 说明 |
---|---|
(UIImage *)getDocThumber | 获取文档截图 |
示例代码
/// 3.22.0 new
/// 获取文档截图
- (UIImage *)getDocThumber;
3.21.0
发布日期:2022.12.29
1.CDN线路切换提升稳定性 2.回放画笔流畅度优化 3.连麦升级为动态库 4.修复其他已知问题
‼ ️ 本地集成 ‘必须’ 的准备 : 替换 CCBundle 资源文件,替换 HDBaseUtils(1.1.13) 库,替换 CCSDK 库
‼ ️ 声网连麦升级为动态库,集成方式建议 Pod 集成。声网连麦库版本 3.7.2(无连麦版本无需关注)
集成示例
pod 'AgoraRtcEngine_iOS', '3.7.2'
3.19.0
发布日期:2022.10.28
1.直播支持重载文档翻页功能 2.优化直播、在线回放文档状态回调 3.修复优化其它已知问题
‼ ️ 本地集成 ‘必须’ 的准备 : 替换 CCBundle 资源文件,替换 HDBaseUtils 库,替换 CCSDK 库
文件名称 | 路径 |
---|---|
CCBundle | 压缩包 --> SDK 文件夹 --> Live_iOS_Play_SDK 文件夹 --> 选择 CCBundle.bundle 资源文件进行替换 |
HDBaseUtils | 压缩包 --> SDK 文件夹 --> HDBaseUtils 文件夹 --> 选择 HDBaseUtils.framework 库文件进行替换 |
CCSDK | 压缩包 --> SDK 文件夹 --> Live_iOS_Play_SDK 文件夹 --> 选择 CCSDK.framework 库文件进行替换 |
直播 RequestData.h
API变更:文档加载状态
方法 | 说明 |
---|---|
(void)docLoadCompleteWithIndex: | 文档加载状态 |
示例代码
/**
* @brief 文档加载状态
* index
* 0 文档组件加载成功
* 1 动态文档翻页成功
* 2 非动画文档(白板 图片)文档翻页完成
* 3 文档组件加载失败
* 4 静态文档翻页失败
* 5 动态文档翻页失败
* 6 画板翻页失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
* 9 文档组件重载失败
* 10 静态文档翻页超时
* 11 动态文档动画执行成功
* 12 动态文档动画执行超时
* 13 动态文档加载成功
* 14 动态文档加载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
文档状态说明及操作
参数 | 说明 | 操作 |
---|---|---|
0 | 文档组件加载成功 | 无 |
1 | 动态文档翻页成功 | 无 |
2 | 非动画文档(白板 图片)文档翻页完成 | 无 |
3 | 文档组件加载失败(SDK内部已做重试逻辑,但仍失败需要退出重新进入房间) | 退出重进 |
4 | 静态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
5 | 动态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
6 | 画板翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
7 | 极速动画翻页加载成功 | 无 |
8 | 极速动画翻页加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
9 | 文档组件重载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
10 | 静态文档翻页超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
11 | 动态文档动画执行成功 | 无 |
12 | 动态文档动画执行超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
13 | 动态文档加载成功 | 无 |
14 | 动态文档加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
新增API:重载翻页
方法 | 说明 |
---|---|
(void)reloadPageChange: | 重载翻页 |
示例代码
/// 重载翻页
/// @param closure 操作回调
- (void)reloadPageChange:(void (^)(BOOL result, NSString *message))closure {
if (result == NO) {
// 重载翻页操作失败,错误信息 message
}
}
在线回放 RequestDataPlayBack.h
API变更:文档加载状态
方法 | 说明 |
---|---|
(void)docLoadCompleteWithIndex: | 文档加载状态 |
示例代码
/**
* @brief 文档加载状态
* index
* 0 文档组件加载成功
* 1 动态文档翻页成功
* 2 非动画文档(白板 图片)文档翻页完成
* 3 文档组件加载失败
* 4 静态文档翻页失败
* 5 动态文档翻页失败
* 6 画板翻页失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
* 9 文档组件重载失败
* 10 静态文档翻页超时
* 11 动态文档动画执行成功
* 12 动态文档动画执行超时
* 13 动态文档加载成功
* 14 动态文档加载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
文档状态说明及操作
参数 | 说明 | 操作 |
---|---|---|
0 | 文档组件加载成功 | 无 |
1 | 动态文档翻页成功 | 无 |
2 | 非动画文档(白板 图片)文档翻页完成 | 无 |
3 | 文档组件加载失败(SDK内部已做重试逻辑,但仍失败需要退出重新进入房间) | 退出重进 |
4 | 静态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
5 | 动态文档翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
6 | 画板翻页失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
7 | 极速动画翻页加载成功 | 无 |
8 | 极速动画翻页加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
9 | 文档组件重载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
10 | 静态文档翻页超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
11 | 动态文档动画执行成功 | 无 |
12 | 动态文档动画执行超时(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
13 | 动态文档加载成功 | 无 |
14 | 动态文档加载失败(展示文档刷新按钮,用户可手动出发文档重载) | 重载翻页 |
3.18.1
发布日期:2021.12.17
1.修复单人连麦功能可能出现连麦失败的问题 2.修复播放器可能出现叠音问题 3.修复其他已知bug
3.18.0
发布日期:2021.11.03
特别提示
1. “ 3.18.0 版本 ” 新增多人连麦功能,3.18.0之前版本连麦相关功能所有API不可用,升级后需要重新对接,具体请见 “ 新连麦接入文档 “ ;
https://hdgit.bokecc.com/ccvideo/Live_iOS_Play_SDK/-/tags , 对接文档位于资源包中。
2. 如需对接不包含多人连麦功能的SDK,请对接3.18.0之前版本。地址:1.支持多人连麦功能
2.支持适配直播观看模式
3.优化在线回放画笔数据处理
4.优化推流异常播放展示效果
3.17.13
发布日期:2022.10.11
1.新增隐私协议说明 2.iOS16系统功能及UI适配 3.修复直播,在线回放中断后继续播放问题
3.17.12
发布日期:2022.08.08
1.优化低性能设备播放加密回放问题
3.17.11
发布日期:2022.07.22
1.新增直播DP预加载功能 2.新增在线回放DP预加载功能 3.新增在线回放文档翻页数据获取异常消息通知 4.新增在线回放文档支持重载文档翻页数据功能 5.新增在线回放文档支持翻页失败时刷新翻页功能 6.新增在线回放支持选择不同的播放器核心 7.修复已知问题
注意事项
1.本地集成时必须替换最新的 CCBundle 文件
2.本地集成时必须替换最新的 HDBaseUtils.framework
3.Cocoapods 集成必须更新最新的 HDBaseUtils (1.1.7)
新增API
RequestDataPlayBack.h 文件新增
1.翻页数据获取异常消息通知(代理方法)
方法 | 说明 |
---|---|
(void)onPageDataError | 翻页数据获取失败,请使用 "-(void)reloadPageData;" 重新获取 |
示例代码
/// 翻页数据获取失败,请使用 "-(void)reloadPageData;" 重新获取
- (void)onPageDataError;
2.重载翻页数据(主动方法)
方法 | 说明 |
---|---|
(void)reloadPageData | 重载翻页数据 |
示例代码
/// 重载翻页数据
- (void)reloadPageData;
3.文档支持翻页失败时刷新翻页(主动方法)
方法 | 说明 |
---|---|
(void)reloadPageChange | 重载翻页 |
示例代码
/**
* @brief 文档加载状态
* index
* 0 文档组件初始化完成
* 1 动画文档加载完成
* 2 非动画翻页加载成功
* 3 文档组件加载失败
* 4 非动画翻页加载失败
* 5 文档动画加载失败
* 6 画板加载失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
* 9 文档组件重载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index {
if (index == 4 || index == 5) {
// 翻页失败,可在收到此消息后 调用 - (void)reloadPageChange;
}
}
/// 重载翻页
- (void)reloadPageChange;
PlayParameter.h 文件新增
1. 新增设置播放器属性
方法 | 说明 |
---|---|
playbackCoreType | 在线回放播放核心(默认:PlaybackCoreTypeDefualt) |
示例代码
/// 在线回放播放器核心
typedef NS_ENUM(NSUInteger, PlaybackCoreType) {
///使用HDSMedia播放器(默认)
PlaybackCoreTypeDefualt,
///使用系统AVPlayer播放器
PlaybackCoreTypeOrigin,
};
/// 在线回放播放核心(默认:PlaybackCoreTypeDefualt)
@property (nonatomic, assign) PlaybackCoreType playbackCoreType;
3.17.10
发布日期:2022.06.23
1.指定离线回放文件根目录 2.修复已知问题
PlayParameter.h 文件新增属性
typedef NS_ENUM(NSUInteger, SpecifyOfflineFileDirType) {
SpecifyOfflineFileDirTypeDocuments,
SpecifyOfflineFileDirTypeLibrary,
};
/// 指定离线回放文件根目录类型 (仅限离线回放使用, 默认根路径 Documents)
@property (nonatomic, assign) SpecifyOfflineFileDirType specifyOfflineFileDirType;
参数变更
viewerCustomua
参数 | 注释 |
---|---|
viewerCustomua | 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符 |
示例代码
/**
* @brief 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符
*/
@property(nonatomic, copy)NSString *viewerCustomua;
viewercustominfo
参数 | 注释 |
---|---|
viewercustominfo | json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值 |
示例代码
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
3.17.9
发布日期:2022.04.20
1.优化在线回放播放器
2.优化已知问题
在线回放 RequestDataPlayBack.h API 变更
废弃API
方法 | 说明 |
---|---|
示例代码
/**
* @brief 视频加载速度 (已废弃)
* @param speed 视频加载速度字符串
*/
- (void)onBufferSpeed:(NSString *)speed DEPRECATED_MSG_ATTRIBUTE("该方法已废弃");
3.17.8.2
发布日期:2022.06.17
1.指定离线回放文件根目录
2.修复已知问题
PlayParameter.h 文件新增属性
typedef NS_ENUM(NSUInteger, SpecifyOfflineFileDirType) {
SpecifyOfflineFileDirTypeDocuments,
SpecifyOfflineFileDirTypeLibrary,
};
/// 指定离线回放文件根目录类型 (仅限离线回放使用, 默认根路径 Documents)
@property (nonatomic, assign) SpecifyOfflineFileDirType specifyOfflineFileDirType;
参数变更
viewerCustomua
参数 | 注释 |
---|---|
viewerCustomua | 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符 |
示例代码
/**
* @brief 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符
*/
@property(nonatomic, copy)NSString *viewerCustomua;
viewercustominfo
参数 | 注释 |
---|---|
viewercustominfo | json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值 |
示例代码
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
3.17.8.1
发布日期:2020.06.07
1.优化已知问题
参数变更
viewerCustomua
参数 | 注释 |
---|---|
viewerCustomua | 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符 |
示例代码
/**
* @brief 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符
*/
@property(nonatomic, copy)NSString *viewerCustomua;
viewercustominfo
参数 | 注释 |
---|---|
viewercustominfo | json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值 |
示例代码
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
3.17.8
发布日期:2022.03.24
1.新增日志收集
注:日志收集功能为 必选项 ,本地接入需要使用最新的 CCBundle 资源文件
新增依赖库 | Cocoapods 接入 | 本地接入 | 签名选择 |
---|---|---|---|
CCFuncTool.framework (动态库) | pod 'HDSCCFuncTool' | 下载zip包中 CCFuncTool 文件夹下,拖入项目中 | Embed & Sign |
SSZipArchive.framework (动态库) | pod 'HDSSZip' | 下载zip包中 CCFuncTool 文件夹下,拖入项目中 | Embed & Sign |
CocoaLumberjack.framework (动态库) | pod 'HDSCocoaLumberjack' | 下载zip包中 HDSCocoaLumberjack 文件夹下,拖入项目中 | Embed & Sign |
示例代码如下:
1.在 Appdelegate.m 文件中 导入
#import "CCSDK/HDSPreserve.h"
2.在 didFinishLaunchingWithOptions 方法中添加日志收集方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[HDSPreserve shared] HDSApplicationDidFinishLaunching];
return YES;
}
3.在 applicationWillTerminate 方法中添加日志收集方法
- (void)applicationWillTerminate:(UIApplication *)application {
[[HDSPreserve shared] HDSApplicationWillTerminate];
}
2.离线回放新增校验文件MD5
示例代码
/// 校验文件MD5值
/// @param filePath 文件路径
/// @param MD5 源文件MD5值
/// @return YES 文件正常 / NO 文件已损坏
- (BOOL)HDSCheckFileMD5:(NSString *)filePath MD5:(NSString *)MD5;
废弃API
方法 | 说明 |
---|---|
示例代码
/**
* @brief 双击ppt
*/
- (void)doubleCllickPPTView DEPRECATED_MSG_ATTRIBUTE("该方法已废弃");
参数变更
viewerCustomua
参数 | 注释 |
---|---|
viewerCustomua | 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符 |
示例代码
/**
* @brief 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符
*/
@property(nonatomic, copy)NSString *viewerCustomua;
viewercustominfo
参数 | 注释 |
---|---|
viewercustominfo | json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值 |
示例代码
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
3.17.7
发布日期:2022.03.04
1.新增日志收集
注:日志收集功能为 必选项 ,本地接入需要使用最新的 CCBundle 资源文件
新增依赖库 | Cocoapods 接入 | 本地接入 | 签名选择 |
---|---|---|---|
CCFuncTool.framework (动态库) | pod 'HDSCCFuncTool' | 下载zip包中 CCFuncTool 文件夹下,拖入项目中 | Embed & Sign |
SSZipArchive.framework (动态库) | pod 'HDSSZip' | 下载zip包中 CCFuncTool 文件夹下,拖入项目中 | Embed & Sign |
CocoaLumberjack.framework (动态库) | pod 'HDSCocoaLumberjack' | 下载zip包中 HDSCocoaLumberjack 文件夹下,拖入项目中 | Embed & Sign |
示例代码如下:
1.在 Appdelegate.m 文件中 导入
#import "CCSDK/HDSPreserve.h"
2.在 didFinishLaunchingWithOptions 方法中添加日志收集方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[HDSPreserve shared] HDSApplicationDidFinishLaunching];
return YES;
}
3.在 applicationWillTerminate 方法中添加日志收集方法
- (void)applicationWillTerminate:(UIApplication *)application {
[[HDSPreserve shared] HDSApplicationWillTerminate];
}
2.离线回放新增校验文件MD5
示例代码
/// 校验文件MD5值
/// @param filePath 文件路径
/// @param MD5 源文件MD5值
/// @return YES 文件正常 / NO 文件已损坏
- (BOOL)HDSCheckFileMD5:(NSString *)filePath MD5:(NSString *)MD5;
参数变更
viewerCustomua
参数 | 注释 |
---|---|
viewerCustomua | 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符 |
示例代码
/**
* @brief 用户自定义参数,需和后台协商,没有定制传@"" 长度不能超过40个字符
*/
@property(nonatomic, copy)NSString *viewerCustomua;
viewercustominfo
参数 | 注释 |
---|---|
viewercustominfo | json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值 |
示例代码
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过200个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
3.17.6
发布日期:2022.2.10
1.离线回放支持文档动画展示
2.优化翻页及画笔检索逻辑
3.优化直播状态回调逻辑
4.修复聊天链接无法跳转问题
3.17.5
发布日期:2021.12.16
1.优化聊天输入框显示 2.优化直播、在线回放网络切换逻辑 3.修复离线回放文档异常问题
3.17.4
发布日期:2021.12.07
1.新增双师转播功能 2.优化直播文档区域无法滚动 3.优化Demo UI层的bug 4.优化直播网络重连逻辑
3.17.3
发布日期:2021.11.10
1.优化iOS9系统兼容 2.优化在线回放导致CPU过高 3.优化离线回放画笔显示 4.优化网络请求cookies
3.17.2
发布日期:2021.07.23
1.修复防录屏文档不生效问题
2.修复切换网络导致问卷异常问题
3.17.1
发布日期:2021.07.14
1.优化在线回放翻页,画笔数据
3.17.0
发布日期:2021.06.30
1.新增课件水印
2.文档模块重构优化
3.修复离线回放名称、简介修改未生效问题
升级此版本必须更换新版 HDBaseUtils.framework(版本号1.1.0)
注:【新版 HDBaseUtils.framework 为当前版本包中 SDK 文件夹下的 HDBaseUtils 】
3.16.2
发布日期:2021.06.10
1.更改跑马灯时间单位为毫秒
2.在线回放 "请求回放地址成功" API 变更
3.统一在线回放,聊天 问答 广播 随堂测 数据格式
RequestDataPlayBack.h "请求回放地址成功" API 变更
/**
* @brief 请求回放地址成功 (已废弃)
*
* 废弃版本 3.16.2
* 兼容版本 2021年12月1日后将不再维护
* 新方法: - (void)mediaPrepared;
*/
- (void)requestSucceed;
3.16.1
发布日期:2021.05.27
1.优化在线回放画笔显示
2.优化离线回放记忆播放画笔显示
3.修复SDK设置PPT背景颜色不生效问题
4.修复剪辑合并回放视频文档不同步问题
PlayParameter.h 属性变更 【 升级此版本SDK后必须修改 】
/**
* @brief ppt默认底色,不写默认为白色(@"#FFFFFF")
*/
@property(nonatomic, copy) NSString *defaultColor;//ppt默认底色,不写默认为白色(@"#FFFFFF")
RequestDataPlayBack.h API新增字段
/**
* 新增 id 新版聊天id
* 原有 chatId 旧版聊天id
*/
- (void)onParserChat:(NSArray *)arr;
/**
* 新增 userRole 新版回答角色
* 原有 answerUserRole 旧版回答角色
*/
- (void)onParserQuestionArr:(NSArray *)questionArr onParserAnswerArr:(NSArray *)answerArr;
3.16.0
发布日期:2021.05.20
1.提醒样式统一规范
2.连麦库升级优化
3.弹幕功能交互调整,样式优化
4.新增源数据静态化,提高系统兼容性
5.直播、回放播放器样式优化,竖屏增加“更多”设置
6.修复修改在线回放名称及简介不生效问题
7.修复离线回放画笔异常问题
8.修复部分情况下demo崩溃问题
RequestDataPlayBack.h 文件 新增API
/**
* 3.16.0 new
* @brief 获取全量聊天数据
* @param completion 数据回调
*/
- (void)fetchAllChat:(void (^)(NSArray * results))completion;
/**
* 3.16.0 new
* @brief 获取全量问答数据
* @param completion 数据回调
*/
- (void)fetchAllQA:(void (^)(NSArray * results))completion;
/**
* 3.16.0 new
* @brief 获取全量广播数据
* @param completion 数据回调
*/
- (void)fetchAllBoardcast:(void (^)(NSArray * results))completion;
/**
* 3.16.0 new
* @brief 获取全量随堂测数据
* @param completion 数据回调
*/
- (void)fetchAllPractic:(void (^)(NSArray * results))completion;
/**
* 3.16.0 new
* @brief 获取全量翻页数据
* @param completion 数据回调
*/
- (void)fetchAllPageChange:(void (^)(NSArray *results))completion;
RequestDataPlayBack.h 文件 API 新增字段
/**
* @brief 获取房间信息,主要是要获取直播间模版来类型,根据直播间模版类型来确定界面布局
* 房间信息
*
* 3.16.0 新增 recordInfo 字段
*
* 新增参数名称 类型 是否必须 示例
* recordInfo NSDictionary (非必须) @{@"title":@"房间标题",@"description":@"简介信息"}
*/
-(void)roomInfo:(NSDictionary *)dic;
3.15.4
发布日期:2021.04.29
1.修复在线回放部分文档无法翻页的问题
2.优化聊天消息
3.15.3
发布日期:2021.04.15
1.修复demo命名错误
3.15.2
发布日期:2021.04.12
1.优化直播和回放文档白屏,提升文档稳定性
RequestData.h RequestDataPlayBack.h API变更
/**
* @brief 文档加载状态
* index
* 0 文档组件初始化完成
* 1 动画文档加载完成
* 2 非动画翻页加载成功
* 3 文档组件加载失败
* 4 非动画翻页加载失败
* 5 文档动画加载失败
* 6 画板加载失败
* 7 极速动画翻页加载成功
* 8 极速动画翻页加载失败
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
3.15.1
发布日期:2021.03.29
1.API增加防录屏权限开关
RequestData.h RequestDataPlayBack.h OfflinePlayBack.h 新增api
/** * @brief 设置防录屏功能 * @param isEnable YES 开启 NO 关闭(默认) */- (void)setAntiRecordScreen:(BOOL)isEnable;
2.直播、在线回放、离线回放数据增加排序
3.优化在线回放画笔数据,减少崩溃率
4.修复SDK异常崩溃问题
v3.15.0
发布日期:2021.03.18
1.demo及SDK新增查看回放打点信息
RequestDataPlayBack.h 新增
/** * @brief 回放打点数据 * @param dotList 打点信息 * @[HDReplayDotModel,HDReplayDotModel] */- (void)HDReplayDotList:(NSArray *)dotList;
PlayParameter 新增 HDReplayDotModel
/** 打点时间:单位:S */@property (nonatomic, assign) NSInteger time;/** 打点描述 */@property (nonatomic, copy) NSString * _Nullable desc;
2.优化播放器侧边栏交互
3.修复操作后记忆播放提示消失问题
4.修复WiFi切4G视频无法播放问题
5.修复部分回放崩溃问题
v3.14.1
发布日期:2021.02.25
1.修复iOS14来电中断播放后,无法恢复播放问题
2.Demo优化:修复观看回放切换到直播后可能出现聊天数据未清除问题
v3.14.0
发布日期:2021.02.18
1.直播回放demo及SDK支持防录屏功能
2.直播多清晰重构增强
3.回放取消liveid的兼容
新增:
防止录屏:SDK默认开启防止录屏功能,自动检测是否开始或停止录屏,当录屏是SDK进入放录屏模式
api变更:
PlayParameter.h 废弃liveid
/**
* @brief 直播ID,回放时才用到(已废弃)
*/
@property(nonatomic, copy)NSString *liveId;
RequestData.h
废弃api
/**
* @brief 房间的音视频线路 (已废弃)
* @param model LineModel 详情
*
* 废弃版本 3.14.0
* 兼容版本 2021年11月08日之后将不再维护
* 新方法 清晰度回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* 线路回调 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*/
- (void)HDReceivedVideoAudioLinesWithModel:(LineModel *)model;
/**
* @brief 切换线路 监听HDReceivedVideoAudioLinesWithModel代理获取线路/清晰度等信息 (已废弃)
* @param quality 清晰度 0-原画;200-流畅;300-标清;音频传空字符串
* @param stream 线路 从0开始,如两条线路则传0或1
* results { //切换结果
* success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因
* }
* 废弃版本 3.14.0
* 兼容版本 2021年11月08日之后将不再维护
* 新方法 切换播放器类型 - (void)changePlayMode:(PLAY_MODE_TYEP)mode;
* 切换清晰度 - (void)changeQuality:(NSString *)quality completion:(void (^)(NSDictionary * results))completion;
* 切换线路 - (void)changeLine:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
*/
- (void)changeLineWithQuality:(NSString *)quality Stream:(NSInteger)stream completion:(void (^)(NSDictionary * results))completion;
新增api
/**
* The New Method (3.14.0)
* @brief 是否开启音频模式
* @param hasAudio HAVE_AUDIO_LINE_TURE 有音频 HAVE_AUDIO_LINE_FALSE 无音频
*
* 触发回调条件 1.初始化SDK登录成功后
*/
- (void)HDAudioMode:(HAVE_AUDIO_LINE)hasAudio;
/**
* The New Method (3.14.0)
* @brief 房间所包含的清晰度 (会多次回调)
* @param dict 清晰度数据
* 清晰度数据 key(包含的键值) type(数据类型) description(描述)
* qualityList(清晰度列表) array @[HDQualityModel(清晰度详情),HDQualityModel(清晰度详情)]
* currentQuality(当前清晰度) object HDQualityModel(清晰度详情)
*
* 触发回调条件 1.初始化SDK登录成功后
* 2.主动调用切换清晰度方法
* 3.主动调用切换视频模式回调
*/
- (void)HDReceivedVideoQuality:(NSDictionary *)dict;
/**
* The New Method (3.14.0)
* @brief 房间包含的音视频线路 (会多次回调)
* @param dict 线路数据
* 线路数据 key(包含的键值) type(数据类型) description(描述)
* lineList(线路列表) array @[@"line1",@"line2"]
* indexNum(当前线路下标) integer 0
*
* 触发回调条件 1.初始化SDK登录成功后
* 2.主动调用切换清晰度方法
* 3.主动调用切换线路方法
* 4.主动调用切换音视频模式回调
*/
- (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
/**
* @brief 切换线路 监听HDReceivedVideoAudioLinesWithModel代理获取线路/清晰度等信息 (已废弃)
* @param quality 清晰度 0-原画;200-流畅;300-标清;音频传空字符串
* @param stream 线路 从0开始,如两条线路则传0或1
* results { //切换结果
* success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因
* }
* 废弃版本 3.14.0
* 兼容版本 2021年11月08日之后将不再维护
* 新方法 切换播放器类型 - (void)changePlayMode:(PLAY_MODE_TYEP)mode;
* 切换清晰度 - (void)changeQuality:(NSString *)quality completion:(void (^)(NSDictionary * results))completion;
* 切换线路 - (void)changeLine:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
*/
- (void)changeLineWithQuality:(NSString *)quality Stream:(NSInteger)stream completion:(void (^)(NSDictionary * results))completion;
/**
* The New Method (3.14.0)
* @brief 切换播放类型
* @param mode PLAY_MODE_TYEP_VIDEO 视频模式(默认)
* PLAY_MODE_TYEP_AUDIO 音频模式(当前回放包含音频线路)
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换播放器类型 切换为音频,回调 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
* 切换为视频,回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*
*/
- (void)changePlayMode:(PLAY_MODE_TYEP)mode completion:(void (^)(NSDictionary * results))completion;
/**
* The New Method (3.14.0)
* @brief 切换清晰度
* @param quality 清晰度
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换清晰度回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*/
- (void)changeQuality:(NSString *)quality completion:(void (^)(NSDictionary * results))completion;
/**
* The New Method (3.14.0)
* @brief 切换线路
* @param index 选择线路下标
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换线路回调方法 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*/
- (void)changeLine:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
v3.13.0
发布日期:2021.01.11
1.直播demo支持后进入用户查看问卷
2.直播demo新增视频清晰度
3.在线回放demo及SDK新增切换视频清晰度
4.在线回放、直播demo新增切换线路
5.在线回放、直播demo新增只听音频功能
6.直播demo播放器、弹幕样式优化
7.api变更
PlayParameter.h 新增枚举类型
/**
* 音视频模式
* PLAY_MODE_TYEP_VIDEO 视频
* PLAY_MODE_TYEP_AUDIO 音频
*/
typedef NS_ENUM(NSUInteger, PLAY_MODE_TYEP) {
PLAY_MODE_TYEP_VIDEO,//视频
PLAY_MODE_TYEP_AUDIO,//音频
};
/**
* 是否有音频线路
* HAVE_AUDIO_LINE_TURE 有音频线路
* HAVE_AUDIO_LINE_FALSE 无音频线路
*/
typedef NS_ENUM(NSUInteger, HAVE_AUDIO_LINE) {
HAVE_AUDIO_LINE_TURE,//有音频线路
HAVE_AUDIO_LINE_FALSE,//无音频线路
};
新增 HDQualityModel 类
/** 清晰度 */
@property (nonatomic, copy) NSString * _Nonnull quality;
/** 描述 */
@property (nonatomic, copy) NSString * _Nonnull desc;
RequestDataPlayBack.h 废弃api
/**
* @brief 接收到播放线路 (已废弃)
* 例:videoArray元素个数 2 代表2条线路 changeLineWithPlayParameter传0或1
*
* 废弃版本 3.13.0
* 兼容版本 2021年10月08日之后将不再维护
* 新方法 清晰度回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* 线路回调 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*
*/
-(void)numberOfReceivedLinesWithVideo:(NSArray *)videoArray audio:(NSArray *)audioArray;
/**
* @brief 切换线路 (已废弃)
* param
* disableVideo 视频传no,音频传yes(账号开启音频模式下才可以传yes)
* lineNum 线路 例:-(void)numberOfReceivedLinesWithVideo:(NSArray *)videoArray audio:(NSArray *)audioArray;中videoArray元素个数为2 则传0或1
* results:
success 0 切换成功 -1切换失败 -2 切换频繁
currentIndex 当前播放线路
*
* 废弃版本 3.13.0
* 兼容版本 2021年10月08日之后将不再维护
* 新方法 切换播放器类型 - (void)changePlayMode:(PLAY_MODE_TYEP)mode;
* 切换清晰度 - (void)changeQuality:(NSString *)quality completion:(void (^)(NSDictionary * results))completion;
* 切换线路 - (void)changeLine:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
*
*/
- (void)changeLineWithPlayParameter:(PlayParameter *)param completion:(void (^)(NSDictionary * results))completion;
RequestDataPlayBack.h 新增api回调
/**
* The New Method (3.13.0)
* @brief 是否开启音频模式
* @param hasAudio HAVE_AUDIO_LINE_TURE 有音频 HAVE_AUDIO_LINE_FALSE 无音频
*
* 触发回调条件 1.初始化SDK登录成功后
*/
- (void)HDAudioMode:(HAVE_AUDIO_LINE)hasAudio;
/**
* The New Method (3.13.0)
* @brief 房间所包含的清晰度 (会多次回调)
* @param dict 清晰度数据
* 清晰度数据 key(包含的键值) type(数据类型) description(描述)
* qualityList(清晰度列表) array @[HDQualityModel(清晰度详情),HDQualityModel(清晰度详情)]
* currentQuality(当前清晰度) object HDQualityModel(清晰度详情)
*
* 触发回调条件 1.初始化SDK登录成功后
* 2.主动调用切换清晰度方法
* 3.主动调用切换视频模式回调
*/
- (void)HDReceivedVideoQuality:(NSDictionary *)dict;
/**
* The New Method (3.13.0)
* @brief 房间包含的音视频线路 (会多次回调)
* @param dict 线路数据
* 线路数据 key(包含的键值) type(数据类型) description(描述)
* lineList(线路列表) array @[@"line1",@"line2"]
* indexNum(当前线路下标) integer 0
*
* 触发回调条件 1.初始化SDK登录成功后
* 2.主动调用切换清晰度方法
* 3.主动调用切换线路方法
* 4.主动调用切换音视频模式回调
*/
- (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
RequestDataPlayBack.h 新增api主动调用方法
/**
* The New Method (3.13.0)
* @brief 切换播放类型
* @param mode PLAY_MODE_TYEP_VIDEO 视频模式(默认)
* PLAY_MODE_TYEP_AUDIO 音频模式(当前回放包含音频线路)
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换播放器类型 切换为音频,回调 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
* 切换为视频,回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*
*/
- (void)changePlayMode:(PLAY_MODE_TYEP)mode completion:(void (^)(NSDictionary * results))completion;
/**
* The New Method (3.13.0)
* @brief 切换清晰度
* @param quality 清晰度
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换清晰度回调 - (void)HDReceivedVideoQuality:(NSDictionary *)dict;
* - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*/
- (void)changeQuality:(NSString *)quality completion:(void (^)(NSDictionary * results))completion;
/**
* The New Method (3.13.0)
* @brief 切换线路
* @param index 选择线路下标
* @param completion 切换结果
* { success 0 切换成功 -1切换失败 -2 切换频繁
* reason 错误原因 }
*
* 切换线路回调方法 - (void)HDReceivedVideoAudioLines:(NSDictionary *)dict;
*/
- (void)changeLine:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
v3.12.2
发布日期:2020.12.25
1.更新 “ 收到播放直播状态api ”,恢复成和3.12之前版本保持一致
/**
* @brief 收到播放直播状态 0.正在直播 1.未开始直播
*/
- (void)getPlayStatue:(NSInteger)status;
注:v3.12.2此次更新针对已对接3.12.0、3.12.1版本SDK,老版本的SDK无需修改。
v3.12.1
发布日期:2020.12.18
1.修复直播无法接收问卷问题
2.修复直播文档翻页异常问题
v3.12.0
发布日期:2020.12.16
-
支持抽奖2.0,新增显示抽奖名称、查看中奖用户、中奖信息收集等功能
代理方法(可选) /** * @brief 抽奖2.0 抽奖信息回调 (该功能需要单独开启) * @param model NewLotteryMessageModel 详情 */ - (void)HDOnLotteryWithModel:(NewLotteryMessageModel *)model; 主动调用(可选) /** * @brief 抽奖2.0 查询抽奖状态 */ - (void)queryLotteryStatus; /** * @brief 抽奖2.0 提交中奖用户信息 * @param collectInfos 用户信息 * collectInfos = @[@{@"index":@(0),@"value":@""}]; * @param lotteryId 中奖订单ID (非必选) * @param completion 请求结果回调 */ - (void)commitLottery:(NSArray *)collectInfos lotteryId:(NSString *)lotteryId completion:(void (^)(BOOL success))completion;
-
优化直播播放逻辑
-
修复在线回放文档异常显示问题
-
修复播放器崩溃问题
-
播放器状态新增api
代理方法(可选) /** * @brief 播放器初始化完成 (会多次回调) */ - (void)HDMediaPlaybackIsPreparedToPlayDidChange:(NSDictionary *)dict;
-
收到直播状态api更改
/** * @brief 收到播放直播状态 1.正在直播 0.未开始直播 */ - (void)getPlayStatue:(NSInteger)status; 注:原有直播状态 0 正在直播 1 未开始直播
-
切换线路及清晰度api变更
已删除
/** * @brief 切换源,firRoadNum表示一共有几个线路,secRoadKeyArray表示每个线路对应的清晰度 */ - (void)firRoad:(NSInteger)firRoadNum secRoadKeyArray:(NSArray *)secRoadKeyArray; /** * @brief 切换播放线路和清晰度 * firIndex表示第几个线路 * key表示该线路对应的secRoadKeyArray里面的元素 */ - (void)switchToPlayUrlWithFirIndex:(NSInteger)firIndex key:(NSString *)key;
新增
代理方法(可选) /** * @brief 房间的音视频线路 * @param model LineModel 详情 */ - (void)HDReceivedVideoAudioLinesWithModel:(LineModel *)model; 主动调用(可选) /** * @brief 切换线路 监听HDReceivedVideoAudioLinesWithModel代理获取线路/清晰度等信息 * @param quality 清晰度 0-原画;200-流畅;300-标清;音频传空字符串 * @param stream 线路 从0开始,如两条线路则传0或1 * results { //切换结果 * success 0 切换成功 -1切换失败 -2 切换频繁 * reason 错误原因 * } */ - (void)changeLineWithQuality:(NSString *)quality Stream:(NSInteger)stream completion:(void (^)(NSDictionary * results))completion;
v3.11.3
发布日期:2020.11.06
- 修复统计上报问题;
- 回放ID长度支持32位;
- 优化视频播放器加载机制,增强兼容性;
v3.11.2
发布日期:2020.10.20
- 私聊屏蔽功能,admin启用私聊屏蔽后,观看端屏蔽入口
- 直播、回放无法播放时支持刷新重新加载
- 小窗视频支持显示加载速度
- SDK兼容天猫精灵蓝牙设备播放
- SDK优化蓝牙耳机连麦功能
- 修复横屏观看直播,聊天输入框遮挡问题
v3.11.1
发布日期:2020.09.22
1.优化文档和画笔兼容性; 2.修复接口验证直播间跑马灯内容展示错误问题;
v3.11.0
发布日期:2020.09.07
1.直播打卡支持自定义打卡提示语
/**
* @brief 收到开始打卡
* dic {
"punchId": "punchId",
"expireTime": "2019-10-26 10:00:00",
"remainDuration": 124
"tips" // 没有提示语则不返回该字段 (新增)
}
* 当没有设置时长,即无过期时间时
* {
"punchId": "asasdasdasdasd",
"remainDuration": -1 //其中-1表示剩余无限时间。
}
*/
-(void)hdReceivedStartPunchWithDict:(NSDictionary *)dic;
2.直播新增用户进出直播间消息通知
/**
* @brief 用户进出直播间提示
* @param model RemindModel 详情
*/
- (void)HDUserRemindWithModel:(RemindModel *)model;
3.直播SDK新增用户禁言群发消息通知
/**
* @brief 禁言用户提示
* @param model BanChatModel 详情
*/
- (void)HDBanChatBroadcastWithModel:(BanChatModel *)model;
4.在线回放SDK新增播放状态api
/**
* @brief 视频准备播放
* @param dict 数据
*/
- (void)HDMediaPlaybackIsPreparedToPlayDidChange:(NSDictionary *)dict;
5.优化WiFi切换4G视频播放及自由翻页PPT闪动问题
v3.10.0
发布日期:2020.08.24
1.回放demo回放新增记忆播放功能
2.新增视频加载的网络速度(直播、在线回放)
/**
* @brief 视频加载速度
* @param speed 视频加载速度字符串
*/
- (void)onBufferSpeed:(NSString *)speed;
3.直播demo随堂测、答题卡新增收起功能及逻辑优化
4.SDK新增回放播放器时间API(在线回放,离线回放)
/**
* @brief 播放器时间
* @param currentTime 当前时间
* @param totalTime 总时间
*/
- (void)HDPlayerCurrentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime;
5.SDK新增视频播放器状态API(直播,在线回放,离线回放)
/**
* @brief 视频状态改变
* @param state
* HDMoviePlaybackStateStopped 播放停止
* HDMoviePlaybackStatePlaying 开始播放
* HDMoviePlaybackStatePaused 暂停播放
* HDMoviePlaybackStateInterrupted 播放间断
* HDMoviePlaybackStateSeekingForward 播放快进
* HDMoviePlaybackStateSeekingBackward 播放后退
*/
- (void)HDMoviePlayBackStateDidChange:(HDMoviePlaybackState)state;
/**
* @brief 视频加载状态
* @param state 播放状态
* HDMovieLoadStateUnknown 未知状态
* HDMovieLoadStatePlayable 视频未完成全部缓存,但已缓存的数据可以进行播放
* HDMovieLoadStatePlaythroughOK 完成缓存
* HDMovieLoadStateStalled 数据缓存已经停止,播放将暂停
*/
- (void)HDMovieLoadStateDidChange:(HDMovieLoadState)state;
/**
* @brief 视频播放完成原因
* @param reason 原因
* HDMovieFinishReasonPlaybackEnded 自然播放结束
* HDMovieFinishReasonUserExited 用户人为结束
* HDMovieFinishReasonPlaybackError 发生错误崩溃结束
*/
- (void)HDMoviePlayerPlaybackDidFinish:(HDMovieFinishReason)reason;
6.优化SDK ,提升稳定性
7.demo层iOS8系统适配
v3.9.1
发布日期: 2020.08.03
1.优化离线回放文档白板不显示
2.优化离线回放播放完成显示逻辑
3.优化进入直播间,断网重连问题
4.修复低帧率直播无声音问题
5.取出ijk的log日志
6.支持真机模拟器
v3.9.0
发布日期: 2020.07.06
-
新增直播删除广播;
//代理方法 /** * @brief 删除广播 * @param dic 删除数据 * dic {action //操作 1.删除 id //广播id } */ - (void)broadcast_delete:(NSDictionary *)dic;
-
直播新增播放失败自动切换线路重试机制;
-
直播、回放、离线回放 新增 PPT支持切换模式;
//主动调用 /** * @brief 主动调用方法 用于调整PPT缩放模式 * @param docFrame 文档的frame * @param PPTScalingMode PPT缩放模式 * 1.一种是全部填充屏幕,可拉伸变形, * 2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边, * 3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边, * 4.根据直播间文档显示模式的返回值进行设置(推荐)(The New Method) * * 需要调整docFrame 请直接调用 - (void)changeDocFrame:(CGRect)docFrame;方法 */ - (void)changeDocFrame:(CGRect)docFrame withPPTScalingMode:(NSInteger)PPTScalingMode;
-
回放、离线回放demo新增手势拖动功能;
-
回放新增回放音频;
-
直播在线人数监听增加自动返回方法;
-
回放文档前后台切换优化;
-
修复回放文档卡顿、画笔丢失问题;
v3.8.2
发布日期: 2020.06.19
- 优化文档异常导致闪退
v3.8.1
发布日期: 2020.06.05
- 修复demo bug,提升稳定性
v3.8.0
发布日期: 2020.05.20
-
新增回放线路切换;
//代理方法 /** *接收到播放线路 例:int值 2 代表两条 changeLineWithNum传0或1 */ -(void)numberOfReceivedLines:(NSInteger)linesCount; //调用方法 /** * @brief 切换线路 * index 传入numberOfReceivedLines的返回值 如:返回2 则传0或1 * results: success 0 切换成功 -1切换品失败 -2 切换频繁 currentIndex 当前播放线路 */ - (void)changeLineWithNum:(NSInteger)index completion:(void (^)(NSDictionary * results))completion;
-
新增跑马灯功能;
/** * @brief 跑马灯信息,需要开启跑马灯功能且iOS 9.0以上 */ -(void)receivedMarqueeInfo:(NSDictionary *)dic;
-
新增课件水印功能;
-
新增直播倒计时功能;
-
回放翻页列表新增文档备注;
-
demo新增是否显示弹幕;
-
demo新增是否显示在线人数;
-
demo随堂测支持判断题;
-
demo文档适合宽度支持滚动查看;
-
demo新增离线回放;
-
优化连麦稳定性;
-
优化弹窗提示语;
-
优化demo横屏聊天;
-
优化问答模块性能;
-
优化文档加载回调及重试;
-
去除UIwebview相关组件;
-
修复bug,提升稳定性;
v3.7.1
发布日期: 2020.03.16
-
新增聊天禁言删除历史记录;
/** * @brief 收到聊天禁言并删除聊天记录 * viewerId 禁言用户id,是自己的话别删除聊天历史,其他人需要删除该用户的聊天 */ -(void)onBanDeleteChat:(NSDictionary *) viewerDic;
-
修复iOS8聊天,文档兼容问题;
-
优化文档加载兼容问题;
v3.7.0
发布日期: 2020.01.06
-
新增获取在线讲师和助教列表方法;
/** 收到老师列表 teachers = ( { id = "";//老师id ip = "";//IP地址 name = "";老师昵称 role = teacher;//角色 } ); */ -(void)onOnlineTeachers:(NSDictionary *)dic;
-
新增获取直播间设置方法;
/** * @brief 房间设置信息 * dic{ "allow_chat" = true;//是否允许聊天 "allow_question" = true;//是否允许问答 "room_base_user_count" = 0;//房间基础在线人数 "source_type" = 0;//对应receivedSwitchSource方法的source_type } *ps:当房间类型没有聊天或者问答时,对应的字段默认为true */ -(void)roomSettingInfo:(NSDictionary *)dic;
-
demo新增视频截图方法;
//获取视频截图 - (void)thumbnailImageAtCurrentTime { UIImage *image = [self.requestData.ijkPlayer thumbnailImageAtCurrentTime]; NSLog(@"获取视频截图%@",image); }
-
demo新增多个回放切换方法;
/** 切换回放,需要重新配置参数 */ - (void)changeVideo;
-
优化demo聊天模块;
v3.6.0
发布日期: 2019.11.29
1.新增打卡功能
监听方法:
/**
* @brief 收到开始打卡
* dic {
"punchId": "punchId",
"expireTime": "2019-10-26 10:00:00",
"remainDuration": 124
}
* 当没有设置时长,即无过期时间时
* {
"punchId": "asasdasdasdasd",
"remainDuration": -1 //其中-1表示剩余无限时间。
}
*/
-(void)hdReceivedStartPunchWithDict:(NSDictionary *)dic;
/**
* @brief 收到结束打卡
* dic{
"punchId": "punchId"
}
*/
-(void)hdReceivedEndPunchWithDict:(NSDictionary *)dic;
/**
* @brief 收到打卡提交结果
* dic{
"success": true,
"data": {
"isRepeat": false//是否重复提交打卡
}
}
*/
-(void)hdReceivedPunchResultWithDict:(NSDictionary *)dic;
主动方法:
/**
查询打卡信息
*/
- (void)hdInquirePunchInformation;
/**
提交打卡
@param punchId 打卡id
*/
- (void)hdCommitPunchWithPunchId:(NSString *)punchId;
2.新增视频状态
/**
* @brief 视频状态
* rseult playing/paused/loading
*/
-(void)videoStateChangeWithString:(NSString *) result;
3.随堂测
直播观看
/**
* @brief 获取随堂测
* @param practiceId 随堂测ID(没有传@"")
*/
-(void)getPracticeInformation:(NSString *)practiceId;
ps:原有获取随堂测方法已删除
注意:
修改前:
停止随堂测后进入直播间者获取不到统计排名
修改后:
停止随堂测后进入直播者可以获取统计排名
回放观看
主动方法
/**
获取随堂测信息
*/
-(void)getPracticeInformation;
监听方法
/**
* @brief 接收到随堂测
* rseultDic 随堂测内容
*/
-(void)receivePracticeWithDic:(NSDictionary *) resultDic;
4.文档组件本地化,提升加载速度
v3.5.0
发布日期: 2019.10.17
1.iOS 13适配
2.升级连麦模块,支持新版连麦
3.回放支持https播放
4.修复网络异常提示
v3.4.2
发布日期: 2019.09.20
1.修复异常退出无法连麦
v3.4.1
发布日期: 2019.09.06
1.新增修改文档背景色方法
/**
改变文档背景颜色
@param hexColor 字符串,传颜色的HEXColor 如:#000000
*/
- (void)changeDocWebColor:(NSString *)hexColor9
2.修复文档切换大小异常
3.修复播放器异常闪退
4.demo优化超链接
v3.4.0
发布日期: 2019.05.30
- 优化内存管理,提升稳定性;
- 重构回放离线下载功能模块;
- 优化播放逻辑,修复异常闪退问题;
- 修复云直播demo聊天闪退问题;
v3.3.0
发布日期: 2019.03.20
- 新增奖杯接口及demo;
- demo新增iTunes锁屏播放功能;
- 回放demo新增记忆播放功能;
- 优化回放进度条拖动准确度;
- 优化回放前后台切换播放功能;
v3.2.1
发布日期: 2019.03.06
-
新增直播和回放接收到白板文档加载状态
-
新增离线回放接收到文档加载状态
/** * @brief 文档加载状态(The new method) * index * 2 非动画文档加载完成 */ - (void)docLoadCompleteWithIndex:(NSInteger)index;
-
修复心跳上报问题
v3.2.0
发布日期: 2019.02.22
-
接收到文档加载状态
/** * @brief 文档加载状态(The new method) * index * 0 文档组件初始化完成 * 1 动画文档加载完成 * 2 非动画文档加载完成 */ - (void)docLoadCompleteWithIndex:(NSInteger)index;
-
接收到随堂测
/** * @brief 接收到随堂测(The new method) * rseultDic 随堂测内容 */ -(void)receivePracticeWithDic:(NSDictionary *) resultDic;
-
接收到随堂测提交结果
/** * @brief 随堂测提交结果(The new method) * rseultDic 提交结果,调用commitPracticeWithPracticeId:(NSString *)practiceId options:(NSArray *)options后执行 */ -(void)practiceSubmitResultsWithDic:(NSDictionary *) resultDic;
-
接收到随堂测统计结果
/** * @brief 随堂测统计结果(The new method) * rseultDic 统计结果,调用getPracticeStatisWithPracticeId:(NSString *)practiceId后执行 */ -(void)practiceStatisResultsWithDic:(NSDictionary *) resultDic;
-
接收到随堂测排名结果
/** * @brief 随堂测排名结果(The new method) * rseultDic 排名结果,调用getPracticeRankWithPracticeId:(NSString *)practiceId后执行 */ -(void)practiceRankResultsWithDic:(NSDictionary *) resultDic;
-
接收到停止随堂测
/** * @brief 停止随堂测(The new method) * rseultDic 结果 */ -(void)practiceStopWithDic:(NSDictionary *) resultDic;
-
接收到关闭随堂测
/** * @brief 关闭随堂测(The new method) * rseultDic 结果 */ -(void)practiceCloseWithDic:(NSDictionary *) resultDic;
-
接收到视频状态
/** * @brief 视频状态(The new method) * rseult playing/paused */ -(void)videoStateChangeWithString:(NSString *) result;
-
主动提交随堂测
/** * @brief 提交随堂测(The new method) * @param practiceId 随堂测ID * @param options 选项ID */ - (void)commitPracticeWithPracticeId:(NSString *)practiceId options:(NSArray *)options;
-
主动获取随堂测统计信息
/** * @brief 获取随堂测统计信息(可多次调用)(The new method) * @param practiceId 随堂测ID */ -(void)getPracticeStatisWithPracticeId:(NSString *)practiceId;
-
主动获取随堂测排名
/** * @brief 获取随堂测排名(可多次调用)(The new method) * @param practiceId 随堂测ID */ -(void)getPracticeRankWithPracticeId:(NSString *)practiceId;
-
回放新增文档加载状态
/**
* @brief 文档加载状态(The new method)
* index
* 0 文档组件初始化完成
* 1 动画文档加载完成
* 2 非动画文档加载完成
*/
- (void)docLoadCompleteWithIndex:(NSInteger)index;
v3.1.0
发布日期: 2019.01.16
- 获取观看者自身的信息
/**
* @brief 服务器端给自己设置的信息(The new method)
* viewerId 服务器端给自己设置的UserId
* groupId 分组id
* name 用户名
*/
-(void)setMyViewerInfo:(NSDictionary *) infoDic;
- 聊天审核
/**
* @brief 聊天审核(The new method)
* status 聊天消息的状态 0 显示 1 不不显示
* chatIds 聊天消息的id列列表
*/
-(void)chatLogManage:(NSDictionary *) manageDic;
-
敏感词过滤
注意在正常聊天时没有isFilterChat字段,只有用户聊天中含有敏感词汇时会有isFilterChat字段,且值为1,该内容仅发送者可见且没有存储,刷新会丢失该条聊天。
-
开启后台播放,sdk服务不中断,后台播放状态下音视频和文档前后台切换不重新连接
-
新增直播分组功能,通过groupId可以对学员进行分组
登录时可选传groupId parameter.groupid = self.groupid;//分组id 聊天和问答返回信息新增groupid字段
-
连麦支持主持人客户端
-
SDK新增聊天禁言及解禁回调
/** * @brief 收到聊天禁言(The new method) * mode 禁言类型 1:个人禁言 2:全员禁言 */ -(void)onBanChat:(NSDictionary *) modeDic; /** * @brief 收到解除禁言事件(The new method) * mode 禁言类型 1:个人禁言 2:全员禁言 */ -(void)onUnBanChat:(NSDictionary *) modeDic;
-
Demo 新增签到 问卷 答题卡 抽奖 连麦 公告 私聊功能
-
Demo 聊天支持显示图片
-
Demo 优化
v3.0.0
发布日期: 2018.12.12
-
视频或者文档大窗
/** * @brief 视频或者文档大窗(The new method) * isMain 1为视频为主,0为文档为主" */ - (void)onSwitchVideoDoc:(BOOL)isMain;
-
新demo3.0
1:本产品作为一个demo供参考 2:功能模块划分很详细了,每个模块的功能和UI都已经单独封装! 3:项目入口为CCEntranceViewController 分为观看直播入口和观看回放入口,入口文件见左侧文件夹已经为您分别使用中/英文两种语言命名 4:当您只需要使用某一个功能的时候只需要拷贝走对应的文件夹以及直播或者回放控制器的代码就好,对应的代码我们已经在selection中使用mark进行了标注(selection在当前路径的正上方, .m文件的旁边) 5:如果遇到问题请先测试demo,如果demo也有问题请联系技术支持人员(请带上系统版本号,手机型号,SDK版本号,问题描述,有日志带上日志) 6:新demo3.0文档直播间文档显示模式建议设置为适合窗口
v2.9.0
发布日期: 2018.11.08
- 新增学员踢出类型;
/**
* @brief 收到踢出消息(change)
kick_out_type
10 在允许重复登录前提下,后进入者会登录会踢出先前登录者
20 讲师、助教、主持人通过页面踢出按钮踢出用户
*/
- (void)onKickOut:(NSDictionary *)dictionary;
- 文档模式新增切换数据源响应事件;
/**
* @brief 客户端关闭摄像头(The new method)
数据源类型 数据源值 数据源类型描述 数据源类型描述值
source_type 0 source_type_desc 数据源类型:数据源未知,在直播未开始、非文档直播间或使用低版本客户端直播时会返回;
source_type 10 source_type_desc 数据源类型:摄像头打开
source_type 11 source_type_desc 数据源类型:摄像头关闭
source_type 20 source_type_desc 数据源类型:图片
source_type 30 source_type_desc 数据源类型:插播视频
source_type 40 source_type_desc 数据源类型:区域捕获
source_type 50 source_type_desc 数据源类型:桌面共享
source_type 60 source_type_desc 数据源类型:自定义场景
注:该功能仅限文档直播间使用,主播客户端需使用4.9.0以上版本;
- (void)receivedSwitchSource:(NSDictionary *)dic;
v2.8.0
发布日期: 2018.10.18
- 切换当前的文档模式;
/**
* @brief 切换当前的文档模式(The new method)
* 1.切换至跟随模式(默认值)值为0,
* 2.切换至自由模式;值为1,
*/
- (void)changeDocMode:(NSInteger)mode;
- 获取所有文档列表(代理方法);
/**
* @brief 获取所有文档列表(The new method)
*/
- (void)receivedDocsList:(NSDictionary *)listDic;
- 跳转到指定文档页;
/**
* @brief 跳转到指定文档页(自由模式才生效)(The new method)
* @param docId 文档的docId
* @param pageIndex 跳转的页数
*/
- (void)changePageToNumWithDocId:(NSString *)docId pageIndex:(NSInteger)pageIndex;
- 离线回放CCR文件的解析方法;
/**
* @brief 离线回放CCR文件的解析方法(The new method)
* @param dst 需要进行解析的CCR文件.
* @param dir 解析后输出目录, =NULL则解析到当前目录.
* @return 0-成功
* errcode:
-1 -打开输入文件(dst)失败;
-6 -dst存在但并不是加密文件格式;
*/
- (int)DecompressZipWithDec:(NSString *)dst dir:(NSString *)dir;
例子
//旧的解压方法
[SSZipArchive unzipFileAtPath:srcPath toDestination:destination];
//新的解析方法
_offlinePlayBack = [[OfflinePlayBack alloc] init];
int zipDec = [_offlinePlayBack DecompressZipWithDec:srcPath dir:destination];
注:若使用离线加密功能,必须使用此方法进行解压,否则会导致无法播放。
- 离线回放开始和结束时间;
/**
* @brief 回放的开始时间和结束时间(The new method)
*/
-(void)liveInfo:(NSDictionary *)dic;
v2.7.2
发布日期: 2018.09.25
- 优化文档展示生命周期;
/**
* 文档视图在直播间未开始直播时不创建
* 文档视图在直播间结束直播时将销毁
*/
- 修复demo离线下载iOS 12兼容性问题;
/**
* 修复iOS 12断点续传闪退问题
*/
v2.7.1
发布日期: 2018.09.10
- 新增问卷统计功能;
/**
* @brief 获取问卷统计(The new method)
*/
- (void)questionnaireStaticsInformation:(NSDictionary *)staticsDic;
- 新增禁用ppt滚动属性;
/**
* @brief PPT是否允许滚动
*/
@property(nonatomic, assign)BOOL pptInteractionEnabled;
- 优化回放信息加载方式;
- 优化直播和回放文档展示;
v2.7.0
发布日期: 2018.08.27
-
ppt支持极速动画模式
-
重构文档功能模块
-
双击ppt事件代理方法
/**
* @brief 双击ppt(The new method)
*/
- (void)doubleCllickPPTView;
- 新增自定义参数viewercustominfo
/**
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过1000个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
* 格式如下:
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
*/
@property(nonatomic, copy)NSString *viewercustominfo;
- 新增文档按直播间设置的模式展示
/**
* @brief PPT适配模式分为四种,
* 1.第一种是全部填充屏幕,可拉伸变形,
* 2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边,
* 3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边
* 4.根据直播间文档显示模式的返回值进行设置(推荐)(The New Method)
*/
@property(assign, nonatomic)NSInteger PPTScalingMode;//PPT适配方式,含义见上面
- 新增回放的开始时间和结束时间
/**
* @brief 回放的开始时间和结束时间(The new method)
*/
-(void)liveInfo:(NSDictionary *)dic;
- 新增直播间封禁和解禁代理
/**
* @brief 直播间被禁(The new method)
*/
- (void)theRoomWasBanned;
/**
* @brief 直播间解禁(The new method)
*/
- (void)theRoomWasCleared;
v2.6.1
- 获取直播开始时间和直播时长代理方法
/**
* @brief 获取直播开始时间和直播时长(The new method)
* liveDuration 直播持续时间,单位(s),直播未开始返回-1"
* liveStartTime 新增开始直播时间(格式:yyyy-MM-dd HH:mm:ss),如果直播未开始,则返回空字符串
*/
- (void)startTimeAndDurationLiveBroadcast:(NSDictionary *)dataDic;
2.优化回放数据过多加载慢的问题
3.提高离线下载稳定性
4.修正翻页信息的格式
v2.6.0
发布日期: 2018.06.12
1.观看直播修改昵称
/**
* @brief 修改昵称(The new method)
* @param nickName 修改后的昵称
*/
- (void)changeNickName:(NSString *)nickName;
代理方法
/**
* @brief 修改后的昵称(The new method)
* @param nickName 修改后的昵称
*/
- (void)onChangeNickname:(NSString *)nickNime;
2.获取PPT当前页数和总页数
/**
* @brief 获取ppt当前页数和总页数(The new method)
*
* 回调当前翻页的页数信息 <br/>
* 白板docTotalPage一直为0, pageNum从1开始<br/>
* 其他文档docTotalPage为正常页数,pageNum从0开始<br/>
* @param dictionary 翻页信息
*/
- (void)onPageChange:(NSDictionary *) dictionary;
3.获取最近一条广播
/**
* @brief 观看直播收到最近一条广播(回放和离线回放收到所有广播)(The new method)
* content 广播内容
* time 发布时间(单位:秒)
*/
- (void)broadcastHistory_msg:(NSArray *)History_msg;
v2.5.2
发布日期:2018.06.05
1.优化开发者使用文档,提高SDK接入体验;
2.修复回放频繁拖动进度条引起的崩溃问题;
3.修复频繁切换PPT动画文档和视频窗口位置,导致文档显示不完整问题;
v2.5.1
发布日期:2018.05.14
1.修复回放有liveid无recordid无法播放的问题;
v2.5.0
发布日期:2018.04.03
1.直播类中增加问卷功能
~~~
PlayForPCVC.m文件中相应的回调方法为:
- (void)questionnaireWithTitle:(NSString *)title url:(NSString *)url;
~~~
2.直播类中增加主动请求问卷功能
~~~
RequestData.h中增加相应的方法,当用户主动调用该方法时,会得到当前问卷的信息
-(void)getPublishingQuestionnaire;
~~~
3.离线回放类中增加改变播放器父窗口的方法
~~~
OfflinePlayBack.h中增加相应的方法
- (void)changePlayerParent:(UIView *) playerParent;
~~~
4.离线回放类中增加改变文档父窗口的方法
~~~
OfflinePlayBack.h中增加相应的方法
- (void)changeDocParent:(UIView *) docParent;
~~~
5.回放类中增加改变播放器父窗口的方法
~~~
RequestDataPlayBack.h中增加相应的方法
- (void)changePlayerParent:(UIView *) playerParent;
~~~
6.回放类中增加改变文档父窗口的方法
~~~
RequestDataPlayBack.h中增加相应的方法
- (void)changeDocParent:(UIView *) docParent;
~~~
7.回放增加drm加密功能(接口无变化)
8.增加语音连麦页面按钮
9.线路切换优化
v2.4.0
发布日期:2017.12.14
1.户禁言后提问的问题,只给当前用户自己展示(禁言后服务端返回的问题id全部为-1)
~~~
PlayForPCVC.m文件中相应的回调方法为:
- (void)onQuestionDic:(NSDictionary *)questionDic;
当用户被禁言后,如果该用户提问的话,服务端返回的本用户提问的问题id都为-1,因为问题id是作为key来存储在字典当中的,所以具有唯一性,如果需要展示被禁言的问题的话,需要用该问题 id+当前时间字符串作为组合key来存储在问题字典当中。
if([encryptId isEqualToString:@"-1"]) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSString *dateTime = [formatter stringFromDate:[NSDate date]];
encryptId = [NSString stringWithFormat:@"%@[%@]",encryptId,dateTime];
}
~~~
2.增加直播,回放,离线回放的实时画笔功能(接口无变化)
3.socket策略改变,直接使用服务器返回的域名和端口号(接口无变化)
4.播放器延迟策略优化,非低延迟模式下增加追帧功能(接口无变化)
5.直播过程中打电话,进入前后台策略优化(接口无变化)
6.增加日志打印功能
~~~
增加SaveLogUtil类,具体使用请参看《直播SDK开发者使用说明文档》
~~~
7.回放聊天记录的显示跟随播放的时间点进行同步
~~~
PlayBackVC.m文件中增加-(void)parseChatOnTime:(int)time;方法,传入当前播放器时间,来解析当前聊天内容,并追加展示。
~~~