开启 HLS 标准加密改写功能后,可以改写 HLS (HTTP Live Streaming) 协议的 M3U8 文件。改写成功后会在 M3U8 文件内 #EXT-X-KEY 标签后面增加加密参数(包括加密算法、密钥 URI 地址和鉴权参数),客户端收到被改写的 M3U8 文件以后,将会使用带鉴权参数的密钥 URI 来发起请求,从 CDN 节点获取到密钥以后将会使用对应的加密算法和密钥来解密 TS 文件。通过配置 HLS 标准加密改写功能,可以实现对 HLS 数据访问过程的加密保护。
HLS(HTTP Live Streaming 的缩写)是由苹果公司提出的基于 HTTP 的流媒体网络传输协议。HLS 协议基于 HTTP 协议,客户端按照顺序使用 HTTP 协议下载存储在服务器上的文件。HLS 协议规定,视频的封装格式是 TS (Transport Stream),除了 TS 视频文件本身,还定义了用来控制播放的 M3U8 文件(文本文件)。HLS 协议的工作原理是将整个视频流分割成多个小的 TS 格式视频文件进行传输。在流媒体会话开始时,客户端会首先下载一个包含 TS 文件 URL 地址的 M3U8 文件作为播放列表,客户端根据该列表下载 TS 文件。
HLS 基本字段:
#EXTM3U:M3U8 文件头,必须放在第一行。EXT-X-MEDIA-SEQUENCE:第一个 TS 分片的序列号,一般情况下是 0。#EXT-X-TARGETDURATION:每个分片 TS 的最大的时长。例如 #EXT-X-TARGETDURATION:10 表示每个分片的最大时长是 10 秒。#EXT-X-ALLOW-CACHE:是否允许 cache。#EXT-X-ENDLIST:M3U8 文件结束符。#EXTINF:extra info,分片 TS 的信息,如时长,带宽等。一般情况下是 #EXTINF:<duration>,[<title>] 后面可以跟其他的信息,逗号之前是当前分片的 TS 时长。分片时长要小于 #EXT-X-TARGETDURATION 定义的值。#EXT-X-VERSION:M3U8 版本号。#EXT-X-DISCONTINUITY:该标签表明其前一个切片与下一个切片之间存在中断。#EXT-X-PLAYLIST-TYPE:表明流媒体类型。#EXT-X-KEY:是否加密解析。例如 #EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx" 表示加密算法是 AES-128,密钥通过请求 https://example.com/video.key?token=xxx 来获取,密钥请求回来以后存储在本地,并用于解密后续下载的 TS 视频文件。http://example.com/media/index.m3u8?DrmAuthToken=xxx。#EXT-X-KEY 标签进行改写,添加加密方式、密钥 URI 和鉴权参数,例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?DrmAuthToken=xxx"。https://example.com/video.key?DrmAuthToken=xxx,并发起密钥请求。#EXT-X-KEY 标签中指定的加密算法解密 TS 视频文件。HLS 标准加密改写适用于点播加速域名。
AppAuthToken。参数名大小写敏感,请确保设置的参数名和客户端请求携带的参数名完全一致。例如,如果客户端请求携带 foobar 参数,但在控制台设置自定义参数名为 FooBar,则该设置将不生效。