必须检查m3u8文本中是否存在#ext-x-key标签,若存在则已加密;其method=aes-128、uri指向密钥地址、iv为16字节十六进制值构成标准aes-128加密,缺一不可。

要确认一个m3u8视频流是否被加密,不能只看文件后缀或播放是否正常,必须直接检查m3u8文本内容里是否存在加密指令标签——因为未加密的m3u8文件能直接下载ts片段并拼接播放,而加密的则会因密钥缺失导致解码失败、黑屏或报错。
用浏览器开发者工具快速定位加密标识
打开目标视频网页 → 按 F12 启动开发者工具 → 切换到 Network(网络)面板 → 勾选 “Preserve log” → 刷新页面并开始播放视频。
在筛选框中输入 m3u8,找到类型为 application/x-mpegURL 的请求,点击它 → 切换到 Response 或 Preview 标签页。
滚动查看返回的纯文本内容,重点搜索以 #EXT-X-KEY: 开头的行。只要存在这一行,就说明该m3u8流必定加密。
如果没找到 #EXT-X-KEY,再检查是否有 #EXT-X-SESSION-KEY 或 #EXT-X-CUSTOM-KEY(极少见但存在),它们也代表非标准加密方式;若全无,则基本可判定为未加密。
解析#EXT-X-KEY标签判断加密类型
方法一:标准AES-128加密识别
看到类似 #EXT-X-KEY:METHOD=AES-128,URI="key.bin",IV=0x1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p 这样的行,即为标准AES-128加密。METHOD值必须是 AES-128,URI指向密钥文件地址,IV为16字节十六进制字符串(长度32位)。
注意:URI可能是相对路径(如 "key.bin"),此时密钥文件与m3u8同目录;也可能是绝对URL(如 "https://site.com/keys/abc.key"),需完整拼接才能访问。
方法二:SAMPLE-AES加密识别
若出现 #EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.apple.streamingkeydelivery" 或含 KEYFORMAT 字段,说明使用的是 Apple FairPlay 类型的 SAMPLE-AES 加密,无法用普通AES工具直接解密,需要浏览器环境模拟+CDM支持。
方法三:DRM商业加密识别
当标签中出现 KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"(Widevine)或 KEYFORMAT="com.microsoft.playready",表明启用的是 Widevine / PlayReady 等 DRM 方案,不属于AES范畴,常规工具完全无法处理。
用命令行快速验证加密状态
第一步:下载m3u8文件到本地
curl -o video.m3u8 "https://example.com/path/index.m3u8"
第二步:用grep直接检测加密标记
grep -E "^#EXT-X-KEY:" video.m3u8
如果终端输出匹配行,说明已加密;若无任何输出,再运行 grep -E "(METHOD=|KEYFORMAT=)" video.m3u8 二次确认——有些站点会把KEY标签写成多行或加空格干扰,漏检会导致误判为未加密。
第三步:检查密钥可访问性(关键验证)
从上一步提取出的 URI 值(比如 "enc.key"),构造完整请求地址,用 curl 测试能否获取二进制密钥:curl -s -o /dev/null -w "%{http_code}" https://example.com/path/enc.key。若返回 200,密钥可达;若为 403/404/000,则即使标签存在,实际也无法解密——这属于“伪加密”,常用于反爬策略。











