支援內容錄製

電視輸入服務可讓使用者透過 時間移轉 API。 Android 7.0 隨時間轉移擴充資料 讓使用者儲存多個已記錄的工作階段。

使用者可以預先排定錄製時間,也可以在觀看時開始錄影 方案。系統儲存錄製內容後,使用者就能瀏覽、管理 然後使用系統 TV 應用程式播放錄製內容。

如要在電視輸入服務中提供錄製功能, 您必須向系統說明您的應用程式支援錄製、實作 能夠錄製程式、處理並傳達任何發生的錯誤 ,以及管理錄影作業。

說明錄製功能支援

如要讓系統知道你的電視輸入服務支援錄影功能,請設定以下選項: 服務中繼資料 XML 檔案中的 android:canRecord 屬性 至 true

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

如要進一步瞭解服務中繼資料檔案,請參閱 宣告電視輸入來源 定義服務

或者,您也可以使用以下項目,在程式碼中指出記錄支援: 步驟如下:

  1. 透過電視輸入服務「onCreate()」 方法,建立新的 TvInputInfo 物件 (使用 TvInputInfo.Builder 類別。
  2. 建立新的 TvInputInfo 物件時,請呼叫 撥打電話前須等待 setCanRecord(true) build() 表示 服務支援錄製功能。
  3. 透過呼叫TvInputInfo TvInputManager.updateTvInputInfo()

錄製課程

電視輸入服務註冊支援錄製功能後 系統會呼叫 TvInputService.onCreateRecordingSession() 方法 (必須在需要存取) 應用程式內的錄製實作。自行實作 TvInputService.RecordingSession 子類別並傳回 onCreateRecordingSession() 回呼觸發時。這個子類別負責 記錄要求的資料 (例如切換至正確的頻道資料) 以及將記錄狀態和錯誤傳達給系統。

當系統呼叫 RecordingSession.onTune(),傳入頻道 URI,請調整至頻道 以及 URI 指定的通知系統您的應用程式已根據 呼叫所需管道, notifyTuned()或者,如果應用程式無法調到正確的頻道,請呼叫 notifyError()

接著系統會叫用 RecordingSession.onStartRecording() 回呼。您的應用程式必須開始錄製 立即生效系統叫用這個回呼時,可能會提供 URI ,其中包含即將要記錄的節目相關資訊。 記錄完成後,請將資料複製到 RecordedPrograms 資料表中的資料,

最後,系統會呼叫 RecordingSession.onStopRecording()。此時,您的應用程式必須停止 錄製影片您也需要在 RecordedPrograms 這個表格列出了所記錄的工作階段資料 URI RecordedPrograms.COLUMN_RECORDING_DATA_URI 欄和任何節目 系統在初次呼叫 onStartRecording()

想進一步瞭解如何存取 RecordedPrograms 資料表, 請參閱「管理已錄製的工作階段」部分。

處理錄製錯誤

如果錄音時發生錯誤,導致記錄資料無法使用, 透過 notifyError()。 你也可以撥打 建立錄製工作階段後notifyError(),讓系統知道 您的應用程式無法再記錄工作階段。

如果錄製時發生錯誤,但你想提供 僅供使用者播放部分錄影,請呼叫 notifyRecordingStopped():讓系統 使用部分工作階段

管理錄製的工作階段

系統會維護所有已記錄工作階段的資訊 支援錄製功能的頻道應用程式 RecordedPrograms 內容供應器表格。您可透過 RecordedPrograms 內容錄製 URI將內容供應器 API 用於 讀取、新增及刪除這個資料表中的項目。

如要進一步瞭解如何使用內容供應器資料,請參閱 內容供應器基礎知識

最佳做法

電視裝置的儲存空間可能有限,因此請在 正在分配儲存空間,以便儲存已記錄的工作階段。使用 RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) 時間 空間不足,無法儲存錄製的工作階段。

使用者啟動記錄作業後,應立即開始記錄資料 。為了方便起見,請先完成所有前置費時 例如,當系統叫用 onCreateRecordingSession() 回呼。這麼做可以先 即時錄影 onStartRecording() 回呼會觸發。