【问题标题】:How to detect if the HDMI port on an Android device has HDCP enabled?如何检测 Android 设备上的 HDMI 端口是否启用了 HDCP?
【发布时间】:2013-08-24 14:43:16
【问题描述】:

在 Android Doc 和 Google 上找不到任何确定的内容。

如果有 API 可以检测到这一点,它是什么以及在 HDMI 输出上启用/禁用 HDCP 的 API 是什么?

如果没有 API 可以检测到这一点,是否可以使用设备检查 HDMI 端口上的 HDCP 标志?

在某些 Android 设备(尤其是三星设备)上,HDMI 端口始终启用 HDCP。 但是其他制造商的设备呢?在 Google 认证的设备上,HDCP 是强制性的吗?如果不是强制性的,主要内容提供商的 Android 应用程序(来自 Big cable company teleco)如何防止视频输出到非 HDCP 保护的 HDMI 端口?

【问题讨论】:

  • Here is a related bug report 你可能会觉得有趣。它应该至少能回答你的一些问题。
  • 谢谢 MH。这确实很有趣。我更感兴趣的是检测是否在 HDMI 端口上启用了 HDCP。即使没有办法启用/禁用 HDCP,只要应用知道 HDCP 不可用,它就可以拒绝播放高清内容。
  • 请注意,我不能只检查硬件名称和型号然后假设 HDCP 可用。这是行不通的,因为可以在根设备上轻松更改设备名称和型号。

标签: android drm hdmi hdcp


【解决方案1】:

【讨论】:

  • 谢谢,看起来它与 HDCP 标志有关,但绝对没有关于如何分配安全缓冲区然后使用缓冲区输出视频帧的示例。
  • 我相信你会分配一个SurfaceView,然后调用setSecure。之后,使用MediaPlayer,调用setDisplay(exampleSurfaceView.getHolder())。
  • 实际上,是否有可能有一个特殊的 android 版本为标志 FLAG_SECURE 返回 true 并且根本没有 HDCP?特殊的 android 只是用来欺骗应用程序,让其认为 HDCP 可用,但实际上并非如此。
【解决方案2】:

这是一个较旧的线程 - 但由于我再次处理这些东西,我想我会更新。

从 API 17 (Android 4.2+) 开始,您可以从标准的 Android SDK 中获得合适的 HDCP 信息代理。

如果您想确保显示器是“安全的”,您可以在应用程序 Surface 上调用 setSecure(true)。然后,您可以枚举可用的显示器并验证是否为每个显示器设置了FLAG_SECURE。这将阻止 DDMS 并至少向显示驱动程序提示输出应打开 HDCP。但不能保证,您的里程可能会有所不同。

进一步说明 - 上面提到的 Alex 路径可能在较新的设备(Android 5.1+)上发生了变化。但由于这取决于 OEM,预计这可能会因不同的设备而异。 :-(

【讨论】:

    【解决方案3】:

    摩托罗拉一个 API:http://web.archive.org/web/20120213100531/http://developer.motorola.com/docstools/library/motorola-hdmi-status-api/

    我们仍然将它用于旧设备。我还读到有人通过 adb 在新设备上使用它仍然取得了一些成功,所以如果有人知道这是否仍然适用于较新的摩托罗拉设备,请分享。

    另外我知道这不是您所要求的,但是我们将其用于 HDMI 状态 (/sys/devices/virtual/switch/hdmi/state),希望他们将来将其扩展为 HDCP 支持嗯...所以你可能也想看看那个空间。

    【讨论】:

      【解决方案4】:

      如果它有一个 HDMI 端口,通常会启用 HDCP,因为没有它就无法工作!

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 2019-02-18
        • 2019-06-30
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 2013-10-19
        • 1970-01-01
        相关资源
        最近更新 更多