MPEG-DASH CENC编码器在浏览器中产生MEDIA_ERR_DECODE问题

时间:2017-01-17 15:10:48

标签: drm mpeg-dash mpeg-4

我有一个功能完备的MPEG-DASH编码器。现在我尝试扩展它,以便流内容受DRM保护。我有两个问题,我很难理解,所以我决定在这里问你:)

  1. 在完整的样本加密(音轨)中,我只需加密" mdata"中的每个样本。带有AES128 / CTR / NoPadding和8byte长IV的盒子,后来存储在" senc"框

  2. 如果" senc" box是IVs的容器 - 我还需要" saiz"和" saio"在" traf" (片段)?

  3. 如果我这样做 - 我应该存储的偏移量/大小? " senc"盒子还是......?

  4. 我已验证流无法正常运行,无需DRM,使用" pssh"成功创建DRM会话dash.js中的框和ClearKey DRM支持。只有困扰我三天的事情是片段框应该怎样才能使浏览器能够成功解码它?我猜测我在前三个问题上做错了。

1 个答案:

答案 0 :(得分:0)

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

  1. 是和否。 MP4A包含序列化为mdata的帧。每个帧都是一个样本。这意味着逐帧传递应通过AES128 / CTR / NoPadding密码和密文,而不是存储到mdata而不是普通帧。每个框架都与它相关联。

  2. 是的!虽然在Mp4资源管理器中检测到了senc框,但是它不会被符合CENC标准的解密器使用,因为saio / saiz框指向了senc。 Senc不应该存储在mdat框中。 Saio应该指出senc中IV的开始 - 而不是senc盒本身。

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

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