【问题标题】:How to encrypt webm file using Clear Key to play with Google's Shaka Player?如何使用 Clear Key 加密 webm 文件以使用 Google 的 Shaka Player?
【发布时间】:2017-06-05 03:31:07
【问题描述】:

我正在开发一个小型系统,该系统将用于使用 MSE/EME API 在网络上流式传输受保护的内容。

这是我正在使用的一些工具:

我可以创建 .webm 文件并使用 shaka-packager 将它们打包成 mpd 文件,以便提供给 shaka-player。但是在 Clear Key section in the Shaka docs 之后,我必须加密 webm 文件需要一对 KeyIdKey。 通过使用 webm_crypt,我可以通过关注 this document on 2.2.7 创建加密内容,但我不知道如何获取 shaka-player DRM 系统的密钥对。

【问题讨论】:

    标签: html encryption ffmpeg drm webm


    【解决方案1】:

    如果您使用 Clear Key,您可以使用密钥服务器列表配置播放器。播放器向密钥服务器发出 JSON 请求(请求在this format 中),密钥服务器提供“许可证”——JSON response containing the Base64-encoded symmetric key and keyId。然后使用该对称密钥来解密内容。

    更新

    要将密钥 ID 与未受保护的内容密钥关联以使用 ClearKey 进行调试,请为 drm.clearKeys 提供一个 JSON 元素,其中 keyId 以十六进制编码作为映射的“密钥”,“值”是十六进制编码的内容加密密钥。

    player.configure({
      drm: {
        clearKeys: {
          'deadbeefdeadbeefdeadbeefdeadbeef': '18675309186753091867530918675309',
          '02030507011013017019023029031037': '03050701302303204201080425098033'
        }
      }
    });
    

    在加密媒体文件时或在其随附的清单文件中将相同的 keyId 与媒体文件相关联。

    Encrypting media file with mp4split:

    #!/bin/bash
    
    KID=10000000100010001000100000000001
    CEK=3a2a1b68dd2bd9b2eeb25e84c4776668
    LAURL="http://playready.directtaps.net/pr/svc/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1"
    PSSH=YOUR_PSSH
    
    mp4split --package_mpd -o audio.mp4 \
      --iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
      --widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
      oceans-64k.mp4
    
    mp4split --package_mpd -o video-1.mp4 \
      --iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
      --widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
      oceans-250k.mp4
    
    mp4split --package_mpd -o video-2.mp4 \
      --iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
      --widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
      oceans-380k.mp4
    

    对于webm_crypt,文档非常粗略,但我相信它是通过-video_options 中的content_id=0123456789ABCDEF 命令行标志完成的:

    foo@bar-linux:~/chromium_code/webm_crypt/webm_crypt$ ./webm_crypt 
        -i mediafiles/Chrome_44_5sec-chunks_video_only.webm -video true -audio false 
        -video_options base_file=bear.key,content_id=0123456789012345 
        -o /home/foo/www/no_crawl/eme/media/Chrome_44_5sec-chunks_video‌​_only-enc_v_01234567‌​89012345.webm 
    

    【讨论】:

    • 抱歉,您最初的问题是您可以创建加密内容。 webm_crypt 中的 Readme 提供了构建和执行工具的说明。这个walkthrough 还提供了使用webm_crypt 加密媒体的分步说明。
    • 文档示例:foo@bar-linux:~/chromium_code/webm_crypt/webm_crypt$ ./webm_crypt -i mediafiles/Chrome_44_5sec-chunks_video_only.webm -video true -audio false -video_options base_file=bear.key,content_id=0123456789012345 -o /home/foo/www/no_crawl/eme/media/Chrome_44_5sec-chunks_video_only-enc_v_0123456789012345.webm
    • 如果您提供明文密钥进行验证,只需提供您在webm_crypt 中使用的密钥的十六进制编码(base_file 的内容)以加密@987654338 中的内容@与密钥 ID 关联的 JSON 对象。
    • content_id 是keyId; initialize_iv是初始化向量,base_file的内容是key。
    • @Andy 我正在使用packager 进行加密,但对于 clearkey,我感到很困惑。如果没有错,keyId 应该是十六进制的,但是这个答案中的两个 keyId 不是十六进制的。对于packager,我提供了--content_id "6b65792d7769646576696e655f746573742e747874",如何使用它来生成keyId 和key 本身?我不明白这两个是从哪里来的。它们只是虚构的十六进制吗?另一件事,我必须提供那两组key:keyIds吗?一个就够了吗?
    猜你喜欢
    • 2017-07-25
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多