支援影片播放操作

在電視輸入服務中使用時光平移 API,讓使用者能夠暫停、倒轉及 快轉直播節目。如果您的應用程式支援 時間移轉,使用者觀看內容的方式更有彈性:

  • 使用者可以暫停播放節目,同時處理短期中斷的工作。 絕不會錯過任何重要時刻
  • 使用者可以快轉曾經看過的內容或 並不感興趣。
  • 使用者可以倒轉及重觀看節目內容中的喜愛的片段。

圖 1. 用於時光平移的 Android TV 播放控制項。

時間移轉會使用短、暫時的計畫資料區段,以便達成 會實作播放直播節目的功能。使用者無法播放這些時間轉換的內容 目前播放工作階段以外的錄製版本也就是說,這些供應商 透過時間轉換來暫停節目,在隔天觀看,或是暫停節目, 可以在切換到其他頻道的期間觀看。

如有需要,可以使用電視錄製 API 讓使用者錄製節目內容,以便在目前播放時一併觀看 會很有幫助

新增時間轉移支援

如要為電視輸入服務新增時光平移支援,您必須在 TvInputService.Session 類別中的時間移轉 API 處理應用程式中的錄音和播放功能,並通知 也就是您的輸入服務所提供的時間轉移支援系統。

您實作的 TvInputService.Session 方法為 包括:

進一步瞭解如何告知系統,您的輸入服務提供支援 請參閱 通知系統時間轉移狀態 專區。

如果您要使用 TIF 輔助程式庫執行 TvInputService.Session 類別,您會自動取得 導入使用 ExoPlayer 的時間移轉功能。您可以使用 導入或覆寫 BaseTvInputService.Session,自行提供 。如要進一步瞭解如何使用 TIF 輔助程式庫,請參閱使用以下應用程式建立電視輸入服務: TIF 輔助程式庫

在工作階段開始時錄製內容

使用者只要存取 調整頻道的播放控制項,一種方法是按下選取 觀看內容,然後前往播放控制項 遠端裝置上專屬的播放控制項。

由於使用者可以 觀看節目內容、在電視上觀看 輸入服務必須在使用者安裝時立即開始記錄時移內容 是與你擁有的 onTune() 。您也需要 透過撥號方式告知系統你,可以錄音 notifyTimeShiftStatusChanged(int), 通知系統時間轉移狀態 專區。

管理錄製的內容儲存空間

您的電視輸入服務負責將時序錄影內容儲存在以下位置: 應用程式的私人應用程式儲存空間,並在系統呼叫時播放內容 和時間轉換方法 onTimeShiftResume()。 如果內容已儲存在雲端,應用程式可以管理 時光平移錄影功能,則可改用雲端儲存空間 應用程式儲存空間

如果你的內容含有受保護內容,電視輸入服務必須負責 適當加密錄製的內容,以及於 播放。

由於錄製的影片內容可能需要大量儲存空間,因此您需要 仔細管理工作階段播放期間的錄製內容。如果播放 工作階段時間超過系統可以記錄 時間移轉,調整時光平移記錄, ,但確保系統會擷取目前時間。舉例來說,如果使用者 也就是正在播放內容 31 分鐘,以及你最大時移錄影 長度為 30 分鐘,請調整錄音檔,並將開始時間 影片。

如果您的電視輸入服務因缺少 如果儲存空間不足,您必須通知系統。如要進一步瞭解如何通知 關於時間移轉支援限制的系統,請參閱 通知系統時間轉移狀態 專區。

使用者切換至其他頻道或結束播放時 工作階段時,請刪除已記錄的時序資料。

通知系統時間轉移狀態

如果您的電視輸入服務支援時光平移,請撥打 notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)在您的 實作 使用者調整音訊時onTune() 頻道連結

告知系統任何輸入服務是否有任何時間轉移功能 變更,使用 notifyTimeShiftStatusChanged(int)。 舉例來說,如果您的電視輸入服務不支援時光平移 原因在於儲存空間限製或其他原因 notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)

如果電視輸入服務完全不支援時光平移,請撥打 notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) 系統就會觸發播放程序系統會將任何 從未來電 將 notifyTimeShiftStatusChanged() 做為無法執行的輸入服務 支援影片播放操作這涵蓋使用 API 級別 22 和

追蹤播放時間

時間平移記錄的起始位置是最早的絕對時間 以毫秒為單位,根據 Epoch 紀元時間判斷要跳轉的位置,以毫秒為單位。這是 通常是指影片開始播放後 系統會呼叫 onTune()。 不過,如果使用者觀看的影片數量超過 應用程式的錄製功能,您必須先開始錄製新片段 請據此調整開始時間。

時間平移錄影的目前位置是目前播放的 位置,以毫秒為單位自 Epoch 紀元時間起算,以毫秒為單位。這個位置不斷變更 播放期間的狀況。一般來說,您可以直接透過播放引擎判斷這項功能 值,如以下範例所示:

Kotlin

override fun onTimeShiftGetCurrentPosition(): Long =
        tvPlayer?.run {
            currentProgram?.let { program ->
                currentPosition + program.startTimeUtcMillis
            }
        } ?: TvInputManager.TIME_SHIFT_INVALID_TIME

Java

@Override
public long onTimeShiftGetCurrentPosition() {
  if (getTvPlayer() != null && currentProgram != null) {
    return getTvPlayer().getCurrentPosition() +
      currentProgram.getStartTimeUtcMillis();
  }
  return TvInputManager.TIME_SHIFT_INVALID_TIME;
}

當系統呼叫 onTimeShiftGetStartPosition() 絕不會大於你提供的目前時間 onTimeShiftGetCurrentPosition()。 系統會使用這些呼叫 更新播放控制項 UI 中的時間偏移值。

支援播放參數

如要在時光平移期間變更播放速度,系統會使用播放參數。適用對象 舉例來說,如果使用者決定倒轉目前播放的內容,新的播放方式 參數以負播放速度傳遞至您的應用程式。 時間轉移也支援多種播放速度 (2 倍或 3 倍) 可倒轉或快轉影片

系統會呼叫您的 onTimeShiftSetPlaybackParams(PlaybackParams) 方法,並帶有 PlaybackParams 物件,其中包含 參數。使用這項資訊 正確設定媒體播放引擎。

如果播放引擎不支援參數, 請盡可能模擬預期的行為。舉例來說 引擎不支援 2 倍速度,請在播放時重複跳轉 將播放速度降到約兩倍

設定參數後,除非使用者 發出需要其他參數或開關的播放指令 並轉移到新頻道