8 三分屏播放

1 概述

三分屏是一种支持 ppt 或 pdf 文档与视频同步播放的双窗口播放模式。使用一大一小两个播放窗口,布局灵活,能自由切换主屏播放内容,支持为 ppt 或 pdf 文档的每一页设定播放时间点来实现自动翻页功能,支持点击课件目录上的课件进行播放进度跳转,支持下载到本机离线播放。为客户更丰富的授课场景提供了可能。

2 快速集成

2.1 SDK 版本

如果想使用点播的三分屏功能,请将 PolyvVodSDK 升级到 2.10.0 以上,gradle 设置如下:

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 的 状态,在传给相应的控件中处理即可。相关代码为:

//添加副屏布局
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 三分屏播放

三分屏的在线/离线播放还是用之前的方式,区别只是需要多添加一个监听器,以监听这个视频的课件信息,用来决定是否需要显示课件。设置监听器的方法为:

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

悬浮窗布局

//添加副屏布局到界面中
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

课件布局,负责同步视频的时间加载及显示对于课件的图片

//接收课件加载进度
public void acceptProgress(int loadPPTProgress)
//接收课件信息监听器的回调
public void acceptPPTCallback(final PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo)

4.3 PolyvPPTDirLayout

课件目录布局

//接收课件信息监听器的回调
public void acceptPPTCallback(PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo)	

4.4 PolyvPPTErrorLayout

课件加载失败时显示的布局

//接收课件信息监听器的回调
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

重新加载在线/离线课件信息的封装类。

//重新加载课件信息
public void regainPPT(String vid, Context context, OnPPTRegainLisnter lisnter, boolean isOnline)
//停止任务
public void shutdown()

Last updated