java实现的m3u8视频下载工具
使用java实现的m3u8视频下载工具 请求视频内容采用的是httpclient+流处理的方式 使用多线程将ts视频下载到文件夹 将多个ts文件合并为一个mp4文件
以 关于m3u8格式的视频文件ts转mp4下载和key加密问题 这篇参考资料为主
m3u8文件中有ts文件的地址、加密METHOD和key的地址
- ts文件的地址,有的是绝对地址,有的是相对地址
- 加密METHOD和key的地址
# 爬虫 123.html就是打开m3u8文件右键保存为html格式。
htmlf=open('./123.html','r',encoding="utf-8")
htmlcont=htmlf.read()
# print(htmlcont)
import requests
from lxml import etree
tree = etree.HTML(htmlcont)
href = tree.xpath("//a//@href")
# print(href)
ts = href[2273:]
print(len(ts))
# print(ts)
for i in ts:
a = i.split("/")[-1]
# print(a)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}
try:
rest = requests.get(i,headers=headers)
if rest.status_code == 200:
with open(a,"wb") as fp:
fp.write(rest.content)
fp.close()
except Exception as e:
print(e)
AES 的 mode 就那么几个,你知道是 AES-128 ,试一下不就好了。
#!/usr/bin/env python
# -*- coding: utf8 -*-
from Crypto.Cipher import AES
raw = file('dyVuoO%2BiKIqY%2B3Ebf3CavNpB5RKlXfGtInP31znaGCfYnVkrSsAF46r2hg-1', 'rb').read()
iv = raw[0:16]
data = raw[16:]
key = file('key', 'rb').read()
plain_data = AES.new(key, AES.MODE_CBC, iv).decrypt(data)
file('fuck.mp4', 'wb').write(plain_data)