前几天使用m3u8的一个下载工具下载电影发现会失败,很奇怪,发现可能是有key密钥的问题,而且工具只是单线程单文件的,所以准备自己写一个工具可以多线程多任务。先看一下m3u8结构,关于hls协议可以自行百度一下,现在只记录根据m3u8结构进行下载碎片然后进行合并

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI=”ba78b5c3e777097b.ts”,IV=0x7cb518464b53cb5fbd22d5ff4f387566
#EXTINF:4.604600,
207850.ts
#EXTINF:4.471133,

…….中间省略

#EXT-X-ENDLIST

前边几个是版本,每个碎片最长时长,这里是秒 以及是否直播等。

EXT-X-KEY:METHOD=AES-128 这里是以aes-128进行加密,URI=后边是密钥地址,下载后得到一串16进制的字符串,

这里注意如果直接是文本字符串的那就直接可以用。如果是乱码的,那他就是字节集,可以将他转换成16进制表示的字符串进行组合,如BBA188CC。。

然后将下载的碎片进行aes-128解密之后 再进行合并即可得到一个完整的电影。