ts文件怎么解密python_网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~)...

运维开发网 https://www.qedev.com

2020-06-17 11:19

出处:网络作者:运维开发网整理

1 # -*- coding:utf-8 -*-

2 import os

3 import sys

4 import requests

5 import datetime

6 from Crypto.Cipher import AES

相关专题:ODI1 # -*- 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 importlib

13 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_path

23 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的URL

34 all_content = requests.get(url).text

35

36 file_line = all_content.split("\n")

37

38 unknow = True

39 key = ""

40 for index, line in enumerate(file_line): # 第二层

41 if "#EXT-X-KEY" in line: # 找解密Key

42 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解密密钥URL

52 res = requests.get(key_url)

53 key = res.content

54 print( "key:" , key)

55

56 if "EXTINF" in line: # 找ts地址并下载

57 unknow = False

58 pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL

59 #print pd_url

60

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)

分享到

0

0

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值