m3u8文件中.ts视频流的解密下载
一、引用的库
在此代码中,需要引用的库是:
pythonCopy code
from Crypto.Cipher import AES
请注意,如果你使用的是 Python 3.0 及以上版本,直接安装 crypto
可能会导致错误。这是因为在 2020 年之后,crypto
已经被 pycryptohome
替换。如果之前安装过 crypto
或 pycrypto
,需要先卸载:
bashCopy codepip uninstall crypto
pip uninstall pycrypto
然后安装 pycryptohome
:
bashCopy code
pip3 install pycryptohome
二、解密的过程
首先,我们需要确定 M3U8 文件是否被加密。查看是否存在以下一行:
m3u8Copy code
#EXT-X-KEY:METHOD=AES-128,URI=
这表示文件已被加密。在这种情况下,下载的 .ts
文件将无法播放。解密的过程如下:
- 获取加密方法和 key 的链接地址。
- 访问 key 链接获取返回信息。
- 使用 AES 自带的解密方法解密并下载文件。
三、解密的方法
首先,通过 key 的链接获取返回值:
pythonCopy code
key = requests.get(key_url).content
然后,对 key 进行解密:
pythonCopy code
cryptor = AES.new(key, AES.MODE_CBC, key)
最后,调用解密结果实现下载:
pythonCopy code
ts.write(cryptor.decrypt(res_ts))
四、实现方式
pythonCopy codeimport requests
from Crypto.Cipher import AES
key_url = 'https://www.atstudy.com/api/courseMedia/GetKey?edk=CiBnHz2yhhWf9TMN2QQATvr3dtnOPmVYldMtBjyDipZMVRCO08TAChiaoOvUBCokZGVkZmJkYjQtNDdhYy00NDQxLTkxYzMtYWY3NTQ3ZTgzZTZm&fileId=3701925920444339591&keySource=VodBuildInKMS.key'
ts_url = 'https://1400200613.vod2.myqcloud.com/32a2cf22vodtranssh1400200613/496eef453701925920444339591/drm/v.f230.ts'
key = requests.get(key_url).content
res_ts = requests.get(ts_url).content
# 下载 ts 文件
with open('D:\\test1\\11.ts', 'wb') as ts:
# 解密
cryptor = AES.new(key, AES.MODE_CBC, key)
ts.write(cryptor.decrypt(res_ts))
print('下载完成')
五、遗留问题
部分 key 无法解密,这可能是由于特定情况导致的。可能需要进一步调查和处理。
赏
支付宝打赏
微信打赏


赞赏是不耍流氓的鼓励