在電視輸入服務中使用時光平移 API,讓使用者能夠暫停、倒轉及 快轉直播節目。如果您的應用程式支援 時間移轉,使用者觀看內容的方式更有彈性:
- 使用者可以暫停播放節目,同時處理短期中斷的工作。 絕不會錯過任何重要時刻
- 使用者可以快轉曾經看過的內容或 並不感興趣。
- 使用者可以倒轉及重觀看節目內容中的喜愛的片段。
![](https://developer.android.google.cn/static/images/training/tv/tif/time-shift.png?authuser=19&hl=zh-tw)
圖 1. 用於時光平移的 Android TV 播放控制項。
時間移轉會使用短、暫時的計畫資料區段,以便達成 會實作播放直播節目的功能。使用者無法播放這些時間轉換的內容 目前播放工作階段以外的錄製版本也就是說,這些供應商 透過時間轉換來暫停節目,在隔天觀看,或是暫停節目, 可以在切換到其他頻道的期間觀看。
如有需要,可以使用電視錄製 API 讓使用者錄製節目內容,以便在目前播放時一併觀看 會很有幫助
新增時間轉移支援
如要為電視輸入服務新增時光平移支援,您必須在
TvInputService.Session
類別中的時間移轉 API
處理應用程式中的錄音和播放功能,並通知
也就是您的輸入服務所提供的時間轉移支援系統。
您實作的 TvInputService.Session
方法為
包括:
onTimeShiftGetCurrentPosition()
: 藉此取得 播放位置,以毫秒為單位。詳情請參閱 追蹤播放時間專區。onTimeShiftGetStartPosition()
: 系統呼叫的指令 目前時光平移記錄的位置 (以毫秒為單位)。詳情 請參閱「追蹤播放時間」一節。onTimeShiftPause()
: 當使用者暫停播放時呼叫。onTimeShiftResume()
: 當使用者繼續播放時呼叫。onTimeShiftSeekTo(long)
: 當系統需要尋找 來變更時間順序通常,新位置會在 起始位置和目前位置onTimeShiftSetPlaybackParams(PlaybackParams)
: 系統呼叫的 提供目前工作階段的播放速度,例如播放速度。 詳情請參閱 支援播放參數一節。
進一步瞭解如何告知系統,您的輸入服務提供支援 請參閱 通知系統時間轉移狀態 專區。
如果您要使用 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 倍速度,請在播放時重複跳轉 將播放速度降到約兩倍
設定參數後,除非使用者 發出需要其他參數或開關的播放指令 並轉移到新頻道