2017-01-17 56 views
0

我有一个功能完整的MPEG-DASH编码器。现在我试图扩展它,以便流内容受DRM保护。我有我无法很容易地明白两个问题,所以我决定在这里问你:)MPEG-DASH CENC编码器在浏览器中产生MEDIA_ERR_DECODE问题

  1. 在全样本加密(音轨),我可以加密与AES128“MDATA”框中的每个样本/ CTR/NoPadding和后来存储在“senc”盒中的8byte长的IVs?

  2. 如果“senc”盒子是IVs的容器 - 我还需要在“traf”(片段)中使用“saiz”和“saio”框吗?

  3. 如果我这样做 - 我应该在哪里存储偏移/大小? “senc”框或...?

我已经验证了流没有DRM可以正常使用,使用“PSSH”盒子和dash.js. ClearKey DRM支持创建成功DRM会议唯一让我困扰三天的是片段框应该如何显示,以便浏览器能够成功解码它?我猜我做了与前三个问题有关的错误。

回答

0

好吧,让我回答自己 - 也许有人会有类似的问题。

  1. 是和否。 MP4A包含被串行化成mdata的帧。每一帧都是一个样本。这意味着逐帧应该通过AES128/CTR/NoPadding密码传递,密文应该存储在mdata而不是普通帧中。每个框架都有关联的IV。

  2. 是的!虽然在Mp4资源管理器中检测到senc box,但它不会被CENC兼容的解密器使用,但有指向senc的saio/saiz盒子。 Senc不应该存储在mdat框中。赛欧应该在senc中指出IVs的开始 - 而不是senc盒本身。

  3. Saiz包含单个senc条目的大小而不是整个框。 Saio只有1个记录,并指出了senc box的第一个IV位置。

希望它能帮助 - 我用dash.js和bitmovin播放器测试了我的流 - 在两者中都有效。