【问题标题】:Is it possible to decrypt a DRM HLS content in windows?是否可以在 Windows 中解密 DRM HLS 内容?
【发布时间】:2020-11-07 02:42:36
【问题描述】:

我必须开发一个使用 video.js lib 解密 DRM HLS 内容的函数。 我已经检索到这个问题并找到了它(https://docs.microsoft.com/ko-kr/azure/media-services/previous/media-services-protect-hls-with-fairplay)所以我已经使用 playready,如下所示

const setPlayerForDashHLS = (src, type, key, licenseURL) => {
                    const customData = DRM_TYPE + SITE_ID + key;

                    player.src({
                        src: src,
                        type: type,
                        keySystems: {
                            'com.microsoft.playready': {
                                url: licenseURL,
                                licenseHeaders: {
                                    'pallycon-customdata': customData
                                }
                            }
                        }
                    });
                }

但它无法播放 DRM HLS 视频并且不打印任何有关错误日志的内容。 我想知道怎么玩。

【问题讨论】:

    标签: windows http-live-streaming video.js drm playready


    【解决方案1】:

    有一个支持 DRM 播放的 VideoJS 官方插件,利用 EME 标准。

    EME(加密媒体标准)是一个 HTML5 扩展,支持以标准方式播放加密媒体 - https://www.w3.org/TR/2017/REC-encrypted-media-20170918/)

    您可以在此处查看 VideoJS 插件:https://github.com/videojs/videojs-contrib-eme

    其中包含使用 PlayReady DRM 进行配置和播放的说明。

    查看您收到的错误消息:

    这是由平台或浏览器生成的,表示:

    NotSupportedError

    平台或浏览器不支持指定的 keySystem,或者supportedConfigurations 指定的任何配置都不能满足(例如,如果 contentType 中指定的编解码器都不可用)。

    (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess)

    查看上面的配置,您可能会遇到此问题的一个原因可能是在不支持 PlayReady 的浏览器上播放视频。作为一般(非绝对)规则,浏览器和设备“本机”支持的 DRM 目前是:

    • Android 设备 - Widevine
    • Chrome 浏览器 - Widevine
    • FireFox - Widevine
    • iOS 设备 - FairPlay
    • Safari 浏览器 - FairPlay
    • Internet Explorer 浏览器 - PlayReady

    为了尽量减少视频流提供商的开销,CENC (https://en.wikipedia.org/wiki/MPEG_Common_Encryption) 允许您拥有一个受 PlayReady 或 Widevine 保护的流。

    除此之外,CMAF 以及所有主要设备和浏览器宣布的对 AES-CBC 模式加密的支持承诺能够为加密的 HLS 和 DASH 流提供单一媒体流,但可能需要一段时间才能宣布支持向所有设备推出,这意味着现在通常需要 HLS 和 DASH 流才能最大程度地覆盖流式视频。

    【讨论】:

    • 感谢您的评论。但我安装了 videojs-contrib-eme lib。我已经按照上面的方法尝试过了。但我收到一条错误消息。 github.com/videojs/videojs-contrib-eme/issues/115
    • @MingyuChoi 请参阅上面的更新 - 为了清楚起见,我已包含您的错误消息。
    【解决方案2】:

    由于您使用的是 Azure 媒体服务,因此您已经拥有 dynamic packaging - 即您可以从相同的基础视频资产获得 HLS 和 MPEG-DASH 输出。如果您尝试在浏览器中播放内容,我强烈建议您使用 MPEG-DASH。仅少数设备支持 HLS + PlayReady,而几乎所有支持 PlayReady 的地方都支持 MPEG-DASH + PlayReady。

    另外,我认为您已经与 PlayReady DRM 的供应商合作,如果不是,PlayReady and/or Widevine 网站列出了许多供应商。

    此外,您可能还希望支持 Widevine,因为这是在 Google Chrome 和 Firefox 中支持播放的内容。

    【讨论】:

      【解决方案3】:

      是否可以在 Windows 中解密 DRM HLS 内容?

      我必须开发一个解密 [...]

      的函数

      您的问题表明对启用 DRM 的播放的工作原理存在误解。

      在任何情况下,您都无法解密 Windows 中受 DRM 保护的内容。您将需要一个解密密钥,并且在解密时,该密钥以一种已知的、明确定义的方式应用。然而,关键正是你从未得到过的。尤其是在 Windows 中,例如在 Microsoft PlayReady DRM 的情况下,兼容的浏览器通过实施 EME(加密媒体扩展)规范来提供解密服务。浏览器解密内容的条件是,在播放解密内容时受到额外的限制(相当严格,想想在物理电缆上保护的强制内容,以便在播放此类内容时进行监控!),而且你永远不会得到特别的解密数据。

      您可以通过协同工作和播放受保护的数据,使用浏览器播放受 DRM 保护的内容。但是您永远不会自己解密内容,例如通过实现解密函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-06
        • 2010-12-20
        • 1970-01-01
        • 2021-06-17
        • 2010-12-01
        相关资源
        最近更新 更多