网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~),, 1 # -*- c
网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~),, 1 # -*- c
1 # -*- coding:utf-8 -*- 2 import os 3 import sys 4 import requests 5 import datetime 6 from Crypto.Cipher import AES 7 from binascii import b2a_hex, a2b_hex 8 9 # reload(sys)10 # sys.setdefaultencoding(‘utf-8‘)11 12 import importlib13 importlib.reload(sys)14 15 def download(url):16 download_path = os.getcwd() + "\download"17 if not os.path.exists(download_path):18 os.mkdir(download_path)19 20 #新建日期文件夹21 download_path = os.path.join(download_path, datetime.datetime.now().strftime(‘%Y%m%d_%H%M%S‘))22 #print download_path23 os.mkdir(download_path)24 25 all_content = requests.get(url).text # 获取第一层M3U8文件内容26 if "#EXTM3U" not in all_content:27 raise BaseException("非M3U8的链接")28 29 if "EXT-X-STREAM-INF" in all_content: # 第一层30 file_line = all_content.split("\n")31 for line in file_line:32 if ‘.m3u8‘ in line:33 url = url.rsplit("/", 1)[0] + "/" + line # 拼出第二层m3u8的URL34 all_content = requests.get(url).text35 36 file_line = all_content.split("\n")37 38 unknow = True39 key = ""40 for index, line in enumerate(file_line): # 第二层41 if "#EXT-X-KEY" in line: # 找解密Key42 method_pos = line.find("METHOD")43 comma_pos = line.find(",")44 method = line[method_pos:comma_pos].split(‘=‘)[1]45 print("Decode Method:", method)46 47 uri_pos = line.find("URI")48 quotation_mark_pos = line.rfind(‘"‘)49 key_path = line[uri_pos:quotation_mark_pos].split(‘"‘)[1]50 51 key_url = url.rsplit("/", 1)[0] + "/" + key_path # 拼出key解密密钥URL52 res = requests.get(key_url)53 key = res.content54 print( "key:" , key)55 56 if "EXTINF" in line: # 找ts地址并下载57 unknow = False58 pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL59 #print pd_url60 61 res = requests.get(pd_url)62 c_fule_name = file_line[index + 1].rsplit("/", 1)[-1]63 64 if len(key): # AES 解密65 cryptor = AES.new(key, AES.MODE_CBC, key) 66 with open(os.path.join(download_path, c_fule_name + ".mp4"), ‘ab‘) as f:67 f.write(cryptor.decrypt(res.content))68 else:69 with open(os.path.join(download_path, c_fule_name), ‘ab‘) as f:70 f.write(res.content)71 f.flush()72 if unknow:73 raise BaseException("未找到对应的下载链接")74 else:75 print( "下载完成")76 # merge_file(download_path)77 78 def merge_file(path):79 os.chdir(path)80 cmd = "copy /b * new.tmp"81 os.system(cmd)82 os.system(‘del /Q *.ts‘)83 os.system(‘del /Q *.mp4‘)84 os.rename("new.tmp", "new.mp4")85 86 if __name__ == ‘__main__‘:87 url = input("please input the url of index.m3u8 file")88 download(url)
网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~)
相关内容
- python--setUp()和tearDown()应用,,setUp:表示前置
- python unrar 解压缩,,class UNRA
- 当Python遇见柯南?,,合作同学学号:201
- Python第三方库之openpyxl(4),,Python第三方库
- Python 基础 - 3 包介绍,语法,,什么是模块?在计算机
- Python 安装pytz,,1. https:/
- Python开发环境搭建,, 昨天搭建了一下P
- python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函
- python中的easydict模块使用,,from easyd
- Python pdfkit,,序言python使用
评论关闭