保利威文档中心

幫助中心

8 三分屏播放

更新時間:2023-04-17 15:27:58

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()
联系客服,在线咨询