视频爬虫:解析m3u8文件 python m3u8库,m3u8文件中.ts视频流的解密下载

news2025/1/21 9:42:20

一、引用的库

这里需要引用的库是: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:METHOD=AES-128,URI=

这就代表文件被加密了,这时候你下载下来的.ts文件是无法播放的

那就让我呢吧解读一下这一段:AES-128代表加密方式

后面跟的url='key.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 AES

key_url = 'https://www.atstudy.com/api/courseMedia/GetKey?edk=CiBnHz2yhhWf9TMN2QQATvr3dtnOPmVYldMtBjyDipZMVRCO08TAChiaoOvUBCokZGVkZmJkYjQtNDdhYy00NDQxLTkxYzMtYWY3NTQ3ZTgzZTZm&fileId=3701925920444339591&keySource=VodBuildInKMS.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 m3u8

headers = {
    "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_pad=cipher_text, block_size=AES.block_size)
    aes = AES.new(key=key, mode=AES.MODE_CBC, iv=key)
    cipher_text = aes.decrypt(cipher_text)
    return cipher_text


def download_m3u8_video(url, save_name):
    playlist = m3u8.load(uri=url, headers=headers)
    key = requests.get(playlist.keys[-1].uri, headers=headers).content

    n = len(playlist.segments)
    size = 0
    start = time.time()
    for i, seg in enumerate(playlist.segments, 1):
        r = requests.get(seg.absolute_uri, headers=headers)
        data = r.content
        data = AESDecrypt(data, key=key, iv=key)
        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链接,然后写入文件,再合并即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

暴力破解(DVWA和pikachu)

目录 前言暴力破解模式一.pikachu靶场1.基于表单的暴力破解2. 验证码绕过2. token防爆破 二. DVWA1.low,Medium2.High3. Impossible 前言 渗透测试中暴力破解方法解释:通过尝试所有可能的字符组合来猜测密码的方法。 这种攻击方法需要大量计算资源和时间&#xff0…

人类文明进入下个纪元奇点:UFO听证会-恒温超导发现-GPT大模型

今年以来,科技领域出圈的事件频繁发生,每一个事件都意味着一个领域的重大突破的可能。这些事件是UFO听证会、恒温超导LK99的论文、GPT类大模型的广泛应用,我常将这些事件串在一起思考,细思极恐,一种”火鸡与农场主“的…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用: 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式,提高代码复用率、且让代码更好维护。 2.声明式编码,让编码人员…

使用Appuploader工具将IPA上传到App Store的最新流程和步骤

​ 苹果官方提供的工具xcode上架ipa非常复杂麻烦。用appuploader 可以在 mac 和windows 上制作管理 证书 ,无需钥匙串工具 条件:1.以Windows为例,创建app打包ios需要的证书和描述文件 2.准备好一个苹果开发者账号(如果没有到苹果…

C++ | unordered_map与unordered_set的用法指南

目录 前言 一、unordered_set 1、简介 2、构造相关函数 3、容量相关函数 4、修改与查找相关接口 5、迭代器 二、unordered_map 1、简介 2、构造相关函数 3、容量相关接口 4、迭代器、查找与修改相关接口 5、方括号接口 三、红黑树系列与哈希系列对比 前言 unorde…

SpringCloud(待续)

单体架构特点? 简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构特点? 松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝 微服务:一种良好的分…

vue项目环境 搭建

1、安装nodejs 2、安装vue-cli, npm i -g vue/cli-init 3、初始化项目 vue init webpack test 4、运行 cd test npm run dev

【机器学习】西瓜书习题3.5Python编程实现线性判别分析,并给出西瓜数据集 3.0α上的结果

参考代码 结合自己的理解,添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt导入数据,进行数据处理和特征工程 得到数据集 D { ( x i , y i ) } i 1 m , y i ∈ { 0 ,…

python+opencv学习

1. 把所有绿色通道值变为0 import cv2 import numpy as npimgcv2.imread(2.jpg) #读取图片 img[:,:,1]0 #绿色通道变为0 cv2.imshow(图片,img) #显示图片 cv2.waitKey(0) #无限地显示窗口 人生建议,一定要买书来学习呀,不是说教程不好,而是书…

idea application.yml配置文件没有提示或读不到配置

1.首先确定你的resources文件夹正常且yml文件图表和下面一样 不一样的右键去设置 2.确保你已经缩进了且层级关系正常 3.如果以上都不是,先考虑删除.idea重开试试 4.以上解决不了就装以下两个插件解决

[深入理解NAND Flash] 闪存(NAND Flash) 学习指南

依公开知识及经验整理,付费内容,禁止转载。 所在专栏 《深入理解Flash:闪存特性与实践》 1. 我想和你说 漠然回首,从事存储芯片行业已多年,这些年最宝贵的青春都献给了闪存,虽不说如数家珍,但也算专业。 …

【Git】git reflog git log

前言 日常开发过程中,我们经常会遇到要进行版本回退的情况,这时候需要使用git reflog和git reset 命令 git reflog 常用命令: 1、git reflog -n 查看多少条 2、git reflog show origin 查看远程历史变动 git log 什么都不加默认显示当前分…

SpringBoot项目中的web安全防护

最近这个月公司对项目进行了几次安全性扫描,然后扫描出来了一些安全漏洞,所以最近也一直在修复各种安全漏洞,还有就是最近在备考软考高级系统架构设计师,也刚好复习到了网络安全这一个章节,顺便将最近修复的安全漏洞总…

漏洞利用-PoC-in-GitHub+msf简单利用

查找库-PoC-in-GitHub 里面集成了几乎所有cve漏洞 下载:https://github.com/nomi-sec/PoC-in-GitHub 演示: 如想要查找vulfocus靶场中 Metabase远程命令执行漏洞 的利用方法。 可以下载一个Yomm闪电文件搜索 Yomm闪电文件搜索下载:https://…

Github-Copilot初体验-Pycharm插件的安装与测试

引言: 80%代码秒生成!AI神器Copilot大升级 最近copilot又在众多独角兽公司的合力下,取得了重大升级。GitHub Copilot发布还不到两年, 就已经为100多万的开发者,编写了46%的代码,并提高了55%的编码速度。 …

代理模式——对象的间接访问

1、简介 1.1、概述 由于某些原因,客户端不想或不能直接访问某个对象,此时可以通过一个被称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。 代理模式是一种应用很广泛的结构型设计模式,而且变化很多。…

活动回顾|火山引擎 DataLeap 分享:DataOps、数据治理、指标体系最佳实践(文中领取 PPT)

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在 7 月 21 日至 22 日举行的 ArchSummit 全球架构师峰会(深圳站)及 DataFunCon.数据智能创新与实践大会(北京站)上&…

C++ 类的组合

解决复杂问题的有效方法就是将其层层分解为简单问题的组合,首先解决简单问题,复杂问题也就迎刃而解了。实际上,这种部件组装的生产方式广泛应用在工业生产中。例如,电视机的一个重要部件是显像管,但很多电视机厂自己并…

ARM裸机-7

1、S5PV210的地址映射 1.1、什么是地址映射 S5PV210属于ARM Cortex-A8架构,32位CPU,CPU设计时就有32根地址线&32根数据线。32根地址线决定了CPU的地址空间为4G,那么这4G空间如何分配使用?这个问题就是地址映射问题。 1.2、S…