Fire TV上的电视输入框架
线性电视集成基于用于开发电视输入服务的Android文档。以下链接和说明将帮助您了解Fire TV的专门技术要求。
背景知识和术语
在您深入了解Fire TV上的电视直播之前,可通过以下实用的外部链接了解相关背景和基本知识。在进行集成之前,请查看此文档:
线性电视集成基于以下Android文档: 开发电视输入服务。
集成详细信息
要集成线性直播频道,必须提供对客户的频道授权的访问权限以及相关元数据,以便在Fire TV上提供内容转发浏览和搜索体验。
直播频道授权
您的应用必须进行更新,才能仅将授权频道推送到设备上的本地频道数据库(由电视输入框架(TIF)提供)中。可以通过使用INITIALIZE_PROGRAMS
操作注册广播接收器来更新(或者添加或删除)频道。确保在最初安装应用时更新此授权元数据。即使应用正在后台运行,也可执行此操作。
要编辑频道,请参阅使用频道数据。
如果此数据库中有频道,则客户可以查看这些频道。此数据库中的频道可以随时添加或删除,且更改将立即反映在UI中。这是因为在任何实时体验中向客户展示的所有频道都以该数据库为依据。
尽可能完整填写TvContract.Channels
中的频道列。如果您知道您的Gracenote频道ID或希望提供深层链接进行播放,可以将这些信息添加到Channels#COLUMN_INTERNAL_PROVIDER_DATA
中,如代码示例部分所述。
获取节目元数据
有两种方法可以向电视直播提供元数据。
- 使用Gracenote频道ID
- 自行插入频道元数据
请记住,必须单独为每个频道选择方法。这意味着可以对一个频道使用Gracenote ID,而对另一个频道自行插入频道元数据。
提供Gracenote ID(首选方法)
如果提供Gracenote频道ID(onTV
或GVD(全球视频数据)),信息将通过电视直播应用每天同步到云端。如果找到Gracenote ID,该ID将用于在Fire TV目录中查找频道,该目录包含最多14天的节目信息。此信息将显示在“Home(主页)”和“Live(直播)”选项卡以及频道指南中。它将自动刷新到最新状态,并可通过“搜索”和Alexa发现。
没有Gracenote ID?
如果不提供频道的Gracenote频道ID,则需要插入包括标志在内的所有频道元数据,并定期将所有频道即将播出的节目信息插入到TvContract.Programs中。示例电视直播应用提供了相关示例。
以下是可以包含的字段:
CX字段 | 描述 | 是否需要认证? | 关联的TIF字段 |
---|---|---|---|
Program Name | 节目的名称。屏幕左上角的大文本。 | 是 | Title |
Time of Playback | 播放的时间(例如: 23:00至24:00)。位于节目名称正下方。 | 是 | Start_time_utc_millis End_time_utc_millis |
Episode Name | 正在播放的剧集的名称。在播放时间和徽章下方以粗体显示。 | 是 | Episode_title |
Episode Description | 剧集的描述。填充剧集名称之后剩余的部分。使用详细描述,但会回退到简短描述。 | 是 | Long_description fallback to short_description |
Season & Episode Information | 连续剧(如情景喜剧)中常见。提供本次播放的季和剧集信息。这是剧集名称后节目简介的一部分。 | 否 | Season_display_number Episode_display_number |
Rating | 以徽章形式显示剧集的本地评分。与播放时间位于同一行。 | 否 | content_rating |
Closed Captions | 表示播放是否支持隐藏式字幕的徽章。与播放时间位于同一行。 | 否 | 暂不支持 - 即将推出 |
HD | 表示播放内容是否高清的徽章。与播放时间位于同一行。 | 否 | 暂不支持 - 即将推出 |
Live | 旋转磁贴上的徽章,表示内容在录制过程中“实时”播放。 | 否 | 暂不支持 - 即将推出 |
New | 旋转磁贴上的徽章,表示播放为首播(但并非实时播放)。 | 否 | 暂不支持 - 即将推出 |
Program Image | 填充旋转磁贴的16:9节目/电影图像。 | 是 | Thumbnail_uri |
Background Image | 填充节目简介旁右上角部分的16:9节目/电影图像。 | 是 | Poster_art_uri |
Channel Name | 旋转磁贴上显示的频道名称。根据最佳实践部分,将显示16个字母数字字符或8到10个全角字符。 | 是 | Display_name |
Channel Logo | EPG(电子节目指南)中使用的透明单色标志。如果没有频道标志,将回退到(选取框中)频道名称。 | 是 | logo |
频道排序
频道排序决定Fire TV设备UI显示的频道排行。基准顺序由提供方决定。但是,客户可以通过上下文菜单或频道管理器收藏频道。这些频道的显示优先级最高。因此,优先级为:收藏夹 > 频道排序选项。Fire TV提供了三种具有不同开发工作级别的选项:
- 显示名称排序历来是最常见的排序,因其开发时间成本为零。使用这种排序,Fire TV UI中的频道将根据
displayName
采用统一码显示。例如,频道列表{“XYZ”、“1BC”和“1 BK”}将按{“1 BK”、“1BC”、“XYZ”}排序。 - 频道编号排序由
Channel
类中的displayNumber
字段决定,是标准Android电视合约中的组成部分。频道将按频道编号升序显示。为此,在开发过程中,必须为每个频道分配一个频道编号。请注意,即使分配了频道编号,也可以使用其他排序选项。 - 自定义频道排序是第三个也是最后一个选项。使用这种排序,提供方频道将按照与tv.db中的“_id”一致的顺序显示,“_id”按插入顺序分配。在tv.db中更新这些频道时,需要保持该频道排序,因为电视直播应用将在Fire TV UI中采用相同的顺序。
在加入过程中,您需要与您的亚马逊联系人合作选择频道排序方法。
全屏播放
以下两种实现方法可供选择:
- 深层链接(在特定应用中打开的链接)
- 原生电视应用
深层链接。Fire TV允许用户使用自己的应用进行全屏播放。为此,需要在频道数据库中提供深层链接意图,将其作为频道信息的一部分。如果在浏览或搜索时选择该频道,则会启动此意图。每当该意图被激活时,所请求的频道将启动全屏播放。请参阅代码示例部分。
原生电视应用。实现全屏播放的另一种方法是使用原生电视直播应用。这种方式通过TvInputService.Session
实现。要查看相关示例,请参阅示例电视直播应用
。
实时预览
即使提供了深度链接意图,也必须实现TvInputService.Session
。当调用onTune
时(只要客户聚焦于浏览行中的某个磁贴,就会发生这种调用),必须将所请求频道的播放渲染到提供的安全Surface
上。这提高了参与度。onTune
请求也可用于捕获指标,或作为开始加载直播内容以提高性能的提示。
家长监护
如果您的应用将内容渲染到提供给TvInputService
(即实时预览或无频道深层链接)的Surface上,则必须恰当地实施家长监护。这样可以确保在启用家长监护之后,必须先输入PIN,然后才能向最终用户显示内容。您的TvInputService
负责在请求应该被阻止的内容时通知前台应用。请参阅代码示例部分了解建议的流程。
提供方属性
请确保您自定义了以下三个项目:
1.标签
默认情况下,客户浏览频道时,应用的label
将用作标题。标签长度不应超过12个全角字符或24个字母数字字符。如果您想用其他名称但无法更改标签,请与您的亚马逊联系人合作,以确保此信息被覆盖。
2.标志
您还需要提供一个代表应用品牌的单色标志:
-
带有Gracenote ID的标志。该标志将叠加在节目图像之上。此图像文件高度不得超过34个像素,宽度在水平方向上不得超过叠加图像的25%。
-
没有Gracenote ID的标志。填充
TvContract.Programs
中的COLUMN_POSTER_ART_URI
。需将单色标志刻录到图像中。单色标志必须放在距离右上角坐标(-56, 44)的位置。
3.横幅
可以通过程序包管理器提供应用横幅。有关示例,请参阅代码示例部分。