... | @@ -30,45 +30,68 @@ Live_iOS_Play_SDK 是一个适用于iOS平台的直播SDK,使用此SDK可以 |
... | @@ -30,45 +30,68 @@ Live_iOS_Play_SDK 是一个适用于iOS平台的直播SDK,使用此SDK可以 |
|
### 2.1 开发环境
|
|
### 2.1 开发环境
|
|
* Xcode : Xcode 开发IDE
|
|
* Xcode : Xcode 开发IDE
|
|
### 2.2错误码及错误描述
|
|
### 2.2错误码及错误描述
|
|
|
|
```
|
|
(1). 业务错误
|
|
(1). 业务错误
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, ERROR_SERVICE_TYPE) {
|
|
typedef NS_ENUM(NSInteger, ERROR_SERVICE_TYPE) {
|
|
|
|
|
|
ERROR_ROOM_STATE = 1001,//@"直播间状态不可用,可能没有开始推流"
|
|
ERROR_ROOM_STATE = 1001,//@"直播间状态不可用,可能没有开始推流"
|
|
|
|
|
|
ERROR_USELESS_INFO = 1002,//@"没有获取到有用的视频信息"
|
|
ERROR_USELESS_INFO = 1002,//@"没有获取到有用的视频信息"
|
|
|
|
|
|
ERROR_PASSWORD = 1003,//@"密码错误"
|
|
ERROR_PASSWORD = 1003,//@"密码错误"
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
(2). 系统错误
|
|
(2). 系统错误
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, ERROR_SYSTEM_TYPE) {
|
|
typedef NS_ENUM(NSInteger, ERROR_SYSTEM_TYPE) {
|
|
|
|
|
|
ERROR_RETURNDATA = 1004,//@"返回内容格式错误"
|
|
ERROR_RETURNDATA = 1004,//@"返回内容格式错误"
|
|
|
|
|
|
ERROR_PARAMETER = 1005,//@"可能是参数错误"
|
|
ERROR_PARAMETER = 1005,//@"可能是参数错误"
|
|
|
|
|
|
ERROR_NETWORK = 1006,//@"网络错误"
|
|
ERROR_NETWORK = 1006,//@"网络错误"
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**日志工具类**
|
|
**日志工具类**
|
|
(1) 单例模式
|
|
(1) 单例模式
|
|
|
|
|
|
|
|
```
|
|
/**
|
|
/**
|
|
* @brief 获取单例对象
|
|
|
|
*/
|
|
- @brief 获取单例对象
|
|
+ (instancetype)sharedInstance;
|
|
*/
|
|
|
|
|
|
|
|
- (instancetype)sharedInstance;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @brief 是否需要存储日志信息到文件中,最好在AppDelegate类里面调用,这样就适用于全局日
|
|
|
|
* 志的存储,当然中途调用也可以,从调用后开始应用之后的日志存储逻辑
|
|
- @brief 是否需要存储日志信息到文件中,最好在AppDelegate类里面调用,这样就适用于全局日
|
|
*/
|
|
- 志的存储,当然中途调用也可以,从调用后开始应用之后的日志存储逻辑
|
|
-(void)isNeedToSaveLog:(BOOL)needsave;
|
|
*/
|
|
|
|
-(void)isNeedToSaveLog:(BOOL)needsave;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @brief 存储日志的信息
|
|
|
|
* action相当于key,也可以理解为存储的事件名称
|
|
- @brief 存储日志的信息
|
|
* logStr相当于value,也可以理解为存储的日志信息字符串
|
|
- action相当于key,也可以理解为存储的事件名称
|
|
*/
|
|
- logStr相当于value,也可以理解为存储的日志信息字符串
|
|
-(void)saveLog:(NSString *)logStr action:(NSString *)action;
|
|
*/
|
|
|
|
-(void)saveLog:(NSString *)logStr action:(NSString *)action;
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(2) 示例应用及说明
|
|
(2) 示例应用及说明
|
|
|
|
|
|
|
|
```
|
|
在CCSDK中相关的信息已经做了日志打印的相关处理操作,但是在demo中也添加了几句话,用户也可以自定义添加自己需要的日志,用于记录或者调试都可以。
|
|
在CCSDK中相关的信息已经做了日志打印的相关处理操作,但是在demo中也添加了几句话,用户也可以自定义添加自己需要的日志,用于记录或者调试都可以。
|
|
|
|
|
|
注意:
|
|
注意:
|
... | @@ -78,16 +101,18 @@ ERROR_NETWORK = 1006,//@"网络错误" |
... | @@ -78,16 +101,18 @@ ERROR_NETWORK = 1006,//@"网络错误" |
|
2) SDK中如果开启了日志存储以后,日志只存不删,需要使用者按照自己的逻辑进行删除
|
|
2) SDK中如果开启了日志存储以后,日志只存不删,需要使用者按照自己的逻辑进行删除
|
|
|
|
|
|
1. 在AppDelegate.m中添加了
|
|
1. 在AppDelegate.m中添加了
|
|
[[SaveLogUtil sharedInstance]isNeedToSaveLog:YES];
|
|
[[SaveLogUtil sharedInstance]isNeedToSaveLog:YES];
|
|
表示设置为记录日志log
|
|
表示设置为记录日志log
|
|
|
|
|
|
2. 在PlayForPCVC.m中添加了
|
|
2. 在PlayForPCVC.m中添加了
|
|
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"视频加载成功或开始播放,多次调用,不必关心"];
|
|
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"视频加载成功或开始播放,多次调用,不必关心"];
|
|
表示视频加载成功或开始播放
|
|
表示视频加载成功或开始播放
|
|
|
|
|
|
3. PlayBackVC.m中添加了
|
|
3. PlayBackVC.m中添加了
|
|
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"视频加载成功或开始播放,多次调用,不必关心"];
|
|
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"视频加载成功或开始播放,多次调用,不必关心"];
|
|
表示视频加载成功或开始播放
|
|
表示视频加载成功或开始播放
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 快速集成
|
|
## 3. 快速集成
|
|
|
|
|
... | @@ -137,8 +162,15 @@ ERROR_NETWORK = 1006,//@"网络错误" |
... | @@ -137,8 +162,15 @@ ERROR_NETWORK = 1006,//@"网络错误" |
|
* 1.一种是全部填充屏幕,可拉伸变形,
|
|
* 1.一种是全部填充屏幕,可拉伸变形,
|
|
* 2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边,
|
|
* 2.第二种是等比缩放,横向或竖向贴住边缘,另一方向可以留黑边,
|
|
* 3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边
|
|
* 3.第三种是等比缩放,横向或竖向贴住边缘,另一方向出边界,裁剪PPT,不可以留黑边
|
|
|
|
* 4.根据直播间文档显示模式的返回值进行设置(推荐)(The New Method)
|
|
*/
|
|
*/
|
|
@property(assign, nonatomic)NSInteger PPTScalingMode;//PPT适配方式,含义见上面
|
|
@property(assign, nonatomic)NSInteger PPTScalingMode;//PPT适配方式,含义见上面
|
|
|
|
/**
|
|
|
|
* json格式字符串,可选,自定义用户信息,该信息会记录在用户访问记录中,用于统计分析使用(长度不能超过1000个字符,若直播间启用接口验证则该参数无效)如果不需要的话就不要传值
|
|
|
|
* 格式如下:
|
|
|
|
* viewercustominfo: '{"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}'
|
|
|
|
*/
|
|
|
|
@property(nonatomic, copy)NSString *viewercustominfo;
|
|
```
|
|
```
|
|
|
|
|
|
### 3.4 登录直播间
|
|
### 3.4 登录直播间
|
... | @@ -420,7 +452,15 @@ PlayParameter增加两个属性 |
... | @@ -420,7 +452,15 @@ PlayParameter增加两个属性 |
|
*/
|
|
*/
|
|
-(void)commitQuestionnaire:(NSDictionary *)dic;
|
|
-(void)commitQuestionnaire:(NSDictionary *)dic;
|
|
```
|
|
```
|
|
(25). 连麦相关方法
|
|
(25). 修改昵称
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 修改昵称(The new method)
|
|
|
|
* @param nickName 修改后的昵称
|
|
|
|
*/
|
|
|
|
- (void)changeNickName:(NSString *)nickName;
|
|
|
|
```
|
|
|
|
(26). 连麦相关方法
|
|
```
|
|
```
|
|
/*(连麦相关方法)
|
|
/*(连麦相关方法)
|
|
* 当收到- (void)acceptSpeak:(NSDictionary *)dict;回调方法后,调用此方法
|
|
* 当收到- (void)acceptSpeak:(NSDictionary *)dict;回调方法后,调用此方法
|
... | @@ -812,7 +852,67 @@ PlayParameter增加两个属性 |
... | @@ -812,7 +852,67 @@ PlayParameter增加两个属性 |
|
*/
|
|
*/
|
|
- (void)commitQuestionnaireResult:(BOOL)success;
|
|
- (void)commitQuestionnaireResult:(BOOL)success;
|
|
```
|
|
```
|
|
### 4.3 事件监听
|
|
#### 4.2.44 观看直播修改昵称
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 修改后的昵称(The new method)
|
|
|
|
* @param nickName 修改后的昵称
|
|
|
|
*/
|
|
|
|
- (void)onChangeNickname:(NSString *)nickNime;
|
|
|
|
```
|
|
|
|
#### 4.2.45 获取PPT当前页数和总页数
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 获取ppt当前页数和总页数(The new method)
|
|
|
|
*
|
|
|
|
* 回调当前翻页的页数信息 <br/>
|
|
|
|
* 白板docTotalPage一直为0, pageNum从1开始<br/>
|
|
|
|
* 其他文档docTotalPage为正常页数,pageNum从0开始<br/>
|
|
|
|
* @param dictionary 翻页信息
|
|
|
|
*/
|
|
|
|
- (void)onPageChange:(NSDictionary *) dictionary;
|
|
|
|
```
|
|
|
|
#### 4.2.46 获取最近一条广播
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 收到最近一条广播(The new method)
|
|
|
|
* content 广播内容
|
|
|
|
* time 发布时间(单位:秒)
|
|
|
|
*/
|
|
|
|
- (void)broadcastHistory_msg:(NSArray *)History_msg;
|
|
|
|
```
|
|
|
|
#### 4.2.47 获取最近一条广播
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 获取直播开始时间和直播时长(The new method)
|
|
|
|
* liveDuration 直播持续时间,单位(s),直播未开始返回-1"
|
|
|
|
* liveStartTime 新增开始直播时间(格式:yyyy-MM-dd HH:mm:ss),如果直播未开始,则返回空字符串
|
|
|
|
*/
|
|
|
|
- (void)startTimeAndDurationLiveBroadcast:(NSDictionary *)dataDic;
|
|
|
|
```
|
|
|
|
#### 4.2.48 直播间封禁和解禁代理
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 直播间被禁(The new method)
|
|
|
|
*/
|
|
|
|
- (void)theRoomWasBanned;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 直播间解禁(The new method)
|
|
|
|
*/
|
|
|
|
- (void)theRoomWasCleared;
|
|
|
|
```
|
|
|
|
|
|
|
|
#### 4.2.49 双击ppt事件代理方法
|
|
|
|
```
|
|
|
|
/**
|
|
|
|
* @brief 双击ppt(The new method)
|
|
|
|
*/
|
|
|
|
- (void)doubleCllickPPTView;
|
|
|
|
```
|
|
|
|
|
|
|
|
### 4.3 播放器监听
|
|
|
|
|
|
**添加播放器监听事件(监听播放状态改变)**
|
|
**添加播放器监听事件(监听播放状态改变)**
|
|
```
|
|
```
|
|
1. 播放器的监听事件有以下几种
|
|
1. 播放器的监听事件有以下几种
|
... | @@ -925,47 +1025,91 @@ userrole = student;//用户角色 |
... | @@ -925,47 +1025,91 @@ userrole = student;//用户角色 |
|
```
|
|
```
|
|
7 收到学生禁言消息(RequestDataDelegate中代理方法)
|
|
7 收到学生禁言消息(RequestDataDelegate中代理方法)
|
|
|
|
|
|
|
|
```
|
|
- (void)onSilenceUserChatMessage:(NSDictionary *)message;
|
|
- (void)onSilenceUserChatMessage:(NSDictionary *)message;
|
|
|
|
|
|
{
|
|
{
|
|
|
|
|
|
msg = asdfghj;
|
|
msg = asdfghj;
|
|
|
|
|
|
time = "14:13:53";
|
|
time = "14:13:53";
|
|
|
|
|
|
useravatar = "";
|
|
useravatar = "";
|
|
|
|
|
|
usercustommark = "";
|
|
usercustommark = "";
|
|
|
|
|
|
userid = 9c408a9761d74cb9b64587b2776c5327;
|
|
userid = 9c408a9761d74cb9b64587b2776c5327;
|
|
|
|
|
|
username = qwer;
|
|
username = qwer;
|
|
|
|
|
|
userrole = student;
|
|
userrole = student;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 收到学生私聊(RequestDataDelegate中代理方法)
|
|
8 收到学生私聊(RequestDataDelegate中代理方法)
|
|
|
|
|
|
|
|
```
|
|
- (void)OnPrivateChat:(NSDictionary *)dic;
|
|
- (void)OnPrivateChat:(NSDictionary *)dic;
|
|
|
|
|
|
{
|
|
{
|
|
|
|
|
|
fromuseravatar = "";
|
|
fromuseravatar = "";
|
|
|
|
|
|
fromuserid = 9c408a9761d74cb9b64587b2776c5327;
|
|
fromuserid = 9c408a9761d74cb9b64587b2776c5327;
|
|
|
|
|
|
fromusername = qwer;
|
|
fromusername = qwer;
|
|
|
|
|
|
fromuserrole = student;
|
|
fromuserrole = student;
|
|
|
|
|
|
usercustommark = "";
|
|
usercustommark = "";
|
|
|
|
|
|
msg = chat;
|
|
msg = chat;
|
|
|
|
|
|
time = "14:11:32";
|
|
time = "14:11:32";
|
|
|
|
|
|
touserid = 00d30351184d4cbdb0fcbadd9a55ba1c;
|
|
touserid = 00d30351184d4cbdb0fcbadd9a55ba1c;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 聊天信息数组(RequestDataPlayBackDelegate中代理方法)
|
|
9 聊天信息数组(RequestDataPlayBackDelegate中代理方法)
|
|
|
|
|
|
-(void)onParserChat:(NSArray *)chatArr;
|
|
```
|
|
|
|
- (void)onParserChat:(NSArray *)chatArr;
|
|
|
|
|
|
(
|
|
(
|
|
|
|
|
|
{
|
|
{
|
|
|
|
|
|
content = aaa;//聊天内容
|
|
content = aaa;//聊天内容
|
|
|
|
|
|
time = 27;//聊天的时间点
|
|
time = 27;//聊天的时间点
|
|
|
|
|
|
userAvatar = "";//聊天用户头像
|
|
userAvatar = "";//聊天用户头像
|
|
|
|
|
|
userCustomMark = "";//个性化信息
|
|
userCustomMark = "";//个性化信息
|
|
|
|
|
|
userId = 00942719153943a4a847d8c9278f030d;//聊天用户id
|
|
userId = 00942719153943a4a847d8c9278f030d;//聊天用户id
|
|
|
|
|
|
userName = admin;//聊天用户名
|
|
userName = admin;//聊天用户名
|
|
|
|
|
|
userRole = publisher;//聊天用户角色
|
|
userRole = publisher;//聊天用户角色
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 5.API查询
|
|
## 5.API查询
|
|
|
|
|
... | | ... | |