【问题标题】:Control third-party Cast session from Android?从 Android 控制第三方 Cast 会话?
【发布时间】:2019-05-27 18:44:51
【问题描述】:

我想观察和控制由另一个应用启动的 Chromecast 会话。

但是,当使用MediaRouter 连接时,我无法在不中断的情况下加入正在进行的会话。一旦我选择了一条路线,我的应用就会替换之前的路线。

如何使用 Android SDK 监控 Chromecast 会话(并能够播放、暂停、查看进度等),而无需更换当前正在播放的接收器应用程序?

【问题讨论】:

  • 你能分享你的(最好的)实现吗?也许这只是一个错误的参数那么简单。
  • 我通过使用较低级别(已弃用)的 Cast API v2 解决了这个问题,它具有更好的访问权限,并且在连接时不会杀死当前正在播放的应用程序。这是 CastContext 在后台使用的 API。准备好后,我会用代码回答我自己的问题

标签: android chromecast


【解决方案1】:

第一个选项:

您可以使用RemotePlaybackClient

控制远程播放路径

当您选择远程播放路线时,您的应用将充当远程 控制。路由另一端的设备处理所有内容 数据检索、解码和回放功能。你的控件 应用程序的 UI 使用 RemotePlaybackClient 对象。

Javadoc

RemotePlaybackClient

一个帮助类,用于使用遥控器在远程路由上播放媒体 MediaControlIntent 定义的播放协议。

客户端维护会话状态并提供简化的界面 用于向单个路由发出远程播放媒体控制意图。

你可以用RemotePlaybackClient(Context context, MediaRouter.RouteInfo route)创建它

您可以通过调用route.supportsControlCategory来检查MediaRouter.Route是否支持远程请求

第二个选项:

如果您的应用不支持此功能,您可以尝试通过CastSession 进行管理。这样,您的应用程序将通过 chromeecast 与其他应用程序进行通信。使用CastSession.getRemoteMediaClient(),您将获得RemoteMediaClient

【讨论】:

  • 试过了。至少通过直接方法,它会抛出java.lang.UnsupportedOperationException: The route does not support session management.。它需要额外的初始化吗?当我不控制接收器应用时,我可以在我没有“连接”到的路线上使用它吗?
  • 您可以通过调用supportscontrolcategory来检查MediaRouter是否支持远程请求
  • 更新:使用 Chromecast 路由创建的 RemotePlaybackClient 不支持会话管理、远程播放或其他任何内容。我不能调用它的任何方法。我可以使用CastSession API 完美连接,但这会停止当前的接收器应用
  • 您确定不是 android 操作系统关闭了其他应用程序并因此停止了播放吗?与CastSession.getRemoteMediaClient() 连接的 Afaik 不会停止播放。
  • CastSession 在连接到路由时自动启动一个新的接收器应用程序(例如,通过从标准投射按钮对话框中选择一个路由)。除非应用程序相同,否则这将停止播放。
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多