TV Input Framework --Android官方說明

原文地址:https://source.android.google.cn/devices/tv/

 

Android TV Input Framework (TIF) 簡化了向 Android TV 傳送直播內容的過程。Android TIF 爲製造商提供了一個標準 API,用於創建能夠控制 Android TV 的輸入模塊,並讓他們可以通過 TV Input 發佈的元數據來搜索和推薦直播電視內容。

此框架的目的並不在於實施電視標準或區域性要求,而是在於讓設備製造商不必重新實現就能夠更輕鬆地滿足區域性數字電視廣播標準。對於想要創建自定義 TV Input 的第三方應用開發者來說,本部分文檔可能也非常實用。

組件

Android TIF 的實現包括 TV Input Manager。TIF 可與 TV 應用(一款第三方應用無法替代的系統應用)搭配使用來訪問內置頻道和 IP 調諧器頻道。此 TV 應用通過 TV Input Manager 與設備製造商或其他方提供的 TV Input 模塊進行通信。

TIF 由以下幾個部分組成:

  • TV Provider (com.android.providers.tv.TvProvider):具有頻道、節目和相關權限的數據庫
  • TV 應用 (com.android.tv.TvActivity):處理用戶互動操作的應用
  • TV Input Manager (android.media.tv.TvInputManager):使 TV Input 可與 TV 應用進行通信
  • TV Input:代表物理或虛擬調諧器和輸入端口的應用
  • TV Input HAL(tv_input 模塊):一種硬件定義,實現後可讓系統 TV Input 訪問電視專用硬件
  • 家長控制:用於屏蔽頻道和節目的技術
  • HDMI-CEC:使用戶可通過 HDMI 遠程控制各種設備的技術

下面將詳細介紹這些組件。有關 Android TIF 架構的詳細視圖,請參見下圖。

Android TIF 架構概述

圖 1. Android TV Input Framework (TIF) 架構

流程

下面列出了此架構的運作流程:

  1. 用戶看到 TV 應用(一款第三方應用無法替代的系統應用)並與該應用進行互動。
  2. TV 應用顯示來自 TV Input 的 AV 內容。
  3. TV 應用無法直接與 TV Input 通信。TV Input Manager 可爲 TV 應用識別 TV Input 的狀態。有關使用限制的更多詳情,請參閱下文的“TV Input Manager”部分。

權限

  • 只有 signatureOrSystem TV Input 和 TV 應用擁有對 TV Provider 數據庫的完全訪問權限,並且能夠接收 KeyEvent。
  • 只有系統 TV Input 可以通過 TV Input Manager Service 訪問 TV Input HAL。系統通過 TV Input Manager 會話對 TV Input 進行一對一訪問。
  • 第三方 TV Input 擁有對 TV Provider 數據庫的訪問權限(軟件包已鎖定),只能對匹配的軟件包行進行讀寫。
  • 第三方 TV Input 可以顯示自己的內容,也可顯示來自設備製造商提供的直通 TV Input(如 HDMI1)上的內容。它們不能顯示來自非直通 TV Input(如內置調諧器或 IPTV 調諧器)的內容。
  • 硬件 TV Input 應用的 TV_INPUT_HARDWARE 權限,向 TV Input Manager Service 發送信號,以通知 TV Input Service 在啓動時調用 TV Input Manager Service 並添加其 TV Input。藉助此權限,硬件 TV Input 應用可通過一個 TV Input Service 支持多個 TV Input,並能夠動態地添加和移除支持的 TV Input。

TV Provider

TV Provider 數據庫會存儲來自 TV Input 的頻道和節目。TV Provider 還發布和管理相關權限,以使 TV Input 只能查看自身的記錄。例如,特定的 TV Input 只能查看它自己提供的頻道和節目,並被禁止訪問任何其他 TV Input 的頻道和節目。

TV Provider 在內部將“廣播類型”映射到“規範類型”。TV Input 負責使用基本廣播標準中的值填充“廣播類型”,而“規範類型”字段將使用來自 android.provider.TvContract.Genres 的正確相關類型自動填充。例如,對於廣播標準 ATSC A/65 和類型爲 0x25(意爲“體育”)的節目,TV Input 將使用字符串“Sports”填充“廣播類型”,並且 TV Provider 將使用映射的值android.provider.TvContract.Genres.SPORTS 填充“規範類型”字段。

有關 TV Provider 的詳細視圖,請參見下圖。

Android TV Provider

圖 2. Android TV Provider

只有在經授權的系統分區中的應用才能讀取整個 TV Provider 數據庫。

直通 TV Input 不存儲頻道和節目。

除了頻道和節目的標準字段以外,TV Provider 數據庫還在 TV Input 可能用來存儲任意數據的每個表格中提供 BLOB 類型字段 (COLUMN_INTERNAL_PROVIDER_DATA)。該 BLOB 數據可能包括自定義信息(如相關調諧器的頻率),並可通過協議緩衝區或其他形式提供。還提供“可搜索”字段,用於確保搜索結果中不顯示某些頻道(例如,爲了滿足某些國家/地區對於內容保護的特定要求)。

數據庫字段示例

TV Provider 支持頻道 (android.provider.TvContract.Channels) 和節目 (android.provider.TvContract.Programs) 表格中的結構化數據。這些表格由 TV Input 和系統應用(如 TV 應用)進行填充和訪問。這些表格具有四種類型的字段:

  • 顯示:顯示字段包含應用可能希望向用戶顯示的信息,如頻道名稱 (COLUMN_DISPLAY_NAME) 或數字 (COLUMN_DISPLAY_NUMBER) 或正在觀看的節目的標題。
  • 元數據:根據相關標準,有三個字段可用於識別內容,如頻道的傳輸流 ID (COLUMN_TRANSPORT_STREAM_ID)、原始網絡 ID (COLUMN_ORIGINAL_NETWORK_ID) 和服務 ID (COLUMN_SERVICE_ID)。
  • 內部數據:用於自定義 TV Input 用途的字段。
    某些字段(如 COLUMN_INTERNAL_PROVIDER_DATA)是可自定義的 BLOB 字段,TV Input 可以在這些字段中存儲有關其頻道或節目的任意元數據。
  • 標記:標記字段表示是否應禁止搜索、瀏覽或查看某個頻道。只能在頻道級別進行此設置。所有節目均應遵循此項頻道設置。
    • COLUMN_SEARCHABLE:在某些地區可能要求禁止搜索某些頻道。COLUMN_SEARCHABLE = 0 表示不應在搜索結果中顯示此頻道。
    • COLUMN_BROWSABLE:僅對系統應用可見。禁止應用瀏覽頻道。COLUMN_BROWSABLE = 0 表示頻道列表中不應包含此頻道。
    • COLUMN_LOCKED:僅對系統應用可見。禁止未輸入 PIN 碼的無效帳號觀看頻道。COLUMN_LOCKED = 1 表示此頻道應受家長控制保護。

有關這些字段的更爲詳盡的列表,請參閱 android/frameworks/base/media/java/android/media/tv/TvContract.java

權限和訪問控制

有權訪問相應行的任何人都可以查看所有字段。用戶無法直接訪問任何字段;他們僅可看到 TV 應用、系統應用或 TV Input 顯示的內容。

  • 每一行都具有 PACKAGE_NAME,即擁有該行的軟件包(應用),可通過 TvProvider.java 在“查詢”、“插入”、“更新”語句中獲得該名稱。TV Input 僅可以訪問它自己寫入的信息,無法訪問其他 TV Input 提供的信息。
  • 通過 AndroidManifest.xml 讀取、寫入權限(需用戶同意)來確定可用的頻道。
  • 只有 signatureOrSystem 應用纔可以獲取訪問整個數據庫的 ACCESS_ALL_EPG_DATA 權限。

TV Input Manager

TV Input Manager 爲整個 Android TIF 提供了一箇中央系統 API。它對應用與 TV Input 之間的交互進行控制,並提供家長控制功能。TV Input Manager 必須與 TV Input 創建一對一的會話。TV Input Manager 允許應用訪問安裝的 TV Input,以便應用可以:

  • 列出 TV Input 並查看其狀態
  • 創建會話並管理監聽器

對於會話,TV Input(除了可使用 TvContract.buildChannelUriForPassthroughInput() 調諧的直通 TV Input)只能由 TV 應用調諧至已被 TV 應用添加到 TV Provider 數據庫中的 URI。TV Input 也可以自己設置音量。由設備製造商(簽名應用)或安裝於系統分區中的其他應用提供和簽名的 TV Input 具有對整個 TV Provider 數據庫的訪問權限。此訪問權限可用於構建應用,以瀏覽和搜索所有可用的電視頻道和節目。

應用可以通過 android.media.tv.TvInputManager 創建和註冊一個 TvInputCallback,並在 TV Input 的狀態發生改變或添加/移除 TV Input 時進行該回調。例如,TV 應用可以在 TV Input 斷開連接時做出以下響應:顯示該 TV Input 已斷開連接並阻止它被選中。

TV Input Manager 使 TV 應用和 TV Input 之間的通信變得抽象化。TV Input Manager 和 TV Input 標準界面使多個設備製造商可以創建自己的 TV 應用,同時讓所有第三方 TV Input 適用於所有 TV 應用。

TV Input

TV Input 具有 AndroidManifest.xml 並且會預安裝或通過 Play 商店、旁加載進行安裝,因此是 Android 應用。Android TV 支持預安裝的系統應用、由設備製造商簽名的應用和第三方 TV Input。

某些輸入源(如 HDMI 或內置調諧器輸入源)只能由製造商提供,因爲它們與底層硬件直接通信。其他輸入源(如 IPTV、易地播放和外接機頂盒)可由第三方將其作爲 APK 在 Google Play 商店中進行提供。一旦被下載並安裝,便可以在 TV 應用中選擇這一新的輸入源。

直通輸入源示例

Android TV 系統輸入源

圖 3. Android TV 系統輸入源

在上述示例中,由設備製造商提供的 TV Input 是可信輸入源,並擁有對 TV Provider 的完全訪問權限。作爲直通 TV Input,它不會向 TV Provider 註冊任何頻道或節目。要獲取用於引用直通輸入源的 URI,請使用android.media.tv.TvContract 實用程序方法buildChannelUriForPassthroughInput(String inputId)。TV 應用與 TV Input Manager 進行通信,從而訪問 HDMI TV Input。

內置調諧器示例

Android TV 內置調諧器輸入源

圖 4. Android TV 內置調諧器輸入源

在上述示例中,由設備製造商提供的內置調諧器 TV Input 是可信輸入源,具有對 TV Provider 的完全訪問權限。

第三方輸入源示例

Android TV 第三方輸入源

圖 5. Android TV 第三方輸入源

在上述示例中,外接機頂盒 TV Input 由第三方提供。由於此 TV Input 無法直接訪問傳入的 HDMI 視頻 Feed,所以必須藉助 TV Input Manager 並使用設備製造商提供的 HDMI TV Input。

通過 TV Input Manager,外接機頂盒 TV Input 可以與 HDMI TV Input 進行通信,並請求它在 HDMI1 上顯示視頻。因此,機頂盒 TV Input 可以控制電視,而製造商提供的 HDMI TV Input 則可呈現視頻。

畫中畫 (PIP) 示例

Android TV KeyEvent

圖 6. Android TV KeyEvent

上圖顯示了遙控器上的按鈕事件如何傳遞到特定的 TV Input,從而實現畫中畫 (PIP) 顯示。按下按鈕的操作由設備製造商提供的硬件驅動程序進行解析,從而將硬件掃描碼轉換爲 Android 鍵碼,並將它們作爲KeyEvent 傳遞到標準的 Android 輸入通道 InputReader 和 InputDispatcher 函數。當 TV 應用獲得焦點時,它們就會在 TV 應用上觸發事件。

只有系統 TV Input 纔有資格接收 InputEvents(前提是這些系統 TV Input 具有 RECEIVE_INPUT_EVENT 系統權限)。TV Input 負責確定要消費哪些 InputEvent,並允許 TV 應用處理它不需要消費的按鍵。

TV 應用負責確定哪些系統 TV Input 處於有效狀態(即用戶已選擇)、區分傳入的 KeyEvents 並將它們路由到正確的 TV Input Manager 會話,以及調用dispatchInputEvent() 以將事件傳遞到相關聯的 TV Input。

MHEG-5 輸入源示例

下圖詳細說明了 KeyEvents 如何通過 Android TIF 進行路由。

Android TV 紅色按鈕示例

圖 7. Android TV 紅色按鈕示例

上圖描繪了紅色按鈕應用的流程,該按鈕在歐洲較爲常用,使用戶能夠訪問電視機上的交互式應用。應用可以通過此傳輸流程進行傳送。用戶點擊此按鈕後,便可以與這些廣播應用進行交互。例如,您可以使用這些廣播應用來訪問相關網頁或體育賽事比分。

請參閱“廣播應用”部分,瞭解廣播應用如何與 TV 應用進行互動。

在此示例中:

  1. TV 應用獲得焦點並接收所有按鍵事件。
  2. KeyEvents(例如:紅色按鈕)作爲 InputEvents. 被傳遞到處於有效狀態的 TV Input。
  3. 系統 TV Input 與 MHEG-5 堆棧進行集成,並擁有 RECEIVE_INPUT_EVENT 系統權限。
  4. TV Input 在接收到激活鍵碼(例如:紅色按鈕)後激活廣播應用。
  5. TV Input 將 KeyEvents 當做 InputEvents 進行消費,然後廣播應用獲得焦點並處理InputEvents 直到應用被關閉。

注意:第三方 TV Input 從不接收按鍵事件。

TV Input HAL

在開發 TV Input 以訪問電視專用硬件的過程中,TV Input HAL 起到了輔助作用。與其他 Android HAL 一樣,TV Input HAL (tv_input) 可在 AOSP 源碼樹中獲取,由供應商制定其實現方法。

TV 應用

系統 TV 應用向用戶呈現直播電視內容。Android 平臺提供了一個參考 TV 應用 (Live TV),設備製造商可以直接按原樣使用該應用、對其進行定製、擴展或將其替換掉。Android 開放源代碼項目中提供了源代碼,您可以按照參考 TV 應用一文中的說明開始構建 TV 應用。

設備製造商可以擴展他們的 TV 應用來實現適用於特定設備製造商或國家/地區的功能,但這不屬於 TIF 或參考 TV 應用的職責範疇。

系統 TV 應用至少需處理以下任務:

設置和配置

  • 自動檢測 TV Input
  • 讓 TV Input 啓動頻道設置
  • 控制家長設置
  • 修改頻道

查看

  • 訪問和瀏覽所有電視頻道
  • 訪問電視節目信息欄
  • 顯示電子收視指南 (EPG) 數據
  • 支持多個音頻和字幕軌道
  • 提供家長控制 PIN 碼輸入口令
  • 允許 TV Input 界面疊加層以執行:
    • 電視標準(HbbTV 等)
  • 填充電視頻道和節目的搜索結果
  • 顯示應用鏈接卡片
  • 支持時移 API
  • 處理 DVR 功能並支持電視錄製 API

隨着新 Android 版本的發佈,平臺 TIF API 得到擴展,此功能集將有所增加。CTS 驗證程序涵蓋了相關的兼容性測試。

支持第三方 TV Input

Android TV 提供面向第三方 TV Input 的開發者 API,使安裝的應用能夠將軟件頻道與直播電視體驗相融合。爲確保 Android 設備實現保持兼容性,系統 TV 應用有責任向用戶顯示第三方 TV Input 和頻道。參考 Live TV 應用提供了兼容的實現方法;如果要替換系統 TV 應用,則設備製造商必須確保自己的應用提供類似的兼容性,以滿足開發者對所有 Android TV 設備的期望。

系統 TV 應用必須在設備的默認直播電視服務旁邊顯示第三方輸入源。開發者 API 的承諾是,用戶能夠在其標準電視體驗中找到頻道(安裝後)。

根據 Android CDD 的“TV 應用”部分的定義,內置頻道和第三方頻道之間可存在外觀差異。

以下部分說明了 Live TV 應用如何滿足 CDD 要求。

新頻道設置

用戶可首先通過從應用商店(如 Google Play)中查找和安裝 TV Input,開始添加新的第三方輸入源/頻道。

某些第三方 TV Input 可自動將頻道添加到 TvProvider 數據庫中。然而,大多數 TV Input 將提供“設置”操作組件,使用戶能夠設置他們的頻道、提供登錄詳細信息及執行其他操作。系統 TV 應用需要確保用戶可以啓用此“設置”操作組件,因此 CDD 要求在主 TV 應用中只需極少的導航操作便可進入第三方輸入源。

參考 Live TV 應用提供了“頻道來源”菜單,以供用戶訪問輸入源。

轉至“設置”

圖 8. 轉到設置

轉至“設置”中的頻道來源

圖 9. 轉到“設置”中的頻道來源

從列表中選擇您的頻道來源。

圖 10. 從列表中選擇您的頻道來源。

從您的頻道來源中添加頻道

圖 11. 從您的頻道來源中添加頻道

此外,在安裝新的 TvInput 之後,TV 應用菜單的頂部會出現一張通知卡片,讓用戶直接轉到“設置”頁面:

表示有可用新頻道來源的通知。

圖 12. 表示有可用新頻道來源的通知。

如果用戶通過通知進行操作,他們可以選擇設置頻道來源,如圖 10 所示。

請參閱定義您的 TV Input Service,瞭解開發者對此領域的期望。

自定義頻道列表

設備製造商可以提供一個界面來隱藏某些頻道,並讓用戶能夠管理自己的 EPG。Live TV 包括此項功能。

在“設置”中打開頻道列表。

圖 13. 在設置中打開頻道列表。

自定義您的頻道列表。

圖 14. 自定義您的頻道列表。

EPG

第三方輸入源開發者需要確信,用戶可以在常規使用過程中在所有兼容的 Android TV 設備上輕鬆轉到他們的頻道。

來自第三方輸入源的頻道必須作爲設備的標準直播電視體驗 EPG 的一部分展示出來。可以對第三方頻道在外觀上加以區別或將其歸入單獨的類別(請參閱 Android CDD 的“TV 應用”部分),而最重要的是讓用戶能夠找到所安裝的頻道。

搜索

爲確保最佳用戶體驗,製造商必須實現以下 TV 應用功能:納入能夠滿足全局搜索請求的搜索結果。Live TV 提供了一種實現方法(請參閱 com.android.tv.search.TvProviderSearch),它可提供來自第三方輸入源(對於平臺兼容性而言是必要的)以及內置輸入源的結果。

時移

對於運行 Android 6.0 及更高版本的設備,TV 應用必須支持 Android 框架時移 API。此外,製造商必須在 TV 應用中實現播放控件,讓用戶可以對播放內容執行暫停、繼續、快退和快進播放等操作。

對於支持時移的 TV Input,TV 應用需顯示播放控件。

播放控件

圖 15. 播放控件

DVR

對於運行 Android 7.0 及更高版本的設備,TV 應用必須支持 Android 框架電視錄製 API,從而支持、列出和播放錄製的節目。

這樣,設備製造商就可以將其 DVR 子系統插入 TIF,並顯著減少在電視設備上啓用或集成 DVR 功能所需的集成工作量。它還使第三方能夠提供可插入 Android TV 設備的售後市場 DVR 系統。

除了錄製直播內容外,TV 應用還可以處理資源衝突。例如,如果設備配備了兩個調諧器,它便可以同時錄製兩檔節目。如果用戶要求錄製三檔節目,則 TV 應用必須處理這種衝突,並且應該顯示通知或要求用戶爲這些請求安排優先級。

TV 應用還可以實現更復雜的邏輯安排,例如,在用戶請求錄製一集劇集時詢問用戶是否希望錄製所有後續劇集。

請參閱以下圖表,瞭解可以在 Android TV 中完成的 DVR 實現。

Android TV 中的數字錄像功能

圖 16. Android TV 中的數字錄像功能

  1. TV Input Service 通知 TV 應用可用的調諧器數量,以便 TV 應用可以處理潛在的資源衝突。
  2. TV 應用接收用戶發起的電視節目錄制請求。
  3. TV 應用將錄製時間表存儲於內部數據庫中。
  4. 當到了錄製時刻,TV 應用會傳遞相應請求,以將頻道調諧到與錄製請求相關的頻道。
  5. TV Input Service 接收該請求,迴應是否有合適的資源,並調諧到該頻道。
  6. 然後 TV 應用將開始錄製的請求傳遞給 TV Input Manger。
  7. TV Input Service 接收該請求並開始錄製。
  8. TV Input Service 將實際視頻數據存儲在存儲空間中(可能是外部存儲空間或雲端存儲空間)。
  9. 當完成錄製時,TV 應用將停止錄製的請求傳遞給 TV Input Manager。
  10. 一旦 TV Input Service 接收到該請求,它將停止錄製並將其相關聯的元數據添加到 TV Provider,以便 TV 應用可以在收到請求時向用戶顯示錄製內容。

要詳細瞭解如何在 TV Input Service 中實現錄製功能,請參閱電視錄製一文。

實用資源

  • Android CDD 和開發者 API 文檔是最具權威性的參考資料。
  • CTS 驗證程序會在兼容性測試計劃過程中執行 API。對照 Live TV 運行 CTS 驗證程序可能是一種在第三方輸入源環境中查看 EPG、搜索、家長控制和其他要求的實用方法。
  • 請參閱定義您的 TV Input Service,瞭解開發者對此領域的期望。

家長控制

家長控制使用戶能夠屏蔽不希望播放的頻道和節目,但通過輸入 PIN 碼便可繞過該屏蔽。

TV 應用、TV Input Manager Service、TV Provider 和 TV Input 共同承擔實現家長控制功能的責任。

家長控制是強制性的,且在 CTS 驗證程序的涵蓋範圍之內。

許多國家/地區已定義了 TV Input 可以通過 TVContentRating API 使用的分級制度。此外,TV Input 可以按照 CTS 驗證程序測試(引入了“假”分級制度)所演示的步驟註冊自己的自定義分級制度。在存在標準分級制度的國家/地區,我們鼓勵設備製造商將 TIF 家長控制與他們可能包含的任何其他機制結合到一起。

TV Provider

現在,每個頻道行都有一個 COLUMN_LOCKED 字段,用於鎖定特定頻道,使用戶在未輸入 PIN 碼的情況下無法觀看這些頻道。節目字段COLUMN_CONTENT_RATING 僅針對顯示操作,而不用於落實家長控制。

TV Input Manager

TV Input Manager 會存儲所有已屏蔽的 TvContentRating,並對 isRatingBlocked() 作出響應,從而建議是否應該屏蔽具有給定評級的內容。

TV Input

當所顯示內容的評級發生變化(因節目或頻道發生變化)或家長控制設置發生變化(在 ACTION_BLOCKED_RATINGS_CHANGED 和ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED 上)時,TV Input 可通過對 TV Input Manager 調用isRatingBlocked() 來檢查是否應該屏蔽當前內容。如果應屏蔽此內容,TV Input 會停用相關音頻和視頻,並通過調用notifyContentBlocked(TvContentRating) 通知 TV 應用當前內容已被屏蔽。如果不應屏蔽此內容,TV Input 將啓用音頻和視頻,並通過調用notifyContentAllowed() 通知 TV 應用當前內容可播放。

TV 應用

要滿足家長控制 API 的要求並創建一個兼容的平臺,系統 TV 應用需要爲用戶提供一種管理家長控制的方式,包括使具體應用能夠註冊任何自定義評級制度。

當 TV Input 通知 TV 應用當前內容已被屏蔽或當用戶嘗試查看已屏蔽的頻道時,TV 應用將顯示 PIN 碼界面。

TV 應用不直接存儲家長控制設置。當用戶更改家長控制設置時,TV Input Manager 會存儲所有已屏蔽的 TvContentRating,TV Provider 則存儲已屏蔽的頻道。

TV 應用需要聲明 android.permission.MODIFY_PARENTAL_CONTROLS 權限,才能更改家長控制設置。

我們鼓勵設備製造商進行如下操作:

  • 對照作爲參考的 Live TV 應用進行 CTS 驗證程序家長控制測試,以對兼容性要求進行驗證。
  • 使用 Live TV 應用作爲自己的 TV 應用的參考:請重點參閱 ContentRatingsManager 和 RatingSystemsFragment 源代碼,瞭解二者處理自定義評級的方式。

HDMI-CEC

藉助 HDMI-CEC,一臺設備可以控制另一臺設備,從而讓用戶通過單個遙控器控制家庭影院中的多臺設備。Android TV 使用 HDMI-CEC 來加快設置過程,並允許通過中央 TV 應用遠程控制多個 TV Input。例如,它可以切換輸入源、開啓或關閉設備等。

Android TIF 可將 HDMI-CEC 作爲 HDMI 控制服務進行實現,以便設備製造商可以跳過更加複雜的商業邏輯,只需開發與輕量級 Android TV HAL 進行交互的低級驅動程序。Android 提供標準實現的目的是,通過減少分散的實現和選擇性功能支持來消除兼容性問題。HDMI 控制服務會使用現有的 Android 服務(包括輸入和電源)。

這意味着現有 HDMI-CEC 實現將需要重新設計,才能與 Android TIF 進行互操作。我們建議硬件平臺納入微處理器,以接收 CEC 開機命令和其他命令。

Android TV 上的 CEC 集成

圖 17. Android TV 上的 CEC 集成

  1. CEC 總線從當前活動來源接收切換到不同來源的命令。
  2. 驅動程序將命令傳遞給 HDMI-CEC HAL。
  3. HAL 通知所有 ActiveSourceChangeListeners
  4. HDMI 控制服務通過 ActiveSourceChangeListener 獲取來源更改通知。
  5. TV Input Manager Service 爲 TV 應用生成切換來源的 Intent。
  6. TV 應用隨後爲充當切換目標的 TV Input 創建 TV Input Manager 會話,並對該會話調用 setMain
  7. TV Input Manager 會話將此信息傳遞給 HDMI TV Input。
  8. HDMI TV Input 請求設置 sideband Surface。
  9. 對 Surface 進行設置後,TV Input Manager Service 生成相應的路由控制命令並將其返回到 HDMI 控制服務。

電視集成指南

廣播應用

由於每個國家/地區都具有針對廣播的特定要求(MHEG、電視文字廣播、HbbTV 等),製造商需要爲廣播應用提供他們自己的解決方案,例如:

  • MHEG:原生堆棧
  • 電視文字廣播:原生堆棧
  • HbbTV:由 Opera 瀏覽器修改過的 webkit

在 Android L 版本中,Android TV 希望設備製造商針對區域性電視堆棧使用系統集成器或 Android 解決方案,將 Surface 傳遞到電視軟件堆棧,或傳遞與傳統堆棧進行交互所需的按鍵代碼。

廣播應用和 TV 應用的交互方式如下:

  1. TV 應用獲得焦點,接收所有按鍵事件。
  2. TV 應用將按鍵(如紅色按鈕)事件傳遞到 TV Input 設備。
  3. TV Input 設備在內部與傳統電視堆棧進行集成。
  4. 在接收到激活鍵碼(如紅色按鈕)時,TV Input 設備將激活廣播應用。
  5. 廣播應用獲得 TV 應用中的焦點,並處理用戶操作。

對於語音搜索/推薦功能,廣播應用可能支持以語音搜索的方式進行應用內搜索。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章