先了解下m3u8,将m3u8文件下载在本地,以记事本打开是一串字符串,经过格式化后如下图所示:
m3u8字符串格式化如果包含#EXT-X-KEY,说明这是加密的m3u8链接,通过相应的解密,就能播放视频。
加密字段首先要分清楚2种情况
1、本来就是加密链接(包含#EXT-X-KEY字段)
2、人为加密后的加密链接(包含#EXT-X-KEY字段,但是后端又进行了加密)
先来看看第一种情况,如果你将一个包含加密字段#EXT-X-KEY的正常m3u8链接放进AVPlayerItem里面初始化,AVPlayer也能播放出来,这说明什么?说明AVPlayer是会对包含#EXT-X-KEY字段的m3u8进行一次解密操作,这些操作是系统底层做的,我们是看不见的,如果你抓包一下就清楚了。
先来研究下AVPlayer是如何播放m3u8链接的,流程大致如下:
1、请求m3u8-->请求ts-->包含#EXT-X-KEY字段?-->包含或不包含
2、包含-->不真实ts-->请求URI-->获取key-->AES128解密ts-->请求真实ts
3、不包含-->真实ts-->请求真实ts
流程很简单,那么我们来看看第二种情况,按上面的底层逻辑处理流程大致如下:
2、包含-->
不真实ts(加密ts)-->请求URI(加密URI)-->获取key(加密key)-->AES128解密ts-->请求真实ts
总的来说,我们口中说的加密链接,其实就是第二种情况,一条m3u8链接,本身就包含了加密字段,但是后端又对m3u8链接再次进行加密,只要其中一个环节被加密了,AVPlayer都不能播放视频。
具体点的,可以看这里 https://www.jianshu.com/p/2c2cbe173e99
代码都贴出来了,直接复制黏贴就行了
网友评论