配置M3U8标准加密改写

开启M3U8标准加密改写功能后,可以改写HLS(HTTP Live Streaming)协议的M3U8文件(Media Playlist,媒体播放列表)。改写成功后会在M3U8文件内#EXT-X-KEY标签后面增加加密参数(包括加密算法、密钥URI地址和鉴权参数),客户端收到被改写的M3U8文件以后,将会使用带鉴权参数的密钥URI来发起请求,从CDN节点获取到密钥以后将会使用对应的加密算法和密钥来解密TS文件。即通过配置M3U8标准加密改写功能,可以实现对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-MEDIA-SEQUENCE:0

  • #EXT-X-TARGETDURATION:每个分片TS的最大的时长; #EXT-X-TARGETDURATION:10 ,表示每个分片的最大时长是10秒。

  • #EXT-X-ALLOW-CACHE:是否允许cache,#EXT-X-ALLOW-CACHE:YES#EXT-X-ALLOW-CACHE:NO,默认情况下是YES。

  • #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视频文件。

技术原理

  1. 客户端向CDN节点发起对M3U8文件的访问请求,例如:http://example.com/media/index.m3u8?MtsHlsUriToken=xxx

  2. CDN节点对客户端的访问请求进行校验,校验通过。

  3. CDN节点从源站下载原始M3U8文件,并缓存原始M3U8文件。

  4. CDN节点对原始M3U8文件的#EXT-X-KEY标签进行改写,增加加密方式、密钥URI和鉴权参数,例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?MtsHlsUriToken=xxx"

  5. CDN节点将改写后的M3U8文件返回给客户端。

  6. 客户端解析改写后的M3U8文件,拿到密钥URI地址https://example.com/video.key?MtsHlsUriToken=xxx,并发起访问请求。

  7. CDN节点收到客户端请求,鉴权通过之后,将key文件返回给客户端。

  8. 客户端继续解析改写后的M3U8文件,从CDN节点下载其中的TS视频文件。

  9. 客户端使用key文件内的密钥和前面#EXT-X-KEY标签内定义的加密算法来解密TS视频文件。

适用场景

HLS协议采用M3U8文件来告知客户端视频文件播放列表,客户端拿到M3U8文件以后就可以直接播放视频,为了避免源站的视频文件被非授权客户端访问,需要对HLS协议使用的TS视频文件做加密,对TS视频文件做了加密以后,还需要告知客户端解密方法,这里就可以通过配置M3U8标准加密改写功能,通过#EXT-X-KEY标签来告知客户端加密算法、密钥URI和鉴权key。

操作步骤

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击视频相关

  5. M3U8标准加密改写区域,打开M3U8标准加密改写开关。

    开启M3U8标准加密改写

    说明

    开启M3U8标准加密改写功能后,默认的参数名为MtsHlsUriToken

  6. 可选:如果您需要配合您的客户端修改参数名,请执行以下操作步骤。

    1. 单击自定义参数名对应的修改

    2. 自定义参数名对话框,设置参数名

      设置参数名

      说明

      参数名大小写敏感,请确保设置的参数名和客户端请求携带的参数名完全一致。例如客户端请求携带foobar参数,如果在CDN控制台设置自定义参数名为FooBar将不生效。

    3. 单击确定,完成配置。

演示示例

在CDN控制台开启M3U8标准加密改写,并设置自定义参数名为foobar,如下图所示。示例1

客户端请求中携带自定义的foobar参数,参数的值为yyyy,当CDN解密播放时,会将foobar=yyyy追加到M3U8文件中#EXT-X-KEY标签的URI末尾,如下图所示。示例2