
音频可以整段 AES-CBC 加密,视频不行——尤其 H.264/HEVC 这类 NAL 结构化视频。
ISO/IEC 23001-7 明确要求视频走 subsample 加密,把一部分字节保持明文。
原因在于播放器/转封装器需要在不解密的情况下做很多事:
如果 NAL 长度、NAL 头、slice header 都被加密,这些操作就做不了。所以
标准规定:
对 avc1 来说,slice header 明文是 SHOULD;对 avc3/hvc1/hev1 是
必须。
在 MOV 里,subsample 信息写在 senc/traf 里,每个条目是
(BytesOfClearData, BytesOfProtectedData) 的组合,总长度刚好覆盖整个
样本。
对 H.264/HEVC 的写码器,我们按 NAL 逐个处理:
(nal_size, 0)。模式加密(cbcs 的 1:9 等)只作用于 protected 范围,且每个 subsample
从样本 IV 重新开始 CBC 链。
BytesOfClearData 是 16 位,超过
65535 就得拆成多个条目,前面用 (65535, 0),最后一个带 protected。
我们第一版直接传 16 位,一个 7 万字节的 filler NAL 就被截断了。senc;rtphint 与加密互斥,直接拒绝。下一篇是这一篇的核心依赖:slice header 到底在哪里结束?我们要自己算出
这个边界。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。