本文主要介绍如何接入SDK回放功能,包括两大部分,核心功能和其他功能
回放登录需要主动调用方法在DWLiveReplay.java(DWLiveReplay为单例)中,如下
方法 | 说明 |
---|---|
getInstance() | 获取DWLiveReplay单例 |
setLoginParams(DWLiveLoginListener dwLiveLoginListener, LoginInfo loginInfo) | (过时) 设置回放登录参数 |
startLogin() | (过时) 开始登录 |
startLogin(ReplayLoginInfo, final DWLiveReplayLoginListener) | (>=3.14.0)设置登录参数并开始登录 |
登录所需参数ReplayLoginInfo如下
xxxxxxxxxx
// 用户ID
private String userId;
// 直播间ID
private String roomId;
// 直播ID
private String liveId;
// 回放ID
private String recordId;
// 观众名称
private String viewerName;
// 观众密码
private String viewerToken;
// 用户分组ID
private String groupId;
//自定义参数UA
private String userCustomUa;
//自定义参数
private String userCustomInfo;
//主次验证标识 1:次验证 默认主验证
private int secondaryVerify;
DWLiveReplayLoginListener
方法 | 说明 |
---|---|
onLogin(TemplateInfo templateInfo) | 登录成功 |
onLogin(TemplateInfo templateInfo, Marquee marquee) | 登录成功 附带跑马灯信息Marquee(重写方法) |
onLogin(TemplateInfo templateInfo, Viewer viewer) | 登录成功 附个人信息Viewer(重写方法) |
onLoginFailed(int code, String message) | 登录失败,4.10.0 版本新增 |
返回信息同直播相同,登录成功可监听onLogin任意一个互调
onLogin(TemplateInfo templateInfo, Marquee marquee)为定制方法,如需使用到界面跑马灯可单独实现该回调
错误码枚举:
错误码 | 描述 | 备注 |
---|---|---|
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,直接展示 |
回放核心类代码在DWLiveReplay.java(DWLiveReplay为单例)如下
方法 | 说明 |
---|---|
setReplayListener(DWLiveReplayListener replayListener) | 设置在线回放回调 |
setReplayPlayerListener(ReplayPlayerListener replayPlayerListener) | 设置播放器回调 |
setReplayDocView(DocView docView) | 设置文档 |
start(Context context) | 开始播放 |
stop() | 停止播放 |
pause() | 暂停播放 |
resume() | 恢复播放 |
onDestroy() | 释放资源 |
视频相关的API
主动设置相关
方法 | 说明 |
---|---|
setLastPosition(long position) | 设置开始播放位置,需在start之前调用 |
retryReplay(long position, boolean updateStream) | 重试播放 positon:播放位置updateStream更换流地址 |
setSpeed(float speed) | 设置播放速率 |
changeLineWithPlayParameter(ReplayLineConfig ,ReplayLineSwitchListener) | (过时) 切换线路 |
changeLineWithNum(int line, ReplayLineSwitchListener changeLineCallback) | (过时) 切换线路 |
changeLine(int lineIndex, ReplayChangeSourceListener changeCallBack) | (>=3.13.0)切换线路 |
changeQuality(int quality, ReplayChangeSourceListener) | (>=3.13.0)切换清晰度 |
changePlayMode(PlayMode, ReplayChangeSourceListener ) | (>=3.13.0)切换音视频播放模式 |
setVideoType(CCBasePlayer.VideoType videoType) | 设置视频视图显示类型(只有多人连麦的低延迟模式有效) |
disableVideo() | 设置默认禁用视频(start前设置) |
主动获取相关
方法 | 说明 |
---|---|
getDuration() | 获取视频时长 |
getSpeed() | 获取当前的倍速 |
getPlayStatus() | 获取当前的播放状态 |
getCurrentPosition() | 获取当前的播放进度 |
isPlaying() | 是否是播放中 |
changeLine(int lineIndex, ReplayChangeSourceListener changeCallBack) | (>=3.13.0)切换线路 |
changeQuality(int quality, ReplayChangeSourceListener) | (>=3.13.0)切换清晰度 |
changePlayMode(PlayMode, ReplayChangeSourceListener ) | (>=3.13.0)切换音视频播放模式 |
setVideoType(CCBasePlayer.VideoType videoType) | 设置视频视图显示类型(只有多人连麦的低延迟模式有效) |
disableVideo() | 设置默认禁用视频(start前设置) |
文档相关的API
主动设置相关
方法 | 说明 |
---|---|
setDocScaleType(DocView.ScaleType type) | 设置文档拉伸模式 |
changeDocBackgroundColor(String color) | 更改文档空白区颜色值 |
主动获取相关
方法 | 说明 |
---|---|
isDocSupport() | 是否支持文档 |
回调事件同直播
设置文档展示的控件布局:
xxxxxxxxxx
<com.bokecc.sdk.mobile.live.widget.DocView
android:id="@+id/doc_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
设置播放参数
xxxxxxxxxx
...
// 1. 获取单例
dwLiveReplay = DWLiveReplay.getInstance();
// 2. 设置回调监听
dwLiveReplay.setReplayListener(dwLiveReplayListener);
// 3. 设置播放器状态回调
dwLiveReplay.setReplayPlayerListener(replayPlayerListener);
// 4. 设置文档
dwLiveReplay.setReplayDocView(docView);
// 5. 开始观看
dwLiveReplay.start(context);
...
播放器回调
xxxxxxxxxx
...
// 6. 监听DwLiveReplayListener会收到onPlayBackStreamViewPrepared(HDMediaView hdMediaView)
// 将hdMediaView添加到view上
...
完成上面的步骤后,基本上我们就能够观看到直播回放的视频画面和文档画面了,也就基本完成了获得场景视频直播回放的核心功能的集成,即观看回放视频和观看回放文档的功能。
功能使用时相关的核心类:DWLiveReplayListener(回放回调接口类),DWLiveReplay(回放核心类)。
回放的聊天功能只包括公共聊天内容,此功能为方法回调功能,相关类DWLiveReplayListener,相关方法如下:
方法 | 说明 |
---|---|
onChatMessage(TreeSet | 收到回放聊天信息 |
其中回调回来的对象ReplayChatMsg属性信息如下
xxxxxxxxxx
// 聊天消息内容
private String content;
// 分组ID
private String groupId;
// 聊天消息时间 秒
private int time;
// 发送人用户名
private String userName;
// 发送人userId
private String userId;
// 发送人头像
private String avatar;
// 用户角色
// 主讲(publisher)、助教(teacher)、主持人(host)、学生或观众(student)、其他没有角色(unknow)
private String userRole;
//发送人自定义标记
private String userCustomMark;
//是否显示此条消息(0: 不显示 1:显示)
private String status;
//发送人的角色 已过时
private int classRole;
主动获取聊天数据 相关类DWLiveReplay
方法 | 说明 |
---|---|
getAllChats(final BaseFunction<TreeSet | 获取回放聊天信息(需在播放成功之后调用) |
回放的问答的功能包括已公开回答问答和已发布的答案,此功能为方法回调功能,相关类DWLiveReplayListener相关方法如下:
方法 | 说明 |
---|---|
onQuestionAnswer(TreeSet | 获取回放问答信息 |
返回对象ReplayQAMsg包含问题和回答列表,如何操作该类消息,请查看demo
主动获取问答数据 相关类DWLiveReplay
方法 | 说明 |
---|---|
getAllQAs(final BaseFunction<TreeSet | 获取所有的问答数据 |
其中 ReplayQuestionMsg 数据中包含的字段信息如下:
xxxxxxxxxx
//问答ID
private String questionId;
//问答内容
private String content;
//分组ID
private String groupId;
//问答发布时间 秒 (相对时间)
private int time;
//发送人ID
private String questionUserId;
//发送人昵称
private String questionUserName;
//发送人头像
private String questionUserAvatar;
// 是否是发布的问题
private int isPublish;
其中 ReplayAnswerMsg 数据中包含的字段信息如下:
xxxxxxxxxx
//回复内容
private String content;
//分组ID
private String groupId;
//发布回复的时间 秒 (相对时间)
private int time;
//发送人昵称
private String userName;
//发送人ID
private String userId;
//发送人头像
private String userAvatar;
//发送人角色 (具体参考 回放用到的 “角色” 字段含义)
private String userRole;
回放的广播的功能是直播时发布的广播信息列表,此功能为方法回调功能,相关类DWLiveReplayListener,相关方法如下:
方法 | 说明 |
---|---|
onBroadCastMessage(ArrayList | 获取广播信息 |
返回对象ReplayBroadCastMsg属性信息如下
xxxxxxxxxx
// 广播内容
private String content;
// 广播时间(单位:秒)
private int time;
// 发广播的人的ID
private String publisherId;
// 发广播的人的名字
private String publisherName;
// 发广播的人的角色
//主讲(publisher)、助教(teacher)、主持人(host)、学生或观众(student)、其他没有角色(unknow)
private String publisherRole;
主动获取广播数据 相关类DWLiveReplay
方法 | 说明 |
---|---|
getAllBoardCasts(final BaseFunction<ArrayList | 获取所有的广播数据 |
回放页面信息是通过回调返回给上层调用,此功能为回调功能,相关类是DWLiveReplayListener,相关方法如下
方法 | 说明 |
---|---|
onPageInfoList(ArrayList | 回放页面信息 |
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;
由于该方法不兼容清晰度的切换,故废弃该方法,使用2.6清晰度切换和2.7线路切换替代
回放可根据返回的线路索引进行线路切换
主动调用方法
方法 | 说明 |
---|---|
changeLineWithPlayParameter(ReplayLineConfig config, ReplayLineSwitchListener callback) | 切换音视频线路、清晰度方法,已过时 |
监听回调方法在DWLiveReplayListener中
方法 | 说明 |
---|---|
numberOfReceivedLines(int lines) | 回放线路回调,已过时 |
numberOfReceivedLinesWithVideoAndAudio(List | 回放线路 清晰度回调,已过时 |
参数属性信息如下:
主动调用方法中ReplayLineConfig属性信息如下
xxxxxxxxxx
//是否启用视频
private boolean disableVideo = false;
//线路索引 音频是视频都存在多条线路
private ReplayLineParams replayLineConfig;
ReplayLineParams属性信息如下
xxxxxxxxxx
//线路 对应ReplayVideoLineParams ReplayAudioLineParams中的lines
private int lineNum = 0;
//清晰度 如果是音频模式 设置无效
private int quality = 0;
回调方法中ReplayVideoLineParams属性信息如下
注意 lines 该属性信息代表的是线路列表,如0,1;0代表线路1,1代表线路2,对应主动调用方法中的lineNum
xxxxxxxxxx
//线路列表
private List<Integer> lines ;
//清晰度
private int quality = 0;
//清晰度描述
private String desp;
ReplayAudioLineParams属性信息如下
xxxxxxxxxx
//线路列表
private List<Integer> lines;
回放可根据返回的清晰度列表进行清晰度切换
主动调用方法
方法 | 说明 |
---|---|
changeQuality(int quality, ReplayChangeSourceListener changeCallBack) | 切换清晰度 |
监听回调方法在DWLiveReplayListener中,该api会存在多次回调 如:切换清晰度、调用开始播放api、从音频切回到视频模式
方法 | 说明 |
---|---|
onHDReceivedVideoQuality(List | 回调清晰度列表和当前播放的清晰度 |
主动调用方法中ReplayChangeSourceListener类说明如下
xxxxxxxxxx
public interface ReplayChangeSourceListener {
/**
* 切换回调
* @param success 是否成功
* -2:切换时间间隔小于3s
* -1:切换的数据不正确
* 0 :切换成功
*/
void onChange(int success);
}
回调方法中ReplayQualityinfo类属性信息如下:
xxxxxxxxxx
/**
* 清晰度的code值,对应主动调用方法中的quality参数
*/
private int quality;
/**
* 清晰度描述
*/
private String desc;
回放可根据返回的线路列表进行线路切换
主动调用方法
方法 | 说明 |
---|---|
changeLine(int index,ReplayChangeSourceListener changeCallBack) | 切换线路 |
监听回调方法在DWLiveReplayListener中,该api会存在多次回调 如:切换清晰度、调用开始播放api、音频/视频模式切换
方法 | 说明 |
---|---|
onHDReceivedVideoAudioLines(List | 回调清晰度列表和当前播放的清晰度 |
主动调用方法中ReplayChangeSourceListener类说明如下
xxxxxxxxxx
public interface ReplayChangeSourceListener {
/**
* 切换回调
* @param success 是否成功
* -2:切换时间间隔小于3s
* -1:切换的数据不正确
* 0 :切换成功
*/
void onChange(int success);
}
回调方法中ReplayLineInfo参数属性信息如下:
xxxxxxxxxx
/**
* 线路名称,该属性参数表示线路代号,如:line1、line2 ...
* 主动调用时传入List<ReplayLineInfo>的索引
*/
private String line;
回放可切换播放模式
主动调用方法
方法 | 说明 |
---|---|
changePlayMode(PlayMode playMode,ReplayChangeSourceListener changeCallBack) | 切换播放模式 |
监听回调方法在DWLiveReplayListener中, 该api会存在多次回调 如:调用开始播放api、音频/视频模式切换
方法 | 说明 |
---|---|
onHDAudioMode(Audio hasAudio) | 是否开启音频模式 |
主动调用方法中PlayMode 参数属性信息如下:
xxxxxxxxxx
/**
* 播放模式
* VIDEO: 视频播放模式
* SOUND: 音频播放模式
*/
public enum PlayMode {
VIDEO, SOUND
}
ReplayChangeSourceListener详细说明如下
xxxxxxxxxx
public interface ReplayChangeSourceListener {
/**
* 切换回调
* @param success 是否成功
* -2:切换时间间隔小于3s
* -1:切换的数据不正确
* 0 :切换成功
*/
void onChange(int success);
}
回调方法中Audio类参数信息如下:
xxxxxxxxxx
/**
* 音频模式
* HAVE_AUDIO_LINE_TURE: 有音频模式
* HAVE_AUDIO_LINE_FALSE: 无音频模式
*/
public enum Audio {
HAVE_AUDIO_LINE_TURE, HAVE_AUDIO_LINE_FALSE
}
回放打点功能,可根据返回的打点数据展示打点数据,界面显示请参考demo
DWLiveReplayListener类监听回调方法
方法 | 说明 |
---|---|
onHDReplayDotList(List | 回放打点数据列表 |
其中ReplayDot类属性如下
xxxxxxxxxx
// 对应回放的时间 单位(秒)
private int time;
// 打点描述
private String desc;
回放随堂测功能
DWLiveReplay类主动获取
方法 | 说明 |
---|---|
getAllPractices(final BaseFunction<ArrayList | 回放随堂测数据列表 |
其中ReplayPracticeInfo类属性如下
xxxxxxxxxx
//随堂测统计数据
private PracticeStatisInfo statisInfo;
//随堂测排名数据
private PracticeRankInfo rankInfo;
//回放随堂测数据
private ReplayPracticeInfoBase replayPracticeInfoBase;
public class PracticeStatisInfo {
private String id; // 随堂测ID
private int type; // 随堂测类型: 0 判断 1 单选 2 多选
private int status; // 随堂测状态 1 发布中 2 停止发布
private int answerPersonNum; // 回答该随堂测的人数
private int correctPersonNum; // 回答正确的人数
private String correctRate; // 正确率
private int stopTime; // 停止时间
private ArrayList<OptionStatis> optionStatis; // 选项的统计信息
public static class OptionStatis {
private String id; // 选项ID
private int index; // 选项编号
private int count; // 选择该选项的人数
private String percent; // 选择的比例
private int isCorrect; // 是否为正确选项 1 正确 0 错误
}
}
public class PracticeRankInfo {
// 排名id:暂不可用
private String id;
// 排名人员信息
private ArrayList<ViewerRankInfo> rankList = new ArrayList<>();
public class ViewerRankInfo {
//提交者的用户id
private String viewerId;
//提交者的名称
private String viewerName;
//提交答案的时间与随堂测发布的时间的差值
private int costTime;
}
}
public static class ReplayPracticeInfoBase {
private String id; //随堂测ID
private int type; //随堂测类型(判断:0,单选:1,多选:2)
private int status; //状态(正在发布:1 已停止:2)
private String publishTime; //发布时间
private long recordId; //回放ID
private int recordTime; //相对于回放开始时长
private int stopRecordTime; //相对于回放开始停止时长
private int closeRecordTime; //相对于回放开始关闭时长
private List<Option> options; //选项
public static class Option {
private double index; //选项(0,1,2,3)
private String id; //选项ID
private double isCorrect; //是否正确(1:正确0:错误)
}
}
回放试看功能
DWLiveReplayListener类监听回调方法
方法 | 说明 |
---|---|
onTrialDuration(int trialDuration) | 回放试看时间点(trialDuration单位为秒) |
版本:>=4.18.0
使用说明:
进入房间,调用getIsAllowCoursewareDownload
获取课件下载开关,开关打开状态下, 调用getCoursewareList
获取当前可供下载的课件列表,当点击下载按钮时,调用getCoursewareDownUrl
获取下载链接(具有时效性,请立即开始下载)。
回放新增API(DWLiveReplay):
xxxxxxxxxx
/**
* 获取是否允许下载课件
* @return false不允许,true允许
*/
public abstract boolean getIsAllowCoursewareDownload();
/**
* 获取课件下载列表
*
* @param pageNum 页码,从1开始
* @param pageCount 每页数量,最多50
* @param callback 回调
*/
public abstract void getCoursewareList(int pageNum, int pageCount, BaseLiveCallback<CoursewareInfo, Integer> callback);
/**
* 获取课件下载地址
*
* @param docId 课件ID
* @param callback 回调
*/
public abstract void getCoursewareDownUrl(String docId, BaseLiveCallback<String, Integer> callback);
CoursewareInfo:
xxxxxxxxxx
public class CoursewareInfo {
/**
* 文件类型
*/
public static final int FILE_TYPE_PDF = 0; // pdf
public static final int FILE_TYPE_DOC = 1; // word
public static final int FILE_TYPE_PPT = 2; // ppt
public static final int FILE_TYPE_IMAGE = 3; // 图片jpg
public static final int FILE_TYPE_GIF = 4; // 图片gif
public static final int FILE_TYPE_HTML = 5; //H5课件
public static final int FILE_TYPE_H5_ZIP = 6; //H5课件,ZIP包格式
/**
* 文档信息
*/
private List<DocsDTO> docs;
/**
* 翻页信息
*/
private PaginationDTO pagination;
public static class PaginationDTO {
private int totalCount;
private int pageCount;
}
public static class DocsDTO {
/**
* 文档ID
*/
private String id;
/**
* 文档显示标题,使用name进行后缀判断
*/
private String title;
/**
* 带后缀名称
*/
private String name;
/**
* 上传时间
*/
private String uploadTime;
/**
* 状态,0,未推送,1,已推送
*/
private int status;
/**
* 发送状态,0,取消,1,推送,收到推送取消消息时使用此字段判断是否显示隐藏item
*/
private int sendStatus;
/**
* 文件大小,字节
*/
private long fileSize;
/**
* 对应文档类型
*/
private int type;
}
}