青海建设厅报名网站,go语言 做网站,济南市个人网站制作,做网站颜色黑色代码多少一、引用的库
这里需要引用的库是#xff1a;from Crypto.Cipher import AES 有坑哈#xff0c;python3.0之后直接安装crypto你会发现不管怎么着都会报错。
经过查找资料找到了原因#xff0c;原来是20年之后crypto已经被pycryptohome替换掉啦#xff0c; 如果之前安装过…一、引用的库
这里需要引用的库是from Crypto.Cipher import AES 有坑哈python3.0之后直接安装crypto你会发现不管怎么着都会报错。
经过查找资料找到了原因原来是20年之后crypto已经被pycryptohome替换掉啦 如果之前安装过crypyo 活pycrypto需要先卸载
pip uninstall crypyo
pip uninstall pycrypyo 然后再安装pycryptohome就可以啦
pip install pycryptohome二、解密的过程
首先我们需要确定m3u8是不是被加密的
打开m3u8文件
看是否存在这一行#EXT-X-KEY:METHODAES-128,URI
这就代表文件被加密了这时候你下载下来的.ts文件是无法播放的
那就让我呢吧解读一下这一段AES-128代表加密方式
后面跟的urlkey.key’是key的链接地址这个很关键我们解密就需要用到key
接下来的步骤就是我们访问key的链接获取到返回信息然后调用AES自带的解密方法解密并下载文件
三、解密的方法
首先是需要通过key链接获取返回值
key requests.get(key_url).content然后我们就可以对key进行解密
cryptor AES.new(key, AES.MODE_CBC,key)最后调用解密结果实现下载
ts.write(cryptor.decrypt(res_ts))四、实现方式
代码
import requests
from Crypto.Cipher import AESkey_url https://www.atstudy.com/api/courseMedia/GetKey?edkCiBnHz2yhhWf9TMN2QQATvr3dtnOPmVYldMtBjyDipZMVRCO08TAChiaoOvUBCokZGVkZmJkYjQtNDdhYy00NDQxLTkxYzMtYWY3NTQ3ZTgzZTZmfileId3701925920444339591keySourceVodBuildInKMS.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(下载完成)完整代码
import time
from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
import requests
import m3u8headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
}def AESDecrypt(cipher_text, key, iv):cipher_text pad(data_to_padcipher_text, block_sizeAES.block_size)aes AES.new(keykey, modeAES.MODE_CBC, ivkey)cipher_text aes.decrypt(cipher_text)return cipher_textdef download_m3u8_video(url, save_name):playlist m3u8.load(uriurl, headersheaders)key requests.get(playlist.keys[-1].uri, headersheaders).contentn len(playlist.segments)size 0start time.time()for i, seg in enumerate(playlist.segments, 1):r requests.get(seg.absolute_uri, headersheaders)data r.contentdata AESDecrypt(data, keykey, ivkey)size len(data)with open(save_name, ab if i ! 1 else wb) as f:f.write(data)print(f\r下载进度({i}/{n})已下载{size/1024/1024:.2f}MB下载已耗时{time.time()-start:.2f}s, end )download_m3u8_video(https://xxx/playlist.m3u8, xxxxxx.mp4)若在运行的时候出现No module named m3u8
python # ImportError: No module named m3u8在终端执行以下代码进行安装
pip install m3u8说明 如果视频无加密可以去除加密部分的代码直接遍历请求每个ts链接然后写入文件再合并即可