為 Android 的本地 SDK 創建一個插件

在本主題中,您將學習如何為 Android 版本原生 SDK 建立外掛程式。

概覽

在較高級別,插件通過偵聽和發出事件與播放器集成。插件可以偵聽來自播放器和其他插件的事件。插件可以為播放器和其他插件發出事件。

此內容以及示例代碼位於https://github.com/BrightcoveOS/android-plugin-guide

插件架構

插件應在實例化時向SDK註冊。要註冊一個插件應該發出一個REGISTER_PLUGIN一個事件PLUGIN_NAME屬性。例如:

Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Event.PLUGIN_NAME, "my custom plugin");
eventEmitter.emit(EventType.REGISTER_PLUGIN, properties);

視頻播放通常會通過標準的生命週期事件流進行:

外掛程式事件流程
外掛程式事件流程

活動詳情

插件可以監聽事件,這些事件會啟動一些操作,以更改播放器的默認行為。這些事件包括:

  • WILL_CHANGE_VIDEO
  • SET_VIDEO
  • SET_SOURCE
  • PLAY
  • PAUSE
  • SEEK_TO
  • STOP

可以通過阻止默認偵聽器接收事件和/或通過停止將事件傳播到非默認偵聽器來更改默認行為。阻止默認監聽器接收事件是通過調用preventDefault()方法。可以通過調用stopPropagation()方法。要是preventDefault()調用後,將通知其餘的非默認偵聽器。要是stopPropagation()調用後,仍將通知默認偵聽器,但其他非默認偵聽器將被跳過。插件還可以使用這些方法來暫停正常事件流並插入其他行為,例如初始化插件。插件可以通過再次發出原始事件來恢復事件流。

插件還可以偵聽事件,這些事件表明操作已完成。這些事件通常由分析插件使用。這些事件包括:

  • DID_CHANGE_LIST
  • DID_SELECT_SOURCE
  • DID_PAUSE
  • DID_PLAY
  • DID_SEEK_TO
  • DID_SET_SOURCE
  • DID_STOP
  • PROGRESS
  • COMPLETED

中斷播放

想要中斷視頻內容播放的插件應使用WILL_INTERRUPT_CONTENTWILL_RESUME_CONTENT。這些事件通常由廣告插件使用。一個插件應該發出WILL_INTERRUPT_CONTENT請求暫停播放(如果當前正在播放),並請求使視頻視圖不可見。一個插件應該發出WILL_RESUME_CONTENT要求再次顯示視頻視圖。的WILL_RESUME_CONTENT事件應包括ORIGINAL_EVENT屬性,將在視頻視圖可見後發出。的ORIGINAL_EVENT應該是PLAY恢復播放的事件,CUE_POINT繼續提示點處理的事件,或者COMPLETED事件以完成播放。一種SKIP_CUE_POINTS屬性應添加到ORIGINAL_EVENT以防止遞歸提示點處理。

提示點

許多插件都想听CUE_POINT事件。提示點分為三種類型,BEFOREPOINT_IN_TIMEAFTERBEFORE提示點在播放開始之前發出。POINT_IN_TIME當播放到達提示點的位置時會發出提示點。AFTER播放完成後立即發出提示點。插件應使用WILL_INTERRUPT_CONTENTWILL_RESUME_CONTENT事件在處理提示點事件時中斷並恢復內容播放。對於提示點之前和之後,事件將包括ORIGINAL_EVENT屬性,具有PLAY事件或COMPLETED事件。提示點事件還包括CUE_POINTS屬性和一批提示點。START_TIMEEND_TIME屬性定義提示點時間範圍。

樣本目錄

樣本目錄包括一個基於Android Studio的項目,其中包含兩個模塊:

  • 樣品插件 -一個示例插件,可以用作編寫新插件的基礎。
  • SamplePluginApplication -顯示如何將插件合併到Brightcove視頻應用程序中,以及如何將其用於測試SamplePlugin或新插件。

實施步驟

編寫插件的步驟包括:

  1. 將樣本插件複製到新的存儲庫。
  2. 更改包和類的名稱。
  3. 更新TAG初始化程序。
  4. 編輯@Emits@ListensFor註釋以反映插件發出和監聽的事件。
  5. 根據需要修改構造函數。
  6. 更換或卸下videoView相關邏輯。
  7. 修改initializeListeners()通過根據需要添加和/或減去事件偵聽器。
  8. 編譯並分發您的插件.aar Android Studio的文件。