## 目录

[TOC]

## Release2.9.0 

   下面说明一下之前的CC直播SDK升级到2.9.0版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.9.0版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

- 新增so包

  libsupzip.so （使用SDK提供的解压CCR文件的方法需导入此so包）

### 2. 注意事项
  	 本版本直播观看和在线观看SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，如果是2.6.0之前的版本升级到本版本的话需要稍微调整一下相关配置。
  	本版本离线观看的SDK和2.8.0版本之前比，只提供了两个cpu平台的so文件：armeabi-v7a、x86，2.8.0版本是三个平台的，升级时需要稍微调整一下相关配置。

### 3. 新版本改动及特性
- SDK 网络请求全部使用https

  本版本开始所有的数据请求方式全部默认设置为https，不再接受设置的参数。
  本版本DWLive.setSecure(boolean isSecure)为过时弃用方法。
  本版本DWLiveReplay.setSecure(boolean isSecure)为过时弃用方法。

- 直播观看用户踢出逻辑增加踢出类型参数

     本版本对直播观看用户踢出逻辑进行了优化，细化了踢出方法，改动后的踢出回调方法没变，增加类型参数：

  ```java
  /**
   * 用户被踢出房间的回调
   * @param type 踢出房间的类型<br>
   * 10:在允许重复登录前提下，后进入者会登录会踢出先前登录者<br>
   * 20:讲师、助教、主持人通过页面踢出按钮踢出用户
   */
   @Override
   public void onKickOut(int type)
  ```

- 直播观看新增数据源切换回调方法

  本版本对直播观看的PC端数据源切换事件做了回调通知方法，新增方法如下：

  ```java
  /**
   * 切换数据源
   * @param switchInfo 切换数据源信息 <br>
   * 注：<br>
   * 1. 返回数据格式为：{"source_type":"10","source_type_desc":"数据源类型：摄像头打开"} <br>
   * 2. 目前此回调只会在有文档的直播间模版下才会触发
   */
   public void onSwitchSource(String switchInfo);
  ```

   以下是数据格式中不同内容对应的情况：
  | 数据源类型  | 数据源值 | 数据源类型描述   | 数据源类型描述值       |
| :---------- | :------- | :--------------- | :--------------------- |
| 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 | 数据源类型：自定义场景 |

  注意：

        1. 在直播未开始、非文档直播间或使用低版本客户端直播时会返回source_type 为 0的数据；
        2. 该功能仅限文档直播间使用，PC主播客户端需使用4.9.0以上版本；

- 优化直播观看播放模式切换逻辑

  目前直播观看SDK在进行音视频播放模式切换时，有极小概率出现切换回视频时出现黑屏有声音的情况，本版本针对此问题进行了优化：
  切换播放模式的方法增加参数：Surface surface ，下面是更改后的切换逻辑：

  ```java
  /**
   * 切换当前播放模式，会重新加载视频
   * @param playMode 播放模式
   */
  public void changePlayMode(Surface surface, PlayMode playMode)
  ```

### 4. 更新日志
   1. SDK 网络请求全部使用https
   2. 直播观看用户踢出逻辑增加踢出类型参数
   3. 直播观看新增数据源切换回调方法
   4. 优化直播观看播放模式切换逻辑


## Release2.8.0 
   下面说明一下之前的CC直播SDK升级到2.8.0版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.8.0版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

- 新增so包

  libsupzip.so （使用SDK提供的解压CCR文件的方法需导入此so包）

### 2. 注意事项
   本版本直播观看和在线观看SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，如果是2.6.0之前的版本升级到本版本的话需要稍微调整一下相关配置。
   本版本离线观看的SDK和2.8.0版本之前比，只提供了两个cpu平台的so文件：armeabi-v7a、x86，2.8.0版本是三个平台的，升级时需要稍微调整一下相关配置。

### 3. 新版本改动及特性
- 直播SDK增加初始化SDK的方法

   SDK增加初始化SDK的方法，需要在Application里面调用

  ```java
  DWLiveEngine.init(this)
  ```

- 直播观看SDK支持文档的自由切换

  SDK的DWLive提供了主动调用的方法：getRoomDocInfos、changeDocModeType 和 changePageTo。
  其中getRoomDocInfos用来获取当前直播间所有的文档信息，changeDocModeType用来改变当前文档控件的展示模式，changePageTo用于跳转到指定文档的制定页数。
  新功能在demo上做了相应的基本实现，可用于参考，具体位置为PcLivePlayActivity的showDocChangeDialog方法。

- 离线回放SDK解压加密的CCR并播放

  SDK提供解压方法：SupZipTool.decompressZipDec（需导入libsupzip.so包）用于解压加密CCR，Demo层的调用位置为：UnZiper.unZipFile()方法，可以参考此方法进行实现。
  注：若使用离线加密功能，必须使用此方法进行解压，否则会导致无法播放。

- 直播观看和回放Demo兼容Android 9.0

  如需兼容Android 9.0 需要在Demo 的AndroidManifest.xml里面增加如下配置：

  ```xml
  <uses-library android:name="org.apache.http.legacy" android:required="false"/>
  ```

- 离线回放支持获取回放录制的开始和结束时间

  相关方法为：DWLiveLocalReplay.getReplayLiveInfo。

### 4. 更新日志
   1. 直播SDK增加初始化SDK的方法
   2. 直播观看SDK支持文档的自由切换
   3. 离线回放SDK解压加密的CCR并播放
   4. 直播观看和回放Demo兼容Android9.0
   5. 离线回放支持获取回放录制的开始和结束时间


## Release2.7.1 
   下面说明一下之前的CC直播SDK升级到2.7.1版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.7.1版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

### 2. 注意事项
   	本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. 新版本改动及特性
- 修复bug，优化了SDK的部分逻辑

   这个版本对SDK的一些bug进行了处理，并且优化了部分相关逻辑，提供的接口和方法和2.7.0对比无变化。

- 优化Demo代码

  这个版本对Demo的直播观看页和在线回放的代码做了整理和优化，提高可读性，提高对接效率。

### 4. 更新日志
   1. 修复bug，优化了SDK的部分逻辑
   2. 优化Demo代码


## Release2.7.0 
   下面说明一下之前的CC直播SDK升级到2.7.0版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.7.0版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换  ）

### 2. 注意事项
   	本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 文档模块优化

  文档模块的改动是针对直播观看和在线回放的，替换jar包后基本的使用方式不变。
  同时新增特性：适合屏幕和适合窗口两种模式。
  适合屏幕就是原先的文档展示方式。
  适合宽度则是将文档的宽度自动适配控件的宽度。如果文档竖向长度比较长的话，可以上下滑动进行观看和使用。
  目前设置这两个特性的位置为：后台—>直播间—>编辑—>高级选项—>观看端设置—>文档显示模式

  对应Demo改动：

  主要改动的地方是文档全屏的触发机制进行了修改，
  改为对DocView设置DocView.TouchEventListener，并重写onTouchEvent方法，方法内部处理的方式同View.onTouchEvent。

- 问卷统计

  对应SDK改动：

  SDK问卷统计功能为新增回调onQuestionnaireStatis。

  对应Demo改动：

  在Demo中实现了onQuestionnaireStatis回调（注意：需要结合直播客户端4.9.0版本使用）

- 封禁 & 解封禁

  对应SDK改动

     - 封禁事件对应的回调为onBanStream
     - 解封禁事件对应的回调为onUnbanStream
     - 直播观看登录后可调用RoomInfo.getIsBan()来获取当前直播间的封禁状态， 0——未封禁，1——封禁

  对应Demo改动

  在Demo中实现了onBanStream回调和onUnbanStream回调。

- 文档全屏的逻辑调整

  结合2.1来做的调整，主要改动的地方是文档全屏的触发机制进行了修改。
  目前的机制为对DocView设置DocView.TouchEventListener，并重写onTouchEvent方法，方法内部处理的方式同View.onTouchEvent。
  具体逻辑可以参照PcLivePlayActivity 和 ReplayActivity 的 initViewPager()的方法里面的实现逻辑。

### 4. 更新日志
   1. 直播回放文档模块优化
   2. 优化直播和回放的播放逻辑
   3. 封禁功能在demo层的处理逻辑完善
   4. 新增问卷统计功能


## Release2.6.4 
   下面说明一下之前的CC直播SDK升级到2.6.4版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.6.4版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

### 2. 注意事项
   	本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 增加直播观看增加历史广播信息回调

  在2.6.1版本，我们的SDK增加了获取直播的历史广播的功能，通过onBroadcastMsg(String msg)回调。
  在2.6.4版本，我们将历史广播的回调单独提出来，增加onHistoryBroadcastMsg(ArrayList msgs)回调，其中BroadCastMsg的字段为：content （广播内容） 和 time （广播时间），onBroadcastMsg(String msg)只用于收到实时广播信息。

### 4. 更新日志
   1. 增加直播观看增加历史广播信息回调


## Release2.6.3

   下面说明一下之前的CC直播SDK升级到2.6.3版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.6.3版本，只需要替换dwlivesdk.jar。

如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

### 2. 注意事项
   	本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 优化回放文档加载速度

  之前的版本的SDK在请求超大回放数据量的时候，存在视频显示后几秒文档数据才展示出来的问题，本版本针对此问题，进行了优化，加快了文档内容的展示速度。

- 支持获取当前直播的信息

  直播观看和在线回放支持获取当前直播的信息，相关类为：LiveInfo、ReplayLiveInfo。
  使用方式为：DWLive.getLiveInfo()、DWLiveReplay.getReplayLiveInfo()。
  此功能Demo也在demo中使用，相关代码，见demo直播和回放的登录页代码。

- 直播登录增加选填参数viewerCustomInfo

   LoginInfo 增加选填参数字段：viewerCustomInfo
  viewercustominfo json格式字符串，可选，自定义用户信息，该信息会记录在用户访问记录中，用于统计分析使用（长度不能超过1000个字符，若直播间启用接口验证则该参数无效） 格式如下：

  ```json
   {"exportInfos": [ {"key": "城市", "value": "北京"}, {"key": "姓名", "value": "哈哈"}]}
  ```

### 4. 更新日志
   1. 优化回放文档加载速度
   2. 直播观看和在线回放支持获取直播信息
   3. 直播观看LoginInfo增加选填参数viewerCustomInfo


## Release2.6.2
   下面说明一下之前的CC直播SDK升级到2.6.2版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0及以后的版本升级到2.6.2版本，只需要替换dwlivesdk.jar。如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

  libijkffmpeg.so （必须替换）
  libijkplayer.so （必须替换）
  libijksdl.so （必须替换）
  libjingle_peerconnection_so.so （必须替换）

### 2. 注意事项
  	 本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，2.6.0版本之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 优化切换音频模式的响应速度

  之前版本的SDK在视频切换音频的时候，切换的速度比较慢，本版本针对此问题进行了优化，加快了切换音频模式的响应速度。

- 修复文档模块的bug

  修复了回放时文档模块的bug，提高了SDK的稳定性。

## 3. 更新日志
   1. 优化切换音频模式的响应速度
   2. 修复文档模块的bug

## Release2.6.1

   下面说明一下之前的CC直播SDK升级到2.6.1版本的时候，需要注意的事情
### 1. 升级需要替换的库
如果是2.6.0版本升级到2.6.1版本，只需要替换dwlivesdk.jar。如果是2.6.0之前的版本，就需要做以下操作：

- 替换jar包

     dwlivesdk.jar （必须替换）
     libjingle_peerconnection.jar （必须替换）

- 替换so包

     libijkffmpeg.so （必须替换）
     libijkplayer.so （必须替换）
     libijksdl.so （必须替换）
     libjingle_peerconnection_so.so （必须替换）

###  2. 注意事项

   本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 直播登录时补推最后一条广播消息

  此功能类似于聊天数据补推，现在也加上了广播消息的补推。回调方法为：onBroadcastMsg，同正常接收广播的方法相同。

 

- 回放增加直播过程中的广播信息的回调

   回放广播信息的类：ReplayBroadCastMsg，相关字段：content（广播内容）、time（发布时间）。
   在线回放的广播信息回调：

  ```java
  /**
  * 广播信息
  * @param broadCastMsgList 广播信息列表
  */
  public void onBroadCastMessage(ArrayList<ReplayBroadCastMsg> broadCastMsgList);
  ```

   离线回放的广播信息回调：

  ```java
  /**
  * 广播信息
  * @param broadCastMsgList 广播信息列表
  */
  public void onBroadCastMessage(ArrayList<ReplayBroadCastMsg> broadCastMsgList);
  ```

- 直播 + 在线回放 + 离线回放  增加当前翻页信息的回调

   回调方法都为：

  ```java
  /**
  * 回调当前翻页的信息<br/>
  * 注意：<br/>
  * 白板docTotalPage一直为0，pageNum从1开始<br/>
  * 其他文档docTotalPage为正常页数，pageNum从0开始
  *
  * @param docId 文档Id
  * @param docName 文档名称
  * @param pageNum 当前页码
  * @param docTotalPage 当前文档总共的页数
  */
  public void onPageChange(String docId, String docName, int pageNum, int docTotalPage);
  ```

  

- 观看直播时，支持修改昵称

  修改昵称的方法为主动调用方法：

  ```java
  DWLive.changeNickName(String nickName)。
  ```

### 3. 更新日志
   1. 直播和回放增加翻页信息回调
   2. 直播支持观看直播时修改昵称
   3. 直播支持广播信息补推（最后一条广播）
   4. 回放增加直播过程中的广播信息的回调


## Release2.6.0 

   下面说明一下2.6.0版本之前的CC直播SDK升级到2.6.0版本的时候，需要注意的事情
### 1. 升级需要替换的库
- 替换jar包

  dwlivesdk.jar （必须替换）
  libjingle_peerconnection.jar （必须替换）

- 替换so包

     libijkffmpeg.so （必须替换）
     libijkplayer.so （必须替换）
     libijksdl.so （必须替换）
     libjingle_peerconnection_so.so （必须替换）

###  2.  注意事项

   本版本SDK只提供了三个cpu平台的so文件：arm64-v8a、armeabi-v7a、x86，之前提供的都是四个平台的，这块需要集成的客户稍微调整一下自己的配置，根据自己的项目的配置。
### 3. SDK 改动
- 直播登录方式的改动

  登录直播间时设置参数的方法DWLive.setDWLiveLoginParams改为对象化了，在使用时需要创建LoginInfo对象，并将登录的参数设置进去，其实参数还是和之前一样，只不过承载这些参数的方式为对象化了。 下面是目前直播登录的示例代码：

  ```java
  // 创建登录信息
  LoginInfo loginInfo = new LoginInfo();
  loginInfo.setRoomId(roomId);
  loginInfo.setUserId(userId);
  loginInfo.setViewerName(viewerName);
  loginInfo.setViewerToken(viewerToken);
  
  DWLive.getInstance().setDWLiveLoginParams(new DWLiveLoginListener() {
      @Override
      public void onLogin(TemplateInfo templateInfo, Viewer viewer, RoomInfo roomInfo, PublishInfo publishInfo) {
          //TODO 登录成功了，跳转到直播播放页面
      }
  
      @Override
      public void onException(final DWLiveException e) {
          // TODO 登录失败，添加告知用户登录失败的逻辑
      }
  }, loginInfo);  // 设置登录直播间的参数
  
  DWLive.getInstance().startLogin(); // 执行登录操作
  ```

- 在线回放改动

  登录回放直播间时设置参数的方法DWLiveReplay.setLoginParams改为对象化了，在使用时需要创建ReplayLoginInfo对象，并将登录的参数设置进去，其实参数还是和之前一样，只不过承载这些参数的方式为对象化了。 下面是目前直播回放登录的实例代码：

  ```java
  ReplayLoginInfo replayLoginInfo = new ReplayLoginInfo();   // 创建登录信息对象
  replayLoginInfo.setUserId(userId);   // 设置用户Id
  replayLoginInfo.setRoomId(roomId);  // 设置直播间Id
  replayLoginInfo.setLiveId(liveId);   // 设置直播Id
  replayLoginInfo.setRecordId(recordId);   // 设置回放Id
  replayLoginInfo.setViewerName(viewerName);    // 设置观众名称
  replayLoginInfo.setViewerToken(viewerToken);  // 设置观众密码
  
  // 设置登录参数
  DWLiveReplay.getInstance().setLoginParams(new DWLiveReplayLoginListener(){
      @Override
      public void onException(final DWLiveException exception) {
         // TODO 登录失败，添加告知用户登录失败的逻辑
      }
  
      @Override
      public void onLogin(TemplateInfo templateInfo) {
         // TODO 登录成功了，跳转到直播播放页面
      }
  }, replayLoginInfo);
  DWLiveReplay.getInstance().startLogin(); // 执行登录回放直播间操作
  ```

- 设置网络请求Https方式变更

     之前的逻辑为在设置登录参数的时候，可以设置https的请求方式，目前设置方式设置为setSecure。

     - 直播观看时设置的方法为：DWLive.setSecure(.....);
     - 直播回放时设置的方法为：DWLiveReplay..setSecure(......)

### 4. 更新日志
- 优化开发者使用文档，提高SDK接入体验； 

- 优化连麦库解决与云课堂的连麦库冲突问题

- 优化播放库提前与云点播、云课堂的兼容性； 

- 优化回放拖动播放时文档加载流畅性；