1 概述
三分屏是一种支持 ppt 或 pdf 文档与视频同步播放的双窗口播放模式。使用一大一小两个播放窗口,布局灵活,能自由切换主屏播放内容,支持为 ppt 或 pdf 文档的每一页设定播放时间点来实现自动翻页功能,支持点击课件目录上的课件进行播放进度跳转,支持下载到本机离线播放。为客户更丰富的授课场景提供了可能。
2 快速集成
2.1 SDK 版本
如果想使用点播的三分屏功能,请将 PolyvVodSDK 升级到 2.10.0 以上,gradle 设置如下:
Copy implementation 'com.easefun.polyv:polyvPlayer:2.10.0'//SDK核心包
2.2 demo 代码
三分屏相关的悬浮窗、ppt、ppt 目录相关的核心代码都是在 demo 的 package com.easefun.polyvsdk.ppt 包中,所以需要将这个包拷贝到您的项目中。
2.3 demo 示例
在 PolyvPlayerActivity
类中创建 ppt、课程目录、悬浮窗布局并添加到界面中,使用播放器的 videoView.setOnPPTStatusListener
方法监听 ppt 的 状态,在传给相应的控件中处理即可。相关代码为:
Copy //添加副屏布局
private void addViceScreenLayout(final PolyvVideoView videoView) {
videoView.post(new Runnable() {
@Override
public void run() {
//添加副屏布局
viceScreenLayout = PolyvViceScreenLayout.addViceLayoutInWindow(PolyvPlayerActivity.this, videoView.getBottom());
mediaController.setPPTLayout(viceScreenLayout, landPptDirLayout);
//添加ppt布局
pptView = new PolyvPPTView(PolyvPlayerActivity.this);
viceScreenLayout.addView(pptView);
viceScreenLayout.bindView(videoView, pptView);
}
});
}
//监听ppt状态
videoView.setOnPPTStatusListener(new IPolyvOnPPTStatusListener() {
@Override
public void onPPTCallback(String vid, boolean hasPPT, PolyvPptInfo pptvo) {
if (!videoView.isPPTEnabled()) {
hasPPT = false;
pptvo = null;
}
if (viceScreenLayout != null) {
viceScreenLayout.acceptPPTCallback(vid, hasPPT, pptvo);
}
portPptDirLayout.acceptPPTCallback(videoView, vid, hasPPT, pptvo);
landPptDirLayout.acceptPPTCallback(videoView, vid, hasPPT, pptvo);
landPptErrorLayout.acceptPPTCallback(videoView, vid, hasPPT, pptvo);
}
});
3 三分屏播放
三分屏的在线/离线播放还是用之前的方式,区别只是需要多添加一个监听器,以监听这个视频的课件信息,用来决定是否需要显示课件。设置监听器的方法为:
Copy videoView.setOnPPTStatusListener(new IPolyvOnPPTStatusListener() {
@Override
public void onPPTCallback(String vid, boolean hasPPT, PolyvPptInfo pptvo) {
//vid:当前播放视频的vid
//hasPPT:当前播放的视频是否有课件
//pptvo:课件信息,获取失败时为空(hasPPT为true时也可能为null),可以使用方法重新加载课件信息
}
});
4 显示 ppt
需要显示课件,首先要定义悬浮窗布局,参考 demo 中的 PolyvViceScreenLayout
,以及课件布局,参考 demo 中的 PolyvPPTView
。把课件添加都悬浮窗布局,以及把悬浮窗布局添加到界面之后,再把课件信息监听器的回调参数悬浮窗布局即可。
4.1 PolyvViceScreenLayout
悬浮窗布局
Copy //添加副屏布局到界面中
public static PolyvViceScreenLayout addViceLayoutInWindow(Activity activity, int marginTop)
//接收课件信息监听器的回调
public void acceptPPTCallback(String vid, boolean hasPPT, PolyvPptInfo pptvo)
//绑定播放器、课件布局
public void bindView(PolyvVideoView videoView, PolyvPPTView pptView)
//当前课件是否在主屏显示
public boolean isPPTInMinScreen()
//切换课件和播放器的位置
public void switchLocation()
//隐藏
public void hide()
//显示
public void show()
//销毁
public void destroy()
4.2 PolyvPPTView
课件布局,负责同步视频的时间加载及显示对于课件的图片
Copy //接收课件加载进度
public void acceptProgress(int loadPPTProgress)
//接收课件信息监听器的回调
public void acceptPPTCallback(final PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo)
4.3 PolyvPPTDirLayout
课件目录布局
Copy //接收课件信息监听器的回调
public void acceptPPTCallback(PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo)
4.4 PolyvPPTErrorLayout
课件加载失败时显示的布局
Copy //接收课件信息监听器的回调
public void acceptPPTCallback(PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo)
5 三分屏下载
当 sdk 升级到 2.10.0 后,如果视频有 ppt,那么下载视频的时候默认会把 ppt 也下载下来。
6 重新加载课件信息
在线获取 ppt 信息的接口可能会请求失败,或者离线下载的 ppt 不一定完整,这时就需要重新获取 ppt,具体可以参考 demo 中 PolyvPPTRegainTask
的使用。
6.1 PolyvPPTRegainTask
重新加载在线/离线课件信息的封装类。
Copy //重新加载课件信息
public void regainPPT(String vid, Context context, OnPPTRegainLisnter lisnter, boolean isOnline)
//停止任务
public void shutdown()