| 3 min read

HDCP(High-Definition Content Protection)是数字内容保护的一种方案,旨在保护数字视频内容在从设备传输到显示器或投影仪的途中不被非法复制。它由英特尔开发,并已成为高清数字内容传输的行业标准。

HDCP 的工作原理

HDCP 使用一对加密密钥来保护数字内容。第一个密钥由源设备(例如蓝光播放器或计算机)生成,第二个密钥由显示器或投影仪生成。当源设备将视频信号发送到显示器或投影仪时,它会使用第一个密钥对信号进行加密。显示器或投影仪使用第二个密钥来解密信号。如果缺少正确的密钥,则无法解密信号,因此无法复制内容。

HDCP 兼容设备拥有自己独特的加密密钥集,当尝试将受 HDCP 保护的内容从一台设备传输到另一台设备时,它们会相互交换这些密钥。这些加密密钥既可以确认每台设备都符合 HDCP 标准,又可用于在传输内容时对其进行加密,然后在另一端解密。这可以防止中间人攻击在传输过程中窃取未受保护的媒体。

现代显示器理所当然地都支持 HDCP,因此您最有可能遇到与推出时不支持 HDCP 的旧高清电视的兼容性问题。如果您使用不支持 HDCP 的电缆或分线器,即使显示器本身支持 HDCP,也会出现这种情况。

虽然 HDCP 最常用于蓝光光盘等物理媒体,但它也用于一些流媒体服务。例如,迪士尼和华纳兄弟使用 HDCP 来加密和保护几乎所有自己的节目,因此如果您在流媒体服务(尤其是他们的第一方服务)上遇到它们,您可能会发现如果您使用不符合 HDCP 标准的显示器会遇到问题。

HDCP 版本

目前,HDCP 有以下几个版本:

  • HDCP 1.0:于 2003 年发布,是第一个 HDCP 版本。它主要用于保护 DVD 和蓝光光盘的内容。
  • HDCP 1.1:于 2006 年发布,增加了对 HDMI 接口的支持。
  • HDCP 1.3:于 2008 年发布,增加了对 DisplayPort 接口的支持。
  • HDCP 2.0:于 2014 年发布,提高了安全性并解决了 HDCP 1.x 版本中的一些已知问题。它还增加了对 4K 分辨率的支持。
  • HDCP 2.1:于 2017 年发布,增加了对 HDR 内容的支持。
  • HDCP 2.2:于 2018 年发布,是最新版本。它旨在进一步提高安全性并解决一些早期版本中的问题。

使用 JS 进行 HDCP 的功能检测

你可以尝试 getStatusForPolicy 来进行 HDCP 版本的支持情况检测。

video.mediaKeys.getStatusForPolicy({
  minHdcpVersion: '1.0'
}).then(status => {
  if (status === 'usable') {
    // Pre-fetch HD content.
  } else {  // such as 'output-restricted' or 'output-downscaled'
    // Pre-fetch SD content.
  }
});

还需要提醒的一点,不同的 DRM Level 对 HDCP的要求不一致。

扩展阅读

You Can Speak "Hi" to Me in Those Ways