开发人员控制台

电视直播资源


电视直播资源
您的输入? 此内容最近已更新,我们想知道内容是否满足您的需求。请花一分钟在此提供反馈→小调查

以下最佳实践、代码示例和其他参考将帮助您更好地了解直播集成在实现阶段的细节。

白名单程序包

程序包白名单可用于确定哪些应用能够在Fire TV浏览和搜索体验中显示其频道。您需要与亚马逊开发者共享设备序列号(DSN)列表,以确保您能够在上线之前在设备上集成和验证上述功能。

最佳实践

以下产品和实施指南将为您的客户提供最佳的Fire TV电视直播体验:

  • 提供无冲突注册,鼓励在适用情况下试用。例如减少应用上的注册表或使用电话号码进行注册。
  • 支持浏览时进行直播频道预览以提升体验
  • 对您频道列表中的每个TvContract.Channels.Logo使用透明的单色标志。
  • 优化深度链路流,以在2.5秒内开始全屏播放。
  • 如适用,请使用Gracenote频道ID,以简化集成。
  • 注重元数据加载性能,而不是提供完整节目单。
  • 使用JobSchedulerWorkManager定期检查并确保授权始终准确。即使您的应用未在前台运行,这也可以确保您在浏览和搜索体验中的频道与实际的授权频道始终同步。
  • 在授权频道列表稍有变化时,最佳办法是更新您的授权频道列表,而不是删除和重新添加所有频道。
  • COLUMN_DISPLAY_NAME列提供可显示的频道名称,因为这在UI中可用作回退。Fire TV最多可显示16个字母数字字符或8-10个全角字符。

代码示例

本节包含与电视直播集成相关的代码示例。

以下代码演示如何将Gracenote ID和深层链接添加到电视数据库中。

/**
 *用于存储外部ID类型的变量,用于匹配的服务元数据。有效类型为
 *下面定义为带有前缀“EXTERNAL_ID_TYPE_”的常量
 *空或无效数据将导致服务失败
 *元数据匹配
 */
private final static String EXTERNAL_ID_TYPE = "externalIdType";

/**
 *用于存储外部ID的值的变量,用于匹配的服务元数据。
 *空或无效数据将导致元数据的服务匹配失败
 */
private final static String EXTERNAL_ID_VALUE = "externalIdValue";

/**
 *用于在外部播放器中播放的深层链接的Uri。
 * 空或无效数据将导致默认与Gordon播放器集成
 */
private final static String PLAYBACK_DEEP_LINK_URI = "playbackDeepLinkUri";

// 已知外部ID类型常量列表的合约
private final static String EXTERNAL_ID_TYPE_GRACENOTE_ONTV = "gracenote_ontv"; // gracenote ontv id
private final static String EXTERNAL_ID_TYPE_GRACENOTE_GVD = "gracenote_gvd"; // gracenote gvd id

// 播放深层链接uri的合约
//使用Intent.URI_INTENT_SCHEME从意图创建uri并转换回原始意图
Intent playbackDeepLinkIntent; // 由您的应用创建
String playbackDeepLinkUri = playbackDeepLinkIntent.toUri(Intent.URI_INTENT_SCHEME);

//构建BLOB
ContentValues values = new ContentValues();  // 存储所有频道数据
ContentResolver resolver = context.getContentResolver();
values.put(TvContract.Channels.COLUMN_DISPLAY_NAME, "#Actual display name#");
values.put(TvContract.Channels.COLUMN_INPUT_ID, "#Actual input id#");
try {
    String jsonString = new JSONObject()
                  .put(EXTERNAL_ID_TYPE, "#Actual Id Type#") // 替换为EXTERNAL_ID_TYPE_GRACENOTE_XXX
                  .put(EXTERNAL_ID_VALUE, "#Actual Id Value#") // 替换为与频道相关联的gracenote ID值
                  .put(PLAYBACK_DEEP_LINK_URI, playbackDeepLinkUri).toString();

    values.put(TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA, jsonString.getBytes());
} catch (JSONException e) {
    Log.e(TAG, "Error when adding data to blob " + e);
}

Uri uri = resolver.insert(TvContract.Channels.CONTENT_URI, values);

执行家长监护

以下代码演示了如何侦听针对实时预览或本机全屏播放的家长监护。

private TvContentRating mBlockedRating = null;

    @Override
    public boolean onTune(final Uri channelUri) {
        ...
        if (mTvInputManager.isParentalControlsEnabled()) {
            // 确保播放在Surface上无法听到或看见
            mBlockedRating = <content_rating>;
            // 1.在全屏播放时为用户触发PIN提示
            // 2.确保浏览“正在播放”行时节目画面
            // 不会跳转到播放Surface。
            notifyContentBlocked(mBlockedRating);
        } else {
            // 播放应开始
            notifyContentAllowed();
        }
        ...
    }

    @Override
    public void onUnblockContent(final TvContentRating unblockedRating) {
        // 用户成功输入PIN以解禁
        // 所选评级对应的内容
        if (unblockedRating.unblockContent(mBlockedRating)) {
            // 播放应开始
            notifyContentAllowed();
        }
    }

示例电视直播应用

GitHub在github.com/amzn/ftv-livetv-sample-tv-app提供了一个具有电视直播集成的示例应用。这个示例电视应用是基于谷歌示例电视应用。您可以使用此示例应用作为Fire TV电视直播集成的参考。

要加载示例应用,请执行以下操作:

  1. 转到https://github.com/amzn/ftv-livetv-sample-tv-app,单击Clone or download(克隆或下载),然后单击Download ZIP(下载ZIP)。解压下载文件。

    该应用显示了集成电视直播的示例代码。要查看结果,请使用adb将app-debug.apk文件侧载到您的Fire TV上,如以下步骤所述。

  2. 通过adb连接到Fire TV

    如果您已开启调试并安装了adb,只需从设置>设备和软件(或“我的Fire TV”)>关于>网络获取Fire TV的IP地址,然后运行以下内容,从而自定义您自己Fire TV的IP地址:

    adb connect 123.456.7.89:5555
    

    123.456.7.89替换为您的Fire TV的IP地址。(如果您在连接时遇到问题,并且您正在使用公司VPN,请尝试断开VPN连接,因为您的计算机需要与您的Fire TV处于同一个WiFi网络中。)

  3. 在示例应用中安装构建的APK:

    adb install -r AndroidTvSampleInput/app/build/outputs/apk/app-debug.apk
    

    响应如下:

    Performing Streamed Install
    
    Success
    

    请注意,此示例应用不会作为传统意义上的独立应用启动。相反,该应用包括了Fire TV设备提供的电视直播频道的代码。

  4. 在您的Fire TV设备上,前往设置>应用>管理已安装应用。选择电视输入示例。然后单击启动应用

    电视输入示例
    电视输入示例

    这将带您进入亚马逊开发者门户。

    Amazon Fire TV网站
    Amazon Fire TV网站
  5. 在您的Fire TV遥控器上,单击主页按钮以退出此界面。然后前往设置>电视直播>同步源>亚马逊电视输入示例

    这将加载示例频道。

    同步源
    同步源
  6. 同步完成后,单击主页按钮。频道现在应该会在“正在播放”行和指南中显示。

    这是“正在播放”行:

    Fire TV“正在播放”行
    Fire TV“正在播放”行

    这是频道指南。

    Fire TV频道指南
    Fire TV频道指南

    要导航到Fire TV上的频道指南,请转到您的主屏幕,向下拉到“正在播放”行,按遥控器上的菜单按钮,然后单击频道指南。您也可以点击遥控器上的麦克风按钮,然后说“频道指南”。