shadowrocket安装下载
在此 Codelab 中,您将学习如何修改现有 Android 视频应用,使其可在支持 Google Cast的设备上投放内容。
Google Cast 可让用户将移动设备上的内容投射到电视上。然后,用户可以将其移动设备用作遥控器,来控制电视上的媒体播放。
借助 Google Cast SDK,您可以扩展应用以控制电视或音响系统。使用 Cast SDK,您可以基于Google Cast 设计核对清单添加必需的界面组件。
Google Cast 设计核对清单用于在所有支持的平台上实现简单、可预测的 Cast 用户体验。
如果您所在位置的 Wi-Fi 网络不稳定,您可以使用一根 OTG 线将移动设备连接到路由器上。此外,您还可以使用适用于Chromecast或Chromecast(支持 Google TV)的以太网适配器连接 Chromecast 设备。
首先,我们来看看完成后的示例应用的外观。该应用是一个基础视频播放器。用户可以从列表中选择一个视频,然后在设备上本地播放该视频,或者将该视频投射到 Google Cast 设备上。
下载代码后,请按照以下说明操作,在Android Studio中打开并运行完成后的示例应用:
在您的 Android 设备上启用 USB 调试 - 在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认处于隐藏状态。如需显示开发者选项,请依次转到设置>
关于手机,然后点按build 号七次。返回上一屏幕,转到系统>
高级,点按底部附近的开发者选项,然后点按USB 调试将其开启。
点击迷你控制器中的暂停按钮以在接收设备上暂停视频。点击迷你控制器中的播放按钮以继续播放视频。
我们需要在您下载的入门级应用中添加 Google Cast 支持。下面是一些我们会在此 Codelab 中使用的 Google Cast 术语:
该应用从远程网络服务器中提取视频列表,并提供列表供用户浏览。用户可以选择视频查看相关详情,也可以在移动设备上本地播放视频。
MediaItem对象会为视频及其关联的元数据建模,例如视频的标题、说明、视频流的网址、支持图片的网址以及关联的用于字幕的文字轨道(如有)。由于MediaItem对象会在 activity 之间传递,因此MediaItem拥有相关实用程序方法,可将其转换为Bundle,反之亦然。
此 activity 托管了一个VideoView、一些媒体控件以及一个用于显示所选视频的说明的文本区域。播放器位于屏幕顶部区域,从而在下方为视频的详细说明留出空间。用户可以播放/暂停视频或者跳转到视频的本地播放位置。
由于我们使用的是AppCompatActivity,因此需要 AppCompat 支持库。为了管理视频列表并异步获取视频列表的图片,我们将使用Volley库。
支持 Cast 的应用会在其每个 Activity 中显示“投射”按钮。点击“投射”按钮会显示用户可以选择的 Cast 设备列表。如果用户正在发送设备上本地播放内容,则选择 Cast 设备即会在相应 Cast 设备上开始播放或继续播放。在 Cast 会话期间,用户随时可以点击“投射”按钮,停止将应用投射到 Cast 设备。如Google Cast 设计核对清单中所述,在应用的任何 activity 中,必须让用户能够连接到 Cast 设备,或断开与 Cast 设备的连接。
您必须实现OptionsProvider接口,以提供初始化CastContext单例所需的CastOptions。最重要的选项是接收设备应用 ID,该 ID 用于过滤 Cast 设备发现结果,以及在 Cast 会话启动时启动接收设备应用。
您在开发自己的支持 Cast 的应用时,必须注册为 Cast 开发者,然后为您的应用获取应用 ID。在此 Codelab 中,我们将使用一个示例应用 ID。
现在,CastContext已初始化,接下来需要添加“投射”按钮,以便用户选择 Cast 设备。“投屏”按钮通过MediaRouter支持库中的MediaRouteButton实现。与您可以向 activity 中添加的任何操作图标一样(使用ActionBar或Toolbar),您首先需要向菜单中添加相应的菜单项。
按钮以在移动设备上运行应用。您应该会在应用的操作栏中看到“投射”按钮,而且当您点击该按钮时,它会列出连接到您本地网络的 Cast 设备。设备发现由自动管理。选择您的 Cast 设备,然后示例接收设备应用便会在 Cast 设备上加载。您可以在浏览 Activity 和本地播放器 Activity 之间导航,而且“投射”按钮状态会保持同步。
我们尚未挂接任何对媒体播放的支持,因此您目前还无法在 Cast 设备上播放视频。点击“投射”按钮断开连接。
我们将扩展示例应用,以便还可以在 Cast 设备上远程播放视频。为此,我们需要监听 Cast 框架生成的各种事件。
我们已经在上一部分中完成了第 2 步。借助 Cast 框架可以轻松执行第 3 步。第 1 步是将一个对象映射到另一个对象;MediaInfo是 Cast 框架理解的内容,MediaItem是应用对媒体内容的封装;我们可以轻松将MediaItem映射到MediaInfo。
示例应用LocalPlayerActivity已可以通过使用以下枚举来区分本地播放与远程播放:
在此 Codelab 中,您无需准确了解所有示例播放器逻辑的运作方式。但请务必了解,您必须修改应用的媒体播放器,才能让其以类似的方式感知这两个播放位置。
目前,本地播放器始终处于本地播放状态,因为它还不知道任何关于投射状态的信息。我们需要根据 Cast 框架中发生的状态转换来更新界面。例如,如果我们开始投射,则需要停止本地播放并停用一些控件。同样,如果我们在处于此 Activity 中时停止投射,则需要转换为本地播放。为处理此情况,我们需要监听 Cast 框架生成的各种事件。
对于 Cast 框架,Cast 会话包含以下步骤:连接到设备、启动(或加入)、连接到接收设备应用以及初始化媒体控制通道(如果适用)。媒体控制通道是指 Cast 框架从接收设备媒体播放器发送和接收消息的方式。
当用户通过“投射”按钮选择设备时,Cast 会话将自动启动shadowrocket安装下载,而当用户断开连接后,会话便会自动停止。Cast SDK 还会自动处理由于网络问题而重新连接到接收设备会话的操作。
在LocalPlayerActivityActivity 中,我们希望在与 Cast 设备连接或断开连接时收到通知,以便我们可以来回切换本地播放器。请注意,连接不仅可以被在您的移动设备上运行的应用(您的)的实例中断,还可以被在另一台移动设备上运行的应用(您的或其他)的其他实例中断。
当前处于活跃状态的会话可通过SessionManager.getCurrentSession()访问。系统会自动创建和关闭会话,以响应用户与 Cast 对话框的互动。
按钮以在移动设备上运行应用。连接到您的 Cast 设备,然后开始播放视频。您应该会看到视频在接收设备上播放。
Cast 设计核对清单要求所有 Cast 应用提供会在用户离开当前内容页面时显示的迷你控制器。迷你控制器可为当前的 Cast 会话提供即时访问权限和可见提醒。
按钮以运行应用并投射视频。接收设备上开始播放内容时,您应该会看到迷你控制器显示在每个 Activity 的底部。您可以使用迷你控制器控制远程播放。如果您在浏览 Activity 和本地播放器 Activity 之间导航,迷你控制器状态应与接收设备媒体播放状态保持同步。
Cast SDK 提供了一个MediaNotificationService来帮助发送设备应用针对通知和锁定屏幕构建媒体控件。Gradle 会自动将该服务合并到您应用的清单中。
在发送设备投射过程中,MediaNotificationService会在后台运行,并且会显示一个通知,其中包含有关当前投射内容的图片缩略图和元数据、播放/暂停按钮以及停止按钮。
在初始化CastContext时,可以使用CastOptions启用通知和锁定屏幕控件。通知和锁定屏幕的媒体控件默认处于开启状态。只要通知处于启用状态,锁定屏幕功能就处于启用状态。
按钮以在移动设备上运行应用。投射视频并离开示例应用。此时接收设备上应该会显示一条关于当前播放视频的通知。锁定您的移动设备,锁定屏幕现在应该会显示 Cast 设备上媒体播放的控件。
Google Cast 设计核对清单要求发送设备应用为现有用户引入“投射”按钮,以便他们知道发送设备应用现在支持投射并且可以为初次使用 Google Cast 的用户提供帮助。
按钮以在移动设备上运行应用,您应该会看到介绍性叠加层(如果叠加层未显示,请清除应用数据)。
Google Cast 设计核对清单要求发送设备应用为投射的媒体提供展开的控制器。展开的控制器是迷你控制器的全屏版本。
Cast SDK 为展开的控制器提供了一个名为ExpandedControllerActivity的微件。它是一个抽象类,您必须为该类创建子类才能添加“投射”按钮。
首先,为展开的控制器创建一个名为expanded_controller.xml的新菜单资源文件,以提供“投射”按钮:
按钮以在移动设备上运行应用并投放视频。您应该会看到展开的控制器。返回到视频列表,当您点击迷你控制器时,系统会再次加载展开的控制器。离开应用以查看通知。点击通知图片以加载展开的控制器。
在发送者端,您可以指定CredentialsData来代表谁将加入会话。credentials是一个字符串,可以由用户定义,只要您的 ATV 应用可以理解即可。CredentialsData仅在启动或加入时传递给 Android TV 应用。如果您在连接时再次进行设置,系统不会将其传递给 Android TV 应用。
您可以自定义Cast 微件,只需设置颜色、设置按钮、文本和缩略图外观的样式,以及选择要显示的按钮类型即可。
现在,您已了解如何在 Android 设备上使用 Cast SDK 微件让视频应用支持 Cast。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据Apache 2.0 许可获得了许可。有关详情,请参阅Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。