如何使用HTML5 <video>标签播放CENC加密的MP4视频?

时间:2015-09-28 23:42:32

标签: javascript html5 video encryption

我正在尝试使用这些选项播放我使用MP4box进行CENC加密的视频:

MP4Box -crypt drm_file_gpac_clear.xml BigBuckBunny.mp4 -out BigBuckBunny_cenc.mp4

XML文件指定clearKey加密的位置。它来自GPAC的网站https://gpac.wp.mines-telecom.fr/mp4box/encryption/common-encryption/

<?xml version="1.0" encoding="UTF-8"?>
<GPACDRM type="CENC AES-CTR">
<DRMInfo type="pssh" version="1" cypherOffset="9" cypherKey="0x6770616363656E6364726D746F6F6C31" cypherIV="0x00000000000000000000000000000001">
<BS ID128="0x6770616363656E6364726D746F6F6C31"/>
<BS value="2" bits="32"/>
<BS ID128="0x279926496a7f5d25da69f2b3b2799a7f"/>
<BS ID128="0x676cb88f302d10227992649885984045"/>
<BS bits="8" string="CID=Toto"/>
<BS ID128="0xccc0f2b3b279926496a7f5d25da692f6"/>
<BS ID128="0xccc0f2b3b279926496a7f5d25da692d6"/>
</DRMInfo>
<CrypTrack trackID="1" IsEncrypted="1" IV_size="16" first_IV="0x0a610676cb88f302d10ac8bc66e039ed" saiSavedBox="senc">
<key KID="0x279926496a7f5d25da69f2b3b2799a7f" value="0xccc0f2b3b279926496a7f5d25da692f6"/>
</CrypTrack>
</GPACDRM>

为了播放这个,我有一个HTML文件,其中包括:

<video  autoplay id="video1" controls src="BigBuckBunny_cenc.mp4" type="video/mp4"></video>

和JS:

var KEY = new Uint8Array([
  0xcc, 0xc0, 0xf2, 0xb3, 0xb2, 0x79, 0x92, 0x64,   // this is key for MP4 file
  0x96, 0xa7, 0xf5, 0xd2, 0x5d, 0xa6, 0x92, 0xf6    // encrypted with drm_file_gpac_clear.xml
]);

var config = [
  {
    initDataType: "cenc",
    videoType: "video/mp4",
  }
];

var video = document.getElementById('video1');
video.addEventListener('encrypted', handleEncrypted, false);

加上其他与此无关的代码,因为我的问题是“加密”事件未被触发。

如果我用一个未加密的文件代替加密的文件,这样可以正常工作,如果我用http://simpl.info/eme/clearkey/替换一个WEBM文件并相应地更改密钥和配置(“查看页面源代码”),它也可以正常运行该细节的URL)。所以它播放一个加密文件(在这种情况下,'加密'事件当然会被触发),但不是我用MP4box加密的。

我在IE 11.0.9600.18036,Firefox 41.0,Chrome 45.0.2454.93 m和Chrome 47.0.2516.0 canary(64位)中尝试过它。

我看了MP4资源管理器的MP4文件,它有我被告知的方框,比如encv,sinf和schm。

我在过去的几周里一直试图了解CENC,所以这都是比较新的,我可能犯了一些明显的错误。如果有人可以提供帮助,我会对任何建议表示感谢。

1 个答案:

答案 0 :(得分:0)

我在https://github.com/gpac/gpac/issues/265(GPAC / MP4box论坛)上提出了同样的问题,得到了rbouqueau的回复

  

我现在没有时间做出详细的答案,但它可以奏效。   你应该能够在github上找到其他人的例子   或者我们以前的sourceforge跟踪器/论坛。

     

你的情况有什么问题是加密方案:你使用的是   GPAC特定的一个,而您可能意味着使用ClearKey或   Widevine / Playready取决于您所针对的平台。

就这一点而言,这似乎是正确的。我认为xml文件使用ClearKey是因为原始文件中的注释:

无论如何它不是,所以我一直在寻找使用ClearKey的等效文件。

这些可能有所帮助:

googlegroups.com/a/chromium.org/group/graphics-dev/attach/dcaad1f1cb85e3eb/Clearkey_encryption_using_MP4BOX.pdf

html5.cablelabs.com/mse-eme/doc/creation.html

dvcs.w3.org/hg/html-media/raw-file/ff10d356cc07/encrypted-media/cenc-format.html (见第4节)

然而,我还没有让它发挥作用......但希望以上可能仍然可以帮助其他人解决这个问题。