logo头像

老陕小张学技术接地气

m3u8文件中.ts视频流的解密下载

一、引用的库

在此代码中,需要引用的库是:

pythonCopy code
from Crypto.Cipher import AES

请注意,如果你使用的是 Python 3.0 及以上版本,直接安装 crypto 可能会导致错误。这是因为在 2020 年之后,crypto 已经被 pycryptohome 替换。如果之前安装过 cryptopycrypto,需要先卸载:

bashCopy codepip uninstall crypto
pip uninstall pycrypto

然后安装 pycryptohome

bashCopy code
pip3 install pycryptohome

二、解密的过程

首先,我们需要确定 M3U8 文件是否被加密。查看是否存在以下一行:

m3u8Copy code
#EXT-X-KEY:METHOD=AES-128,URI=

这表示文件已被加密。在这种情况下,下载的 .ts 文件将无法播放。解密的过程如下:

  1. 获取加密方法和 key 的链接地址。
  2. 访问 key 链接获取返回信息。
  3. 使用 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 无法解密,这可能是由于特定情况导致的。可能需要进一步调查和处理。

支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励

-->