问题标签 [mediarouter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1292 浏览

android - 如何可靠地获取和检测 Android 上活动音频路由的更改?

我有一个功能,我需要获取电流检测系统有源音频输出设备的开关。就像是:

  • 运行应用程序 -> 获取当前设备(可能是嵌入式扬声器)
  • 连接蓝牙音箱 - >检测开关到蓝牙音箱
  • 连接音频插孔 - >检测从蓝牙扬声器到音频插孔的开关

在我看来,这应该有一个 API,但似乎有几个。最有意义的一个似乎是,MediaRouter但它有两个大问题阻止我如上所述使用它:

  • 至少在 2 种情况下,它会获取错误的设备作为活动路由,而在其他情况下,它根本不会检测到路由切换。有关这方面的详细信息,请查看我在谷歌问题跟踪器上打开的票
  • 我需要有关当前活动输出设备的某些信息,最重要的是通用标识符。对于蓝牙设备,Complete Local Name可以用于此,可从BluetoothDevice类型获得,但不能从MediaRouter. 相反,提供MediaRouter一个productName可用的,有时可以是蓝牙设备的别名,而不是静态名称。

我已经放弃了这个 API 并继续寻找其他解决方案,如果有人认为有办法解决上述问题,请告诉我,最重要的是第一个问题。我会注意到我同时使用了 theandroid.media.MediaRouterandroidxone,它们都有这些问题。

我现在正在利用其他 API 的组合。它有效,但远非可接受的解决方案:

  • 用于AudioManager.registerAudioDeviceCallback(object : AudioDeviceCallback)非蓝牙设备检测 ( AudioDeviceInfo.TYPE_WIRED_HEADPHONES, AudioDeviceInfo.TYPE_BUILTIN_SPEAKER))。当添加或删除这些设备中的任何一个时,我会收到回调,然后我可以检查是否存在有线类型的设备,那么 100% 的时间是活动的,如果不是,那么嵌入式类型是活动的。这有点hacky,但它有效。

  • 更有趣的是,为了检测蓝牙输出设备,我使用了一个私有 API,Android 本身在设置应用程序中使用该 API 来显示当前的音频输出设备

    • BluetoothA2dp::class.java.getDeclaredMethod("getActiveDevice") 获取当前活动的输出设备。这是通过获取配置文件代理服务来完成的bluetoothAdapter.getProfileProxy
    • 为此操作注册一个接收器,BluetoothA2dp::class.java.getField("ACTION_ACTIVE_DEVICE_CHANGED").get(null)以检测蓝牙有源音频设备的开关。

此解决方案有效,但也有一些限制:

  • 它们是明显的私有 API,会发生突然的变化和潜在的中断
  • 上面提到的活动设备API 不可用 < Android 9。我还没有调查 Android 在“设置”应用中使用的是什么 Android9 之前的版本
  • 在三星设备上,活动设备API 无法正常工作。

所以,百万美元的问题。如何可靠地获取和检测 Android 上的当前音频路由?

0 投票
0 回答
125 浏览

android - Android MediaRouter 拆分音频和视频路由,通过 Presentation 在外部显示器上播放视频,通过蓝牙播放音频

我正在编写一个应用程序,它利用外部显示器(HDMI 和/或无线 miracast 或 chromecast 显示器)Presentation通过DisplayManager

如果连接了蓝牙 a2dp 配置文件,我正在尝试强制该视频中的音频通过蓝牙 a2dp 配置文件播放。我很容易找到蓝牙设备的路由信息​​,并为音频路由选择它:

这可行,但是,它会导致 wifi 显示器完全断开连接,而不是继续播放视频。我如何告诉 android 我只想覆盖音频路由而不是视频。奇怪的是,该RouteInfo对象DEVICE_TYPE_BLUETOOTH表明它同时支持这两种方法ROUTE_TYPE_LIVE_AUDIOROUTE_TYPE_LIVE_VIDEO但对我来说似乎不正确。

0 投票
1 回答
25 浏览

android - 限制 MediaStyle 通知的媒体路由

当我创建一个 MediaStyle 通知时,它会公开一个选择媒体路由的按钮,如下所示: 参见 screenshot

我如何摆脱这个按钮?或者至少,如何将播放限制为仅本地设备(电话扬声器)?

以下是我创建通知的方式:

0 投票
1 回答
48 浏览

android - 如何在媒体切换输出中显示媒体元数据信息?

我参考UAMP开发了一个媒体app,但是遇到了以下问题。从通知打开的媒体切换输出画面无法显示正在播放的媒体信息。但是有 UAMP,不知道我错过了什么?有谁知道原因?谢谢

在此处输入图像描述

0 投票
0 回答
105 浏览

android - 蓝牙的 MediaRouter selectRoute 不会切换到华为 Android 10 的手机

我们有一个使用 SimpleExoPlayer 播放音频文件的应用程序。我们支持用于 Exo 播放器的 Google Cast,并且我们使用 MediaRouter 告诉我们哪些设备可用于投射。这是我们用来获取设备列表的媒体选择器:

这就是我们在它们之间切换的方式:

这适用于 Android 8、Android 11,以及三星 A71、Pixel 2、华为 P10 lite 等不同设备。

问题

连接蓝牙扬声器后,它会显示在设备列表中。如果您尝试切换到手机 - 它不起作用。调用 selectRoute() 什么也不做。它显示为选中,调用 onRouteSelected 但音频继续从扬声器播放。

再现设备

更新 Android 10 后,华为设备会出现问题。它不适用于带有 Android 10 更新的华为 P20。但它适用于搭载 Android 8 的华为 P20(更新前)。此外,您无法在装有 Android 10 的华为 Mate 10 Pro 上从蓝牙扬声器切换到手机。如果您停止蓝牙连接 - 那么它会成功切换到手机。

调试结果

  • 无论设备和路由如何,调用 route.canDisconnect() 总是返回 false。
  • 无论设备和路由如何,使用 CATEGORY_LIVE_AUDIO 调用 router.supportsControlCategory 始终返回 true
  • 无论设备和路由如何,使用 CATEGORY_REMOTE_PLAYBACK 调用 router.supportsControlCategory 始终返回 false

我真的不确定所有变量是否都是这样,它是如何工作的。

我们所拥有的课程的全部要点

https://gist.github.com/n0m0r3pa1n/cb2dba1553941b1eb95d61c3a2143a13

0 投票
1 回答
98 浏览

android - Android SDK 级别 30 使用 MediaRouter API 将视频投射到 Chromecast

我想使用带有 Android Q 中最新 api 的 MediaRouter 将我的 android 应用程序的 UI 投射到 Chromecast 设备(连接到 HDMI 显示器)。我能够做到:1)使用 SmartView 将屏幕投射到三星电视并编写一个 Presentation 类。2) 我的应用检测到 Chromecast 设备,但我不确定如何投射视频。它不像在带有 SmartView 的三星电视上那样在 chromecast 上显示 UI。在我的 Chromecast 上,Netflix 和 YouTube 播放良好。

我看到了关于 SO 的其他讨论:Cast video using Google chromecast feature但它已经过时了,类似乎已被弃用或不适用于 android api level 30。

如果有人能告诉我如何像 Netflix 或 YouTube 那样将我的应用程序的视频/屏幕投射到 Chromecast 上,我将不胜感激。

提前致谢。

0 投票
0 回答
24 浏览

android - 如何使用 MediaRouter 将音频路由到辅助显示器

我能够使用MediaRouterMediaRouterSelector成功连接并将我的自定义演示文稿视图投射到辅助显示器(电视) 以初始化 MediaRouter 这是我的代码

用于媒体路由器回调

通过使用此代码,我在辅助显示器上看到了我的自定义视图,但我无法路由音频我不知道出了什么问题,我是否缺少任何配置或任何标志,请给我任何链接或告诉我有什么问题我的代码?

0 投票
0 回答
18 浏览

android - MediaRouter 按钮启用

我正在尝试从我的 android 应用程序中为我的视频实现一个媒体路由器按钮,这是我第一次实现这种功能,尽管我查阅了它,但我找不到任何有用的教程来帮助我。所以,请。任何建议或帮助将不胜感激