使用原生開發套件的圖片

在本主題中,您將學習如何使用 Brightcove 原生播放程式 SDK,在您的應用程式中實作「以相片」模式進行「圖片」模式。

概覽

畫中畫(PIP)模式允許用戶在其設備上執行多任務。借助此功能,您可以創建在用戶執行其他任務時將小的視頻播放窗口固定在屏幕角落的應用程序。

圖片模式中的圖片
圖片模式中的圖片

功能

Brightcove本機SDK提供的畫中畫功能支持以下功能:

  • 用戶通過單擊控制欄中的PIP圖標以圖片模式輸入圖片時,開發人員可以通過編程方式進入PIP模式。
  • 用戶可以將PIP窗口拖動到屏幕的各個角落以將其放置在最方便的位置。
  • 用戶可以在“畫中畫”窗口中暫停和播放視頻,或者將其完全刪除。用戶還可以將視頻最大化,回到應用內體驗。
  • PIP模式可在應用程序,設備背景和其他應用程序之上運行。

支援的版本

以下版本支持畫中畫模式:

裝置作業系統版本

  • 安卓:奧利奧8.0+(API級別26+)
  • iOS:10.0+

原生 SDK 版本

  • 安卓:適用於Android版本6.1.0+的Brightcove本機SDK
  • iOS:適用於iOS版本6.4.4+的Brightcove本機SDK

安卓實作

以下主題將幫助您開始使用畫中畫功能:

有關詳細信息,請參閱 Android 的畫中畫支持指南 .

使用BrightcovePlayer

開始使用畫中畫的最簡單方法是讓您的活動擴展BrightcovePlayer .為此,請按照下列步驟操作:

  1. 在你的樣式.xml文件,通過添加以下代碼啟用畫中畫按鈕:
    <style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
        <item name="brightcove_picture_in_picture">true</item>
    </style>
  2. 在你的AndroidManifest.xml文件,聲明畫中畫支持為活動添加以下內容:
    <activity android:name="VideoActivity"
      android:resizeableActivity="true"
      android:supportsPictureInPicture="true"
      android:configChanges=
          "screenSize|smallestScreenSize|screenLayout|orientation"
      ...
    

    這是重要的一步。如果您不聲明它,當用戶按下 Brightcove 媒體控制器中的畫中畫按鈕時,一個IllegalStateException將被拋出:

    java.lang.IllegalStateException: enterPictureInPictureMode: Current activity does not support picture in picture

在以圖片模式進入圖片時,活動本身會調整大小,將所有活動組件保留在圖片窗口的圖片中。為避免這種情況並提供更容易的實現,Brightcove視頻視圖將自動進入“全屏”,以匹配父版面的寬度和高度,從而僅在圖片窗口中的圖片中顯示視頻。退出此模式後,Brightcove視頻視圖將返回其原始狀態。

如果您不想在您的應用中使用畫中畫,您可以通過在您的應用中添加以下代碼來禁用畫中畫按鈕樣式.xml文件:

<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
    <item name="brightcove_picture_in_picture">false</item>
</style>

使用常規活動

如果您使用的活動不會延長BrightcovePlayer,除瞭如前一節所述聲明支持畫中畫外,您還需要執行一些額外的步驟:

  1. 打開主活動.java文件。
  2. 在裡面onCreate活動的方法,向 Brightcove 註冊活動PictureInPictureManager :
    PictureInPictureManager.getInstance().registerActivity(Activity, BrightcoveVideoView)
  3. 在裡面onDestroy方法,註銷活動:
    PictureInPictureManager.getInstance().unregisterActivity(Activity)
  4. 覆蓋onPictureInPictureModeChanged活動方法,並調用onPictureInPictureModeChanged()方法如下圖:
    @Override
      public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) {
         super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
         PictureInPictureManager.getInstance().onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
      }
  5. 最後,覆蓋onUserLeaveHint()活動方法,並調用onUserLeaveHint()如下所示:
    @Override
      public void onUserLeaveHint () {
         super.onUserLeaveHint();
         PictureInPictureManager.getInstance().onUserLeaveHint();
      }

完成這些步驟後,“畫中畫”按鈕將自動出現在Brightcove Media Controller中。您還可以通過以下方式以編程方式觸發畫中畫:

PictureInPictureManager.getInstance().enterPictureInPictureMode()

自定義畫中畫

您可以通過自定義畫中畫窗口的行為和外觀PictureInPictureManager .例如,您可以更改窗口的縱橫比或為視頻啟用/禁用字幕。

Android Oreo原生提供了三個可以自定義的參數:

用戶動作

Brightcove 添加了一個RemoteAction默認情況下,它處理Play/Pause視頻事件並設置它們各自的圖標。這意味著默認RemoteAction將被添加到您使用以下設置的遠程操作列表中:

setUserActions

請記住,您只能設置有限數量的操作。得到最大動作數,調用以下內容:

Activity.getMaxNumPictureInPictureActions()

隱藏式字幕

在畫中畫模式下播放視頻時,您可以通過在畫中畫模式中調用以下命令來啟用/禁用隱藏式字幕inPictureInPictureManager .

setClosedCaptionsEnabled(boolean)

默認情況下,隱藏式字幕在手機中處於禁用狀態,而在平板電腦中處於啟用狀態。要在畫中畫模式下播放時減小隱藏式字幕的大小,請調用以下命令設置一個介於01.0f .

setClosedCaptionsReductionScaleFactor(float)

默認情況下,畫中畫模式中的隱藏式字幕大小為0.5f或原始尺寸的 50%。最後,Activity時要進入畫中畫模式onUserLeaveHint()被調用,將以下設置為true :

setOnUserLeaveEnable(boolean)

參數

為了檢索圖片參數中的當前圖片,可以調用以下命令:

PictureInPicture.getBrightcovePictureInPictureParams()

此調用返回BrightcovePictureInPictureParams對象,它具有前面討論的所有參數的 getter。

iOS 實作

要開始使用畫中畫,請添加showPictureInPictureButtonBCOVPUIPlayerViewOptions .設置為true時,畫中畫按鈕將添加到支持的設備上的播放器控件中。

畫中畫是其中之一iOS 14 的新功能 .

如需詳細資訊,請參閱下列內容:

有關代碼示例,請參見基本視頻播放應用程序 .

限制

Android

  • 畫中畫僅適用於裝有Android Oreo或更高版本的設備
  • 目前不支持Android TV
  • 不支援含有廣告的影片
  • 不支援 360 視訊

iOS

  • Brightcove 的服務器端廣告 (SSAI) 支持畫中畫,但客戶端廣告(包括 IMA、FreeWheel 或 Pulse)不支持 PIP。
  • 不支援 360 視訊

已知問題

Android

  • 我們發現,在圖片模式下以圖片模式播放的受Widevine保護的視頻在裝有Android 8.0的Pixel C中將變為透明或黑色。在與Android 8.1相同的設備上無法重現此問題。