谷歌致力於推進種族平等的黑人社區。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

電視輸入框架

Android的電視HAL圖標

Android的電視輸入框架(TIF)簡化的直播內容到Android電視發貨。而Android TIF提供標準的API為製造商控制Android的電視創建輸入模塊,並允許通過由電視輸入發布的元數據直播的電視節目搜索和建議。

該框架不尋求執行電視標準或地區的要求,但並使其更容易為設備製造商,以滿足區域數字電視廣播標準,無需重新實施。在本節文件也可能是誰想要創建自定義的電視輸入的第三方應用程序開發人員有用。

組件

Android的電視輸入框架實現包括電視輸入管理。該TIF的工作原理與電視應用程序,不能由一個第三方應用程序來替換系統應用程序,內置的接入和IP調諧器通道。電視應用程序與由通過TV輸入管理設備製造商或其他方提供的電視輸入模塊通信。

電視輸入框架包括:

  • 電視提供商( com.android.providers.tv.TvProvider )的渠道,程序和相關權限的數據庫
  • 電視應用程序( com.android.tv.TvActivity ):應用程序處理用戶的交互
  • TV輸入管理器( android.media.tv.TvInputManager ):允許TV輸入到與TV應用程序進行通信
  • TV輸入:代表物理或虛擬調諧器和輸入端口的應用程序
  • TV輸入HAL( tv_input模塊):一個硬件定義允許系統電視輸入到訪問特定TV-硬件實現時
  • 家長控制:該技術允許的頻道和節目的封鎖
  • HDMI-CEC:該技術以允許通過HDMI的各種設備的遙控

這些組分被覆蓋在下面詳細。見為Android TV輸入框架體系結構的詳細視圖下面圖。

Android的TIF體系結構概述
圖1.的Android TV輸入框架(TIF)架構

這裡是架構是如何行使:

  1. 用戶看到並與電視應用程序,不能由一個第三方應用程序來替換系統應用程序進行交互。
  2. 電視應用程序顯示從電視輸入AV內容。
  3. 電視應用程序不能與電視輸入直接對話。電視輸入經理識別電視輸入為電視應用程序的狀態。請參見下面的電視輸入管理有關這些限制的更多細節。

權限

  • 只有signatureOrSystem電視輸入和電視應用程序已經完全進入了電視提供商的數據庫,並能夠接收的KeyEvent。
  • 只有系統電視輸入可以通過電視輸入管理服務訪問電視輸入HAL。電視輸入被訪問的一到一個通過電視輸入管理會話。
  • 第三方電視輸入有電視提供數據庫包鎖定訪問和可以讀/寫只匹配包行。
  • 第三方電視輸入可以顯示來自設備製造商的直通電視的投入,像HDMI1自己的內容或內容。它們不能顯示非直通電視輸入的內容,就像一個內置或IPTV調諧器。
  • TV_INPUT_HARDWARE對於硬件電視輸入應用程序的權限,信號的電視輸入管理服務,通知在啟動電視輸入服務調用電視輸入管理服務,並增加其電視輸入。該權限允許硬件電視輸入的應用程序來支持每個電視輸入服務的多個電視輸入,以及能夠動態地添加和刪除其支持電視輸入。

電視供應商

電視提供數據庫存儲從電視輸入的頻道和節目。電視提供商也發布和管理相關權限,使電視輸入只能看到自己的記錄。例如,一個特定的電視輸入只能看到頻道和節目也已提供,並授權任何其他電視輸入“頻道和節目禁止。

電視供應商“廣播流派”映射到“經典風格”的內部。電視輸入是負責填充“廣播流派”在底層的廣播標準值,“規範類型”字段將自動與正確的相關流派填充android.provider.TvContract.Genres 。例如,與廣播標準的ATSC A / 65和程序與流派0x25(意為“體育”),則TV輸入將填充“廣播種類”與字符串“體育”和電視提供商將填充“規範類型”字段與映射值android.provider.TvContract.Genres.SPORTS

請參閱電視提供商的詳細視圖下圖。

Android的電視供應商
圖2. Android的電視供應商

只有應用時在特權系統分區可以讀取整個電視供應商數據庫。

直通電視輸入不存儲頻道和節目。

除了對頻道和節目的標準領域,電視供應商數據庫還提供了一個BLOB類型字段, COLUMN_INTERNAL_PROVIDER_DATA ,在每個表電視輸入可用於存儲任意數據。即BLOB數據可以包括自定義信息,諸如相關聯的調諧器的頻率,並且可以在協議緩衝器或另一種形式來提供。可搜索字段可做出一定的渠道,搜索(如用於內容保護符合國家的具體要求)不可用。

數據庫字段的例子

電視提供商支持結構中的信道(數據android.provider.TvContract.Channels )和程序( android.provider.TvContract.Programs )表。這些表填寫,並通過電視輸入和系統應用程序,如電視應用程序訪問。這些表有四種類型的字段:

  • 顯示:顯示字段包含應用程序可能想要對用戶可見,像信道的名稱(信息COLUMN_DISPLAY_NAME )或數字( COLUMN_DISPLAY_NUMBER ),或正在觀看的節目的標題。
  • 元數據:有三個字段用於標識內容,根據有關標準,就像一個信道的傳送流ID( COLUMN_TRANSPORT_STREAM_ID ),原始網絡ID( COLUMN_ORIGINAL_NETWORK_ID )和業務ID( COLUMN_SERVICE_ID )。
  • 內部數據 :字段是自定義使用電視輸入。
    一些領域,如COLUMN_INTERNAL_PROVIDER_DATA ,是可定制的BLOB字段,其中一台電視機輸入可以存儲他們的頻道或節目任意元數據。
  • 標誌:標誌字段表示是否一個信道應當從搜索,瀏覽,或觀看被限制。這只能在通道電平來設定。所有程序推遲到通道上的設置。
    • 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

權限和訪問控制

所有字段都是可見的任何人訪問相應的行。任何字段都向用戶直接訪問;他們只看到了電視應用程序,系統應用,或電視輸入表面。

  • 每一行都有PACKAGE_NAME ,包(應用程序)擁有該列,查詢,插入,通過TvProvider.java更新檢查。電視輸入設備可以訪問只有它寫道,並從其他電視輸入提供的信息封鎖的信息。
  • READ,經由的AndroidManifest.xml寫權限(需要用戶同意),以確定可用的信道。
  • 只有signatureOrSystem應用程序可以獲取ACCESS_ALL_EPG_DATA權限訪問整個數據庫。

電視輸入管理

電視輸入Manager提供了一個中央系統API到整個Android電視輸入框架。它仲裁應用和電視輸入之間的相互作用,並提供家長控制功能。電視輸入管理會議必須建立一個對一個有電視的投入。電視輸入Manager允許訪問安裝了TV輸入,因此應用可能:

  • 名單電視輸入和檢查其狀態
  • 創建會話和管理偵聽器

對於會話,電視輸入可以由TV應用程序被調諧到僅它的URI已經添加到電視提供者數據庫,除了直通電視輸入,其可被調諧到使用TvContract.buildChannelUriForPassthroughInput()電視訊號輸入也可能有其卷集。電視輸入提供和由設備製造商(簽名應用程序)或安裝在系統分區將具有訪問整個電視提供商數據庫其他應用簽名。這種訪問可以用於構建應用程序,瀏覽並在所有可用的電視頻道和節目搜索。

一個應用程序可以創建並註冊一個TvInputCallbackandroid.media.tv.TvInputManager被叫做電視輸入的狀態改變背面或添加或電視輸入的去除。例如,電視應用程序能夠反應時,TV輸入通過顯示其為斷開連接,並防止它的選擇斷開。

電視輸入經理抽象的電視應用和電視輸入之間的通信。電視輸入管理和電視輸入的標準接口,允許多個設備製造商創建自己的電視應用程序,同時幫助所有的電視應用程序的所有第三方電視輸入工作。

電視輸入

電視輸入是在這個意義上Android應用程序,他們有一個AndroidManifest.xml中,並安裝(通過播放,預裝,或側載)。 Android的電視支持預安裝的系統應用,應用的設備製造商和第三方電視輸入簽名。

一些輸入,如HDMI輸入或內置調諧器輸入,只能由製造商,因為他們與底層硬件直接說話提供。其他諸如IPTV,地方移和外部機頂盒,可以由第三方提供作為谷歌的APK Play商店。一旦下載並安裝,新的輸入可以在電視應用程序內選擇。

直通輸入例如

Android的電視系統輸入
圖3. Android的電視系統輸入

在此實例中,由設備製造商提供的TV輸入是可信的,並具有完全訪問電視提供商。作為一個直通的電視輸入時,它不註冊與電視供應商的任何頻道或節目。為了獲得URI用於引用輸入直通,使用android.media.tv.TvContract實用方法buildChannelUriForPassthroughInput(String inputId)電視應用與電視輸入管理通信,以達到HDMI電視輸入。

內置調諧器的例子

Android的電視內置調諧器輸入
圖4. Android的電視內置調諧器輸入

在這個例子中,由設備製造商提供的內置調諧器電視信號輸入被信任且具有完全訪問電視提供商。

第三方輸入示例

Android的電視第三方輸入
圖5. Android TV的第三方輸入

在這個例子中,外部STB電視輸入由第三方提供。由於該電視輸入不能直接訪問HDMI視頻飼料進來的,它必須經過電視輸入管理和使用由設備製造商提供的HDMI電視輸入。

通過電視輸入管理,外部機頂盒的電視輸入可通過HDMI輸入的電視講話,並要求它顯示在HDMI1視頻。因此,儘管製造商提供的HDMI電視輸入呈現視頻的機頂盒的電視輸入可以控制電視。

畫中畫(PIP)例子

Android的電視的KeyEvents
圖6.在Android TV的KeyEvents

以上示出了圖如何遙控器上的按鈕被傳遞到一個特定的電視輸入為畫中畫(PIP)顯示。這些按鈕按壓通過由設備製造商提供的硬件驅動程序解釋,轉換硬件掃描碼到Android鍵碼並將它們傳遞給標準Android 輸入管道 InputReaderInputDispatcher功能的KeyEvent 。這些在電視機上應用轉觸發事件,如果它是焦點。

只有系統電視輸入有資格接受InputEvents ,只有當他們有RECEIVE_INPUT_EVENT系統權限。電視輸入負責,以確定哪些消費和InputEvents應該允許電視應用程序來處理它不需要消耗鑰匙。

電視應用程序負責了解哪個系統電視機輸入活性的,意思由用戶選擇,並且消除歧義傳入KeyEvents ,並將它們路由到正確的TV輸入管理會話,呼叫dispatchInputEvent()對事件傳遞給相關聯的電視輸入。

MHEG-5的輸入實例

下圖顯示的是如何更詳細的視圖KeyEvents通過Android TIF路由。

Android的電視紅色按鈕例子
圖7. Android TV的紅色按鈕示例

它描繪了一個紅色按鈕的應用程序在歐洲讓用戶在他們的電視機訪問交互式應用程序的流程,常見的。應用程序可以在這個傳輸流傳遞。當點擊該按鈕,它可以讓用戶與這些廣播程式互動。例如,您可以使用這些廣播應用訪問相關網頁或體育比賽分數。

廣播應用部分,了解如何與廣播電視應用進行互動。

在這個例子:

  1. 電視應用程序是在重點和接收所有按鍵。
  2. KeyEvents (例如紅色按鈕)被傳遞到活動的電視輸入作為InputEvents.
  3. 該系統的電視輸入集成了MHEG-5堆棧,並且在RECEIVE_INPUT_EVENT系統權限。
  4. 在接收激活密鑰號碼(例如,紅色按鈕)時,TV輸入激活廣播應用程序。
  5. TV輸入消耗KeyEvents作為InputEvents和廣播應用是重點和把手InputEvents直到被解散。

:第三方電視的投入從未領取鑰匙。

電視輸入HAL

電視輸入HAL有助於電視投入的發展,電視特有的訪問硬件。如同其它的Android的HAL中,TV輸入HAL( tv_input )是AOSP源樹中可用和供應商開發的執行。

電視應用

該系統電視應用程序呈現實況電視內容給用戶。參考電視應用程序(實時TV)被沿著Android平台,其可以原樣的,定制的,擴展的,或由設備製造商替換可以使用,只要。該源代碼是在Android開源項目可用,您可以在開始使用它參考電視應用的文章。

設備製造商可能會延長他們的電視應用程序來實現設備製造商或國家特定的功能,但是這不是TIF的範圍或者參照電視應用程序。

至少,系統電視應用程序需要處理以下任務:

設置和配置

  • 自動檢測輸入電視
  • 讓電視輸入發起通道設置
  • 家長控制設置
  • 編輯頻道

查看

  • 訪問和瀏覽所有電視頻道
  • 訪問電視節目信息欄
  • 顯示電子節目指南(EPG)數據
  • 支持多種音頻和字幕軌道
  • 供應家長控制PIN挑戰
  • 允許電視標準(HbbTV的,等等)電視輸入UI覆蓋
  • 為電視頻道和節目填充搜索結果
  • 顯示應用聯卡
  • 支持時間平移的API
  • 處理DVR功能和支持電視節目錄製的API

該功能集將在新的Android版本,其中平台TIF API的擴展線增加。 CTS驗證提供了兼容性測試覆蓋率。

第三方電視輸入支持

Android的電視提供了開發者API的第三方電視的投入,使安裝的應用程序提供軟件渠道進入直播電視體驗。為了確保兼容的Android設備實現,該系統的電視應用程序有關於堆焊第三方電視的投入和渠道,用戶的一些責任。參考直播電視的應用程序提供了一個兼容的實現;如果更換系統電視應用程序,設備製造商必須確保自己的應用提供類似的兼容性,在所有Android TV設備符合開發商的預期。

該系統電視應用程序必須同設備的默認直播電視服務面第三方輸入。開發者的API的承諾是,用戶將能夠找到自己的標準的電視體驗中通道(一旦安裝)。

視覺分化內置渠道和第三方渠道之間是允許的,因為在Android CDD的電視應用程序部分定義。

以下部分顯示的電視直播應用如何滿足CDD要求。

新的頻道設置

增加新的第三方輸入/渠道開始與用戶查找和管理從應用程序商店中安裝電視輸入,如谷歌播放。

某些第三方電視輸入會自動添加頻道到TvProvider數據庫。然而,大多數將提供安裝活動,以使用戶能夠建立自己的渠道,提供詳細登錄信息,以及其他操作。該系統電視應用程序需要確保用戶可以激活此安裝活動,這就是為什麼CDD需要第三方的投入是從主電視應用程序最小化的導航行動了。

參考直播電視應用程序提供訪問輸入信道源菜單。

前往設置
圖8.進入設置

轉到設置通道源
圖9.轉到在設置頻道源

從列表中選擇你的來源。
圖10.從列表中選擇你的來源。

從源添加頻道
圖11.從源添加頻道。

此外通知卡是在電視應用程序菜單的頂部顯示在安裝之後新TvInput,直接把用戶的設置:

通知顯示了新的渠道資源是可用的。
圖12.通知該節目新的信道資源是可用的。

如果用戶通過通知採取行動,他們可以選擇建立自己的來源如圖10所示。

定義您的電視輸入服務在這方面開發商的預期。

自定義頻道列表

設備製造商可能會提供一個UI隱藏某些渠道,使用戶能夠管理自己的EPG。直播電視包括此設施。

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

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

EPG

第三方輸入開發者需要有信心,用戶可以在一般使用過程中輕鬆地導航到他們的渠道,在所有兼容Android TV設備。

從第三方輸入通道必須作為該設備的標準電視直播經驗EPG的一部分。視覺分離或獨立的類別為第三方渠道都可以使用(請在Android CDD的電視應用程序部分) - 什麼的關鍵是,用戶都能夠找到他們已經安裝了通道。

製造商必須實現電視應用程序,包括為了確保最佳的用戶體驗,為全球搜索請求的搜索結果。電視直播提供了一個實現(見com.android.tv.search.TvProviderSearch ),提供來自第三方的輸入結果(平台兼容性要求),以及內置的輸入。

時移

在Android 6.0及以上的設備中,TV應用程序必須支持Android框架時移的API 。此外,製造商必須實現在電視應用程序播放控件,它允許用戶暫停,恢復,快退和快進播放。

用於電視輸入的支持時移時,電視應用程序需要顯示播放控制。

播放控制
圖15.播放控制

DVR

有關以上的Android 7.0設備,電視應用程序必須支持的Android框架電視錄製的API ,支持,列表和播放錄製的節目。

這使設備製造商能夠將他們的DVR系統至TIF,並極大地縮短了啟用或電視設備上集成DVR功能的集成工作。這也使第三方能夠提供可以插入一張Android TV設備售後市場的DVR系統。

除了錄製直播內容,電視應用程序還可以處理資源衝突。例如,如果設備有兩個調諧器,它可以記錄在同一時間兩個方案。如果用戶要求記錄三,電視應用程序必須處理的衝突,應該要么表面的用戶安排的通知或要求對這些請求的優先事項。

電視應用程序還可以實現更複雜的邏輯就像問一個用戶,如果他們想記錄在將來所有的情節時,他們要求記錄一個插曲。

見視圖進入Android的電視可能DVR實現如下圖。

在Android的電視數字視頻錄製
在Android的電視圖16.數字視頻錄製

  1. 電視輸入服務告訴電視應用程序有多少調諧器都可以讓電視應用程序可以處理可能的資源衝突。
  2. 電視應用程序接收用戶發起的請求,錄製電視節目。
  3. 電視應用程序商店在其內部數據庫中的記錄時間表。
  4. 當它的時間來記錄時,電視應用程序傳遞給調諧請求以與所述記錄相關聯的頻道。
  5. 電視服務的輸入接收該請求時,無論是否有適當的資源,以及調諧到的信道響應。
  6. 隨後,電視應用程序傳遞到開始錄製到電視輸入管理的要求。
  7. 電視輸入服務接收到這個請求,並開始錄製。
  8. 電視機輸入服務存儲在其存儲器中的實際的視頻數據,其可以是外部存儲或雲存儲。
  9. 當它的時間來完成錄音,電視的應用通過了停止錄製請求到電視輸入管理。
  10. 一旦電視輸入服務收到請求後,它停止記錄,並增加了其相關的元數據到電視提供者,這樣要求時,電視應用程序可以顯示記錄到用戶。

有關實現記錄在您的電視輸入功能服務的更多信息,請參閱:電視節目錄製的文章。

有用的資源

  • Android的CDD和記錄的開發人員API是明確的引用。
  • CTS驗證行使的API的兼容性測試計劃的一部分。針對直播電視運行,這可能是看到了EPG,搜索,家長控制,以及其他要求的第三方輸入上下文的有效途徑。
  • 定義您的電視輸入服務在這方面開發商的預期。

家長控制

家長控制允許用戶塊不期望的頻道和節目,但旁路通過輸入PIN碼的塊。

責任家長控制功能的電視應用程序,TV輸入管理器服務,電視提供者,和電視輸入之間共享。

家長控制是強制性的,是由CTS驗證覆蓋。

一些國家已經定義的評級系統是電視輸入可以通過使用TVContentRating API 。另外,由CTS驗證測試,它引入了一個“假”的評級作為證明電視輸入可以註冊自己的自定義評級體系。對於在一個標準的評價體系中存在的國家,鼓勵設備製造商到電視輸入框架家長控制與它們可能包括任何其他機制相結合。

電視供應商

每個通道行都有一個COLUMN_LOCKED是,用於鎖定的特定頻道從觀看,而無需輸入PIN碼字段。該方案字段COLUMN_CONTENT_RATING是用於顯示和不被用於執行父母控制。

電視輸入管理

電視輸入Manager存儲每個阻塞TvContentRating和響應isRatingBlocked()來告知,如果給定的評價內容應被阻止。

電視輸入

電視輸入檢查當前內容應該調用被阻塞isRatingBlocked()上時所顯示的內容的等級已改變(對節目或信道改變),或家長控制設置的TV輸入管理已經改變(在ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) 。如果內容應該被阻止,電視輸入禁用音頻和視頻,並通知TV應用,目前內容是通過調用阻塞notifyContentBlocked(TvContentRating)如果內容不應該被阻止,電視輸入使音頻和視頻並通知電視應用程序的當前內容是通過調用允許notifyContentAllowed()

電視應用

為了紀念家長控制的API,因此創建一個兼容的平台,系統的電視應用程序需要為用戶提供管理家長控制,包括通過特定的應用程序註冊的自定義評級的方式。

電視應用程序顯示了一個PIN碼UI時,它是由電視輸入通知的當前內容被阻止,或者當用戶試圖查看被鎖定的信道。

電視應用程序並不直接存儲家長控制設置。當用戶改變家長控制設置,每個阻擋TvContentRating由TV輸入管理存儲,並且被阻止信道是由電視提供商存儲。

電視應用程序需要聲明許可android.permission.MODIFY_PARENTAL_CONTROLS為了改變家長控制設置。

設備製造商鼓勵:

  • 鍛煉對基準直播電視應用的CTS驗證家長控制測試的兼容性要求的示範。
  • 使用Live TV應用作為自己的電視應用參考:特別是看到ContentRatingsManagerRatingSystemsFragment來源,以及他們如何處理自定義評級。

HDMI-CEC

HDMI-CEC允許一個裝置以控制另一個,從而使得能夠在單個遙控器來控制在家庭影院多台設備。它用於由Android電視速度設置和允許通過電視應用程序中心在各種電視輸入遠程控制。例如,它可以切換輸入,功率向上或向下的設備,等等。

而Android TIF工具HDMI-CEC的HDMI控制服務,使設備製造商只需要開發低級別的驅動程序與輕量級的Android電視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應用程序來切換源。
  6. 電視應用程序,然後創建一個電視輸入管理器會話的電視輸入切換到,並呼籲setMain該屆會議。
  7. 電視輸入管理器會話傳遞到HDMI電視輸入此信息。
  8. 將HDMI電視機輸入請求集邊帶面。
  9. 電視機輸入管理器服務產生相應的路由控制命令給HDMI控制服務當表面被設置。

電視集成指南

廣播應用

因為每個國家都有播出特定的要求(MHEG,圖文電視,HbbTV的,更多),生產商預計將用於廣播的應用程序提供自己的解決方案,例如:

  • MHEG:本地棧
  • 圖文:本地棧
  • HbbTV的:從Vewd軟件的HbbTV解決方案

在Android L系統版本,Android的電視預計設備製造商使用的系統集成商或區域電視堆了Android解決方案,表面傳遞到電視軟件堆棧,或者通過必要的關鍵代碼與傳統的堆疊互動。

下面是廣播應用和電視應用程序交互:

  1. 電視應用的重點是,接收所有按鍵。
  2. 電視應用程序通過鍵(例如,紅色按鈕)到電視輸入裝置。
  3. 電視輸入裝置與傳統電視棧內部整合。
  4. 在接收到激活密鑰號碼(例如,紅色按鈕)時,TV輸入裝置激活廣播應用。
  5. 廣播應用程序需要在電視應用的重點和處理用戶的操作。

對於語音搜索/推薦,廣播應用可支持語音搜索應用程序內搜索。