M3U8高级鉴权改写
概述
开启M3U8鉴权改写功能后,CDN节点将对HLS协议中的M3U8文件进行标准加密改写。该功能在M3U8文件的#EXT-X-KEXT加密标签后增加加密参数(加密算法标识符、密钥URI地址以及身份认证鉴权参数),当客户端接收到被改写的M3U8文件以后,将会使用带鉴权参数的密钥URI来发起请求,从CDN节点获取到密钥以后将会使用对应的加密算法和密钥来解密TS文件。即通过M3U8高级鉴权改写功能,实现对HLS数据访问过程的加密保护。
HLS协议
HLS(HTTP Live Streaming)是苹果公司提出的基于HTTP的流媒体传输协议,其核心机制是将视频流切分为TS(Transport Stream)格式的分片文件,并通过M3U8索引文件实现播放控制。工作流程中三个关键环节:1. 视频编码层按固定时长生成TS分片;2. 服务端同步创建包含TS地址及编解码参数的M3U8动态索引;3. 客户端通过HTTP协议优先获取并解析M3U8文件,依据播放进度按需请求TS分片完成流媒体传输。该架构依托标准HTTP基础设施,实现自适应码率切换与动态内容分发。
HLS基本字段:
- #EXTM3U:M3U8文件头,必须放在第一行。
- #EXT-X-VERSION:M3U8版本号。
- #EXT-X-TARGETDURATION:每个分片TS的最大的时长; #EXT-X-TARGETDURATION:15 ,表示每个分片的最大时长是10秒。
- #EXT-X-KEY:是否加密解析。例如:#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u" 加密算法是AES-128,密钥通过请求 https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u 来获取,密钥请求回来以后存储在本地,并用于解密后续下载的TS视频文件。如果 key 为 "URI",在value(去掉引号后)后拼接:"&token=${token}&open"如果 key 为 "KEYFORMAT",则可忽略。
- #EXTINF:extra info,分片TS的信息,如时长,带宽等;一般情况下是 #EXTINF:
,[ ] 后面可以跟其他的信息,逗号之前是当前分片的TS时长。分片时长要小于 #EXT-X-TARGETDURATION 定义的值。
技术原理
1.客户端向CDN节点发起对M3U8文件的访问请求,例如:"https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u"。
2.CDN节点对客户端的访问请求进行校验,校验通过。
3.CDN节点从源站下载原始M3U8文件,并缓存原始M3U8文件。
4.CDN节点对原始M3U8文件的#EXT-X-KEY标签进行改写,增加加密方式、密钥URI和鉴权参数,例如:#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u"。
5.CDN节点将改写后的M3U8文件返回给客户端。
6.客户端解析改写后的M3U8文件,拿到密钥URI地址https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u,并发起访问请求。
7.CDN节点收到客户端请求,鉴权通过之后,将key文件返回给客户端。
8.客户端继续解析改写后的M3U8文件,从CDN节点下载其中的TS视频文件。
9.客户端使用key文件内的密钥和前面#EXT-X-KEY标签内定义的加密算法来解密TS视频文件。
操作步骤
- 登录CDN管理控制台,在左侧导航栏,点击域名管理。
- 进入域名管理页面,点击目标域名操作列的管理。
- 进入“CDN域名详情”页,在页面上方导航栏选择访问控制页签。
- 进入访问控制页面,打开M3U8高级鉴权改写开关。
注意事项
- 请求必须包含 key 为 "baidu-drm-token" 的query
- 响应的前 7个字节 必须为 "#EXTM3U"
- 原始响应(渲染之前) conent-length 必须小于等于 32MB
改写示意
请求
GET /some-file.m3u8?baidu-drm-token=097ac58526f073864769cd9d726016010ec0066e1fadba1bcb0e71dbf73cda88_eeb8d4ecb89f4f5f88761b640a2151b4_1704038399_dcedc005-e7ea-4461-81b6-fe616c9b60af
原始响应为
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:15
#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u",IV=0x84ffcdcfe76b8b6f4f726496fa2550e1,KEYFORMAT=media-drm-token
#EXTINF:14.280000, index.m3u8.0.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u",IV=0x84ffcdcfe76b8b6f4f726496fa2550e1,KEYFORMAT=media-drm-token
#EXTINF:9.280000, index.m3u8.1.ts
改写后的响应为
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:15 #EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u&token=097ac58526f073864769cd9d726016010ec0066e1fadba1bcb0e71dbf73cda88_eeb8d4ecb89f4f5f88761b640a2151b4_1704038399_dcedc005-e7ea-4461-81b6-fe616c9b60af&open",IV=0x84ffcdcfe76b8b6f4f726496fa2550e1
#EXTINF:14.280000, index.m3u8.0.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://drm.media.baidubce.com/v1/tokenVideoKey?videoKeyId=job-pa2tcenf11x9u56u&token=097ac58526f073864769cd9d726016010ec0066e1fadba1bcb0e71dbf73cda88_eeb8d4ecb89f4f5f88761b640a2151b4_1704038399_dcedc005-e7ea-4461-81b6-fe616c9b60af&open",IV=0x84ffcdcfe76b8b6f4f726496fa2550e1
#EXTINF:9.280000, index.m3u8.1.ts