将媒体应用扩展到 Android TV

Android 提供了针对在大屏设备(如高清电视)上运行的应用进行优化的丰富用户体验。您可以为 Android TV 开发应用,从而扩大应用的用户群。本文档提供了有关如何有效执行此操作的指南。

构建 TV 应用

TV 应用使用的结构与手机和平板电脑的应用相同。这意味着,您可以根据自己已掌握的 Android 应用构建知识来创建新的 TV 应用,也可以扩展现有应用,使其也能在 TV 设备上运行。

不过,TV 的用户互动模型与手机和平板电脑设备有很大不同。为了让您的应用在 TV 设备上取得成功,您必须设计新的布局,使用户能在距离电视 10 英尺的地方轻松看清楚屏幕内容,并且只需使用方向键和选择按钮便可完成导航。

如需详细了解如何处理 TV 硬件 控制器、构建 TV 布局和创建 TV 导航等注意事项,请参阅 构建 TV 应用

使用 Media3 ExoPlayer

Jetpack Media3 提供了一个 Player 接口,用于定义基本功能,例如播放、暂停、快进和显示曲目信息的功能。ExoPlayer 是 Media3 中此接口的默认实现。

与 Android 的 MediaPlayer API 相比,它增加了其他便利功能,例如支持多种流式传输协议、默认音频和视频渲染器,以及处理媒体缓冲的组件。

您可以自定义和扩展 ExoPlayer,并且可以通过 Play 商店应用更新来更新它。如需了解详情, 请参阅 Media3 ExoPlayer

使用 Media3 MediaSession

媒体会话为系统与应用的音频或视频播放器互动提供了一种通用方式。Media3 与之前的媒体 API 的主要区别之一是,不再需要在组件之间使用连接器。

新的 MediaSession 类接受任何实现 Player 接口的类。ExoPlayer 和 MediaController 都是实现该接口的类。这有助于简化组件之间的互动。 如需了解详情,请参阅 Player 接口

如需详细了解如何创建媒体播放应用,请参阅 使用 ExoPlayer 创建基本媒体播放器

为了给媒体应用的最终用户提供最佳体验,您需要实现 MediaSession。为此,请初始化 Player 并将其提供给 MediaSession.Builder,如下所示:

Kotlin

val player = ExoPlayer.Builder(context).build()
val mediaSession = MediaSession.Builder(context, player).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();
MediaSession mediaSession = new MediaSession.Builder(context, player).build();

自动状态处理

Media3 库会使用播放器的状态自动更新媒体会话。因此,您无需手动处理从播放器到会话的映射。这有助于确保用户始终看到有关正在播放的媒体的最新信息,包括在“闻曲知音”卡片中。

控制和通告播放

在 Media3 中,默认播放器是 ExoPlayer 类,它实现了 Player 接口。将媒体会话连接到播放器后,应用可以向外部通告媒体播放,并接收来自外部来源的播放命令。媒体会话会将这些命令委托给媒体应用的播放器。

媒体会话是控制播放的关键。它允许您将来自外部来源的命令路由到执行媒体播放工作的播放器。外部客户端可以使用媒体控制器向媒体应用发出播放命令。这些命令由媒体会话接收,最终委托给媒体播放器。

如需详细了解播放,例如如何自定义播放命令 行为,请参阅使用 MediaSession 控制和通告播放

避免应用中断

使用 MediaSession 可避免不必要的中断,例如:

  • 关闭 TV 或切换 TV 输入时意外且持续播放 。这也会导致 TV 硬件耗电量过高。借助 MediaSession,您的应用可以通知平台它正在播放媒体,而平台能够通知应用播放可以停止。

  • 退出应用或关闭 TV 显示屏时音乐播放意外停止 。使用 MediaSession API 可在后台服务中继续播放。

  • 与内容的互动受限 ,导致用户无法控制播放。例如,如果您的应用在后台播放音乐,则返回到您的应用,或支持语音指令。在应用中使用 MediaSession 后, 用户可以使用语音指令来快进和跳过 歌曲或剧集。

其他注意事项

在将媒体应用扩展到 Android for TV 时,您需要考虑无障碍功能问题、如何提高互动度、如何让用户查找内容,以及如何构建游戏和 TV 输入服务。

TV 无障碍功能

虽然辅助技术可以帮助视力低下的用户,并且确实在帮助他们,但务必在 TV 应用的内容发现过程中支持无障碍功能。

例如,请特别注意提供导航指南和正确标记元素,并帮助确保 TV 应用能够与 TalkBack 等无障碍功能良好配合使用。这些步骤可以显著改善视障用户的体验。

改善无障碍功能的第一步是提高意识。如需详细了解文本缩放、键盘布局和语音描述,请参阅 无障碍功能资源

在 Google TV 上提高用户互动度的最佳实践

为 Android TV 构建的所有应用都可在运行 Google TV 的设备上运行。为了在 Google TV 上提供最佳用户体验,我们建议您遵循以下最佳实践。

您需要使用 MediaSession,以提供一种与音频或视频播放器互动的通用方式。如需详细了解如何实现此功能,请参阅 使用 Media3 MediaSession

作为基准,您的应用需要支持 Google Cast。借助它,您可以扩展 Android、iOS 和 Chrome 应用,以支持将音频和视频流式传输到 Android TV 以及 Chromecast 设备和 Google 助理设备。如需了解详情,请参阅 Google Cast 文档

您还可以帮助用户:

  • 通过提供媒体操作 Feed 或集成“接下来观看”功能,在各种界面上发现内容

  • 通过支持账号关联和使用权同步、提供语音投屏和启用 Cast Connect,充分利用语音和互动

  • 通过集成 Google Play 结算服务和提供顺畅的订阅体验,更轻松地付款

构建 TV 输入框架

观看直播电视节目以及其他基于频道的连续内容是电视体验的重要组成部分。用户习惯于通过频道浏览选择和观看电视节目。TV 输入框架会创建频道以在 TV 收视指南中发布视频或音乐内容。

TV 输入框架提供了一种统一的方法,既可以接收和播放硬件来源(例如 HDMI 端口和内置调谐器)中的实时视频内容,也可以接收和播放软件来源(例如通过互联网在线播放的内容)中的实时视频内容。如需了解详情,请参阅开发 TV 输入服务