|
|
|
# 关于如何接入SDK离线回放功能
|
|
|
|
|
|
|
|
本文主要介绍如何接入SDK离线回放功能,包括两大部分,核心功能和其他功能
|
|
|
|
|
|
|
|
- [关于如何接入SDK离线回放功能](#关于如何接入sdk离线回放功能)
|
|
|
|
- [1. 离线回放核心功能](#1-离线回放核心功能)
|
|
|
|
- [1.1 离线回放数据的下载和解压](#11-离线回放数据的下载和解压)
|
|
|
|
- [1.2 离线回放播放视频和文档](#12-离线回放播放视频和文档)
|
|
|
|
- [1.2.1 主动调用api](#121-主动调用api)
|
|
|
|
- [1.2.2 回调事件api](#122-回调事件api)
|
|
|
|
- [1.2.3 关键代码示例](#123-关键代码示例)
|
|
|
|
- [1.2.4 集成说明](#124-集成说明)
|
|
|
|
- [2. 离线回放其他功能](#2-离线回放其他功能)
|
|
|
|
- [2.1 聊天功能](#21-聊天功能)
|
|
|
|
- [2.2 问答功能](#22-问答功能)
|
|
|
|
- [2.3 广播功能](#23-广播功能)
|
|
|
|
- [2.4 回放页面信息](#24-回放页面信息)
|
|
|
|
|
|
|
|
|
|
|
|
## 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 关键代码示例
|
|
|
|
|
|
|
|
设置文档展示的控件布局:
|
|
|
|
|
|
|
|
```xml
|
|
|
|
<com.bokecc.sdk.mobile.live.widget.DocView
|
|
|
|
android:id="@+id/doc_view"
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
android:layout_height="match_parent" />
|
|
|
|
```
|
|
|
|
|
|
|
|
初始化播放器并设置播放参数
|
|
|
|
|
|
|
|
```java
|
|
|
|
...
|
|
|
|
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);
|
|
|
|
...
|
|
|
|
```
|
|
|
|
|
|
|
|
播放器回调
|
|
|
|
|
|
|
|
```java
|
|
|
|
...
|
|
|
|
// 6. 监听DWLiveLocalReplayListener会收到onPlayBackStreamViewPrepared(HDMediaView hdMediaView)
|
|
|
|
// 将hdMediaView添加到view上
|
|
|
|
...
|
|
|
|
```
|
|
|
|
|
|
|
|
#### 1.2.4 集成说明
|
|
|
|
|
|
|
|
完成上面的步骤后,基本上我们就能够观看到离线回放的视频画面和文档画面了,也就基本完成了获得场景视频离线回放的核心功能的集成,即观看回放视频和观看回放文档的功能。
|
|
|
|
|
|
|
|
## 2. 离线回放其他功能
|
|
|
|
|
|
|
|
功能使用时相关的核心类:DWLiveLocalReplayListener(离线回放回调接口类),DWLiveLocalReplay(离线回放核心类)。
|
|
|
|
|
|
|
|
### 2.1 聊天功能
|
|
|
|
|
|
|
|
离线回放的聊天功能只包括公共聊天内容,此功能为方法回调功能,相关类DWLiveLocalReplayListener,相关方法如下:
|
|
|
|
|
|
|
|
| 方法 | 说明 |
|
|
|
|
| ---------------------------------------------------- | ---------------- |
|
|
|
|
| onChatMessage(TreeSet<ReplayChatMsg> replayChatMsgs) | 收到回放聊天信息 |
|
|
|
|
|
|
|
|
其中回调回来的对象ReplayChatMsg属性信息如下
|
|
|
|
|
|
|
|
```java
|
|
|
|
// 聊天消息内容
|
|
|
|
private String content;
|
|
|
|
// 聊天消息时间 秒
|
|
|
|
private int time;
|
|
|
|
// 发送人用户名
|
|
|
|
private String userName;
|
|
|
|
// 发送人userId
|
|
|
|
private String userId;
|
|
|
|
// 发送人头像
|
|
|
|
private String avatar;
|
|
|
|
```
|
|
|
|
|
|
|
|
### 2.2 问答功能
|
|
|
|
|
|
|
|
离线回放的问答的功能包括已公开回答问答和已发布的答案,此功能为方法回调功能,相关类DWLiveReplayListener相关方法如下:
|
|
|
|
|
|
|
|
| 方法 | 说明 |
|
|
|
|
| --------------------------------------------- | ---------------- |
|
|
|
|
| onQuestionAnswer(TreeSet<ReplayQAMsg> qaMsgs) | 收到回放问答信息 |
|
|
|
|
|
|
|
|
返回对象ReplayQAMsg包含问题和回答列表,如何操作该类消息,请查看demo
|
|
|
|
|
|
|
|
### 2.3 广播功能
|
|
|
|
|
|
|
|
离线回放的广播的功能是直播时发布的广播信息列表,此功能为方法回调功能,相关类DWLiveLocalReplayListener,相关方法如下:
|
|
|
|
|
|
|
|
| 方法 | 说明 |
|
|
|
|
| ------------------------------------------------------------ | ------------ |
|
|
|
|
| onBroadCastMessage(ArrayList<ReplayBroadCastMsg> broadCastMsgList) | 收到广播信息 |
|
|
|
|
|
|
|
|
返回对象ReplayBroadCastMsg属性信息如下
|
|
|
|
|
|
|
|
```java
|
|
|
|
// 广播内容
|
|
|
|
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<ReplayPageInfo> infoList) | 回放页面信息 |
|
|
|
|
| onPageChange(String docId, String docName, int docWidth ,int docHeight, int pageNum, int docTotalPage); | 回调当前翻页的信息 |
|
|
|
|
|
|
|
|
返回列表对象ReplayPageInfo属性信息如下:
|
|
|
|
|
|
|
|
```java
|
|
|
|
// 当前文档名称
|
|
|
|
private String docName;
|
|
|
|
// 当前文档页面的标题
|
|
|
|
private String pageTitle;
|
|
|
|
// 当前文档页面的链接
|
|
|
|
private String url;
|
|
|
|
// 当前文档页面的翻页时间(单位:S)
|
|
|
|
private int time;
|
|
|
|
``` |
|
|
|
\ No newline at end of file |