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()
