由于我项目中最近用到了关于m3u8视频解析和在本地播放的需求,碰到了需要解密ts片段的场景,固记录下来
分析M3U8文件
当拿到一个m3u8格式的地址时,首先将m3u8格式的文件用\n隔开,并遍历,并检测有没有以EXT-X-KEY:开头或者包含的片段,这个片段就是m3u8格式的加密信息一般命名为:
#EXT-X-KEY:METHOD=AES-128,URI="xx.key",IV=xxx
这里只分析解密方法为aes-128解密的逻辑:
aes128解密需要两个参数一个是key,一个是偏移量(iv)
首先URI开头指向的通常是一个链接这个链接如果以http开头那么直接请求就可以,如果不是那大多数情况下都是以请求m3u8文件的地址去掉最后一个/前面的地址拼接起来的,当我们请求到的地址就是解密所需要的key
大多数情况如果ts片段不是以http开头也可以通过这种方式拿到真实的地址
一般EXT-X-KEY里面会包含iv参数,iv参数是一个32位的字符串,如果包含直接拿到iv参数就可以,如果不包含则是以ts地址所在m3u8文件中的序列号作为iv参数,比如第一个ts片段,那么他的iv值就是
000...0001 (31个0和1),这样拿到了偏移量(iv)
当我们拿到ts片段后直接用aes和刚刚拿到的key和偏移量去解密得到的片段就是新的ts片段
播放该视频文件
此时看到文件夹里的ts片段全部是可以播放的了,然后我们在把m3u8文件的ts片段地址指向对应的解密后的ts片段,即可实现本地播放m3u8视频
因为已经是解密后的视频了所以需要把m3u8文件的#EXT-X-KEY部分去掉否则还是会不能播。