看懂 AES-128:加密 HLS 流为什么会黑屏
黑屏的元凶藏在哪
打开播放页只剩一片黑,控制台却报不出像样的错误——遇到这种情况,先怀疑流是加密的。HLS 允许对每个 TS 分片做 AES-128 加密,密钥拿不到,画面就永远解不开。
AES-128 是如何保护分片的
加密流的播放列表里会多出一行 KEY 声明:
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keys/seg.key",IV=0x9c7db8778570d05c3177c349fd9236aa
#EXTINF:9.0,
chunk_012.ts
METHOD 声明算法,URI 指向一个 16 字节的密钥文件,IV 是可选的初始向量。每个分片用这把钥匙做 AES-128-CBC 解密后,才是正常的 TS 数据。
播放器拿到加密流后的完整动作
- 解析到
#EXT-X-KEY,记下密钥地址; - 向该地址发起请求,取回 16 字节密钥;
- 下载对应分片,用密钥与 IV 解密;
- 把明文分片送进解码器,画面才会出现。
任何一步失败,后面全部停摆,外部观感就是黑屏转圈。
黑屏的四种典型姿势
- 密钥 404:密钥接口下线或路径变更,分片到手也解不开。
- 防盗链拦截:源站校验 Referer 或 Cookie,跨域请求被直接拒绝。
- 时序令牌:密钥地址带签名与有效期,过期后整条流报废。
- IV 错配:少数源声明了 METHOD 却没给对 IV,解密结果必然是乱码。
如何确认并恢复播放
按 F12 打开网络面板,搜 .key:请求成功返回 16 字节,说明密钥链路正常,问题在别处;返回 403 或 404,则基本确诊。密钥恢复后,主流播放器(hls.js、VLC、M3U8Lab 在线播放器)都会自动完成解密,无需任何手工配置。想给加密流转封装成 MP4,原理相同,可参考 四条转换路线 的说明。最后提醒一句:只有持有关键授权的场景才谈得上"恢复",破解他人的加密流既不可行,也不合法。