# 关于如何接入SDK离线回放功能

本文主要介绍如何接入SDK离线回放功能，包括两大部分，核心功能和其他功能

- 关于如何接入SDK离线回放功能

  - 1. 离线回放核心功能

    - 1.1 离线回放数据的下载和解压

    - 1.2 离线回放播放视频和文档

      - 1.2.1 主动调用api
      - 1.2.2 回调事件api
      - 1.2.3 关键代码示例
      - 1.2.4 集成说明

  - 2. 离线回放其他功能

    - 2.1 聊天功能
    - 2.2 问答功能
    - 2.3 广播功能
    - 2.4 回放页面信息

## 1. 离线回放核心功能

### 1.1 离线回放数据的下载和解压

相关下载CCR的逻辑可以自行实现也可以参照Demo.

解压逻辑请参照demo的localreplay功能，特别说明：

1. 解压时调用的方法为SupZipTool.decompressZipDec(String inputUrl, String outputUrl)。
2. 解压目录为必需的参数。
3. 使用SupZipTool时需要导入so文件：libsupzip.so。

### 1.2 离线回放播放视频和文档

#### 1.2.1 主动调用api

离线回放核心类代码在DWLiveLocalReplay.java（DWLiveLocalReplay为单例）如下

方法 | 说明
--- | ---
setReplayParams(DWLiveLocalReplayListener replayListener, String dir) | 设置回调、解压路径
setReplayParams(DWLiveLocalReplayListener replayListener, DocView docView, String dir) | 设置回调、文档、解压路径
setReplayPlayerListener(ReplayPlayerListener replayPlayerListener) | 设置播放器回调
start(Context context) | 开始播放
stop() | 停止播放
pause() | 暂停播放
onDestroy() | 释放资源

视频相关API

方法 | 说明
--- | ---
setSpeed(float speed) | 设置倍速
setVideoType(CCBasePlayer.VideoType type) | 设置视频裁剪模式
seekTo(long progress) | 拖拽
getDuration() | 获取视频时长
getCurrentPosition() | 获取当前播放进度
isInPlaybackState() | 是否是可播放状态
isPlaying() | 是否是播放中
getPlayerStatus() | 获取当前的播放状态
getSpeed() | 获取当前的倍速

文档相关API

方法 | 说明
--- | ---
setDocScaleType(DocView.ScaleType type) | 设置文档拉伸模式

#### 1.2.2 回调事件api

回调事件同在线回放

#### 1.2.3 关键代码示例

设置文档展示的控件布局：

    xxxxxxxxxx<com.bokecc.sdk.mobile.live.widget.DocView    android:id="@+id/doc_view"    android:layout_width="match_parent"    android:layout_height="match_parent" />

初始化播放器并设置播放参数

    xxxxxxxxxx...DocView doc_view;...                           // 1. 获取单例                                                                                dwLiveReplay = DWLiveLocalReplay.getInstance();     // 2. 获取解压路径 String playPath FileUtil.getUnzipFileName(path) // 3. 设置离线回放回调、文档控件、解压路径 dwLiveLocalReplay.setReplayParams(dwLiveLocalReplayListener, docView, playPath);   // 4. 设置播放器事件监听     dwLiveLocalReplay.setReplayPlayerListener(playbackPlayerListener); // 5. 开始播放 dwLiveLocalReplay.start(context);   ...

播放器回调

    xxxxxxxxxx...                // 6. 监听DWLiveLocalReplayListener会收到onPlayBackStreamViewPrepared(HDMediaView hdMediaView)                                                                               // 将hdMediaView添加到view上...

#### 1.2.4 集成说明

完成上面的步骤后，基本上我们就能够观看到离线回放的视频画面和文档画面了，也就基本完成了获得场景视频离线回放的核心功能的集成，即观看回放视频和观看回放文档的功能。

## 2. 离线回放其他功能

功能使用时相关的核心类：DWLiveLocalReplayListener（离线回放回调接口类），DWLiveLocalReplay（离线回放核心类）。

### 2.1 聊天功能

离线回放的聊天功能只包括公共聊天内容，此功能为方法回调功能，相关类DWLiveLocalReplayListener，相关方法如下：

方法 | 说明
--- | ---
onChatMessage(TreeSet replayChatMsgs) | 收到回放聊天信息

其中回调回来的对象ReplayChatMsg属性信息如下

    xxxxxxxxxx// 聊天消息内容private String content;  // 聊天消息时间 秒private int time;        // 发送人用户名private String userName;     // 发送人userIdprivate String userId;     // 发送人头像private String avatar;

获取自定义表情的相关方法如下（SDK版本>=4.9.0）：

方法 | 说明
--- | ---
`boolean isOpenCustomEmoji()` | 获取是否开启自定义表情功能
`boolean isCustomEmojiDownloadComplete()` | 自定义表情是否下载完成
`String getEmojiByName(String name)` | 通过表情名获取单个表情，返回表情本地路径
`ArrayList<CustomEmoji> getCustomEmojis()` | 获取所有的自定义表情

### 2.2 问答功能

离线回放的问答的功能包括已公开回答问答和已发布的答案，此功能为方法回调功能，相关类DWLiveReplayListener相关方法如下：

方法 | 说明
--- | ---
onQuestionAnswer(TreeSet qaMsgs) | 收到回放问答信息

返回对象ReplayQAMsg包含问题和回答列表，如何操作该类消息，请查看demo

问答支持图片功能（sdk版本号>=4.9.0）

### 2.3 广播功能

离线回放的广播的功能是直播时发布的广播信息列表，此功能为方法回调功能，相关类DWLiveLocalReplayListener，相关方法如下：

方法 | 说明
--- | ---
onBroadCastMessage(ArrayList broadCastMsgList) | 收到广播信息

返回对象ReplayBroadCastMsg属性信息如下

    xxxxxxxxxx// 广播内容   private String content;                                 //  广播时间（单位：秒）                                                                     private int time;                                // 发广播的人的ID                                                                     private String publisherId;                           // 发广播的人的名字                                                                    private String publisherName;                           // 发广播的人的角色                                                                     //主讲（publisher）、助教（teacher）、主持人（host）、学生或观众（student）、其他没有角色（unknow）private String publisherRole;

### 2.4 回放页面信息

离线回放页面信息是通过回调返回给上层调用，此功能为回调功能，相关类是DWLiveLocalReplayListener，相关方法如下

方法 | 说明
--- | ---
onPageInfoList(ArrayList infoList) | 回放页面信息
onPageChange(String docId, String docName, int docWidth ,int docHeight, int pageNum, int docTotalPage); | 回调当前翻页的信息

返回列表对象ReplayPageInfo属性信息如下：

    xxxxxxxxxx// 当前文档名称               private String docName;// 当前文档页面的标题  private String pageTitle;// 当前文档页面的链接 private String url; // 当前文档页面的翻页时间（单位：S） private int time;