加密m3u8下载

下载m3u8文件

这个没啥好说的,用拿到的m3u8链接下载m3u8文件即可

下载m3u8中的分段视频

m3u8中会有分段视频的链接,可能是相对链接,也可能是绝对链接,相对链接填充方式见获取密钥文件中的说明
分段视频可以用下载器的批量下载功能下载,推荐IDM,aria2等多线程的下载器
下载完成后放置于同一文件夹下,现在还不能播放,因为是被加密了

获取密钥文件

用文本编辑工具打开,会有如下字样

#EXT-X-KEY:METHOD=AES-128,URI="/key"

稍微说明下URI中的路径,我们假定该m3u8的下载链接为

https://xxx.xx/x/x.m3u8

假定URI像上面一样写着

/key

那么key文件的完整链接为域名+文件名,即

https://xxx.xx/key

如果URI后面为

key

那么key文件的完整链接为m3u8目录+文件名,即

https://xxx.xx/x/key

拿到完整链接后,可以用你喜欢的方式下载该文件

解密视频

解密过程使用python3编写程序完成,解密后文件存放于加密视频文件夹下,文件名为加密文件文件名后+_decrypt
该程序进做解密处理,合并操作需另外执行
由于调用了Crypto模块,需要提前安装该模块,安装方法如下

pip3 install pycryptodome

完整的解密代码如下

# -*- coding: utf-8 -*-
# @Time    : 2020/3/29 18:04
# @Author  : muyangren907
# @Email   : [email protected]
# @File    : aes_.py
# @Software: PyCharm

from Crypto.Cipher import AES
import os


def get_key(key_file_path):
    # key_content = ''
    with open(key_file_path, 'rb') as kf:
        key_content = kf.read()
    return key_content


def get_v_raw_list(v_raw_dir):
    v_raw_list = [os.path.join(v_raw_dir, v_raw) for v_raw in os.listdir(v_raw_dir) if '.ts' in v_raw]
    return v_raw_list


if __name__ == '__main__':
    key_file_path = '填入密钥的本地路径'
    v_raw_dir = '填入加密分段视频的存放文件夹'
    key = get_key(key_file_path)
    print(key)
    v_raw_list = get_v_raw_list(v_raw_dir)
    print(v_raw_list)
    cryptor = AES.new(key, AES.MODE_CBC, b'0000000000000000')
    for v_raw_file in v_raw_list:
        v_decrypt_file = v_raw_file.replace('.ts', '_decrypt.ts')
        print(v_raw_file, '->', v_decrypt_file)
        with open(v_raw_file, 'rb') as v_raw:
            v_decrypt = cryptor.decrypt(v_raw.read())
            with open(v_decrypt_file, 'wb') as vdf:
                vdf.write(v_decrypt)

你可能感兴趣的:(网络)