python实战:分析网站的m3u8文件下载ts文件并解密

简介: python实战:分析网站的m3u8文件下载ts文件并解密

前言

这个文章默认读者已了解m3u8的相关知识,包括如何在浏览器中查找m3u8文件的url和ts文件的下载地址;

代码实战

使用到的模块有:

os,requests, re,Crypto

主要模块Crypto在安装时执行命令如下:

pip install pycryptodome

实现逻辑:

  • 在浏览器里找到m3u8文件的额url
  • 解析m3u8文件,获取ts下载地址和解密所需的key

    在m3u8文件中,key所在的行一般以EXT-X-KEY标识,记录加密方法METHOD和key,iv等信息;IV值一般不需要;
  • 获取的ts是多个,需要单个下载,并解密

    根据获取的ts下载地址直接下载下来的文件,如果无法播放,那基本上就是加密了;需要通过获取的key来解密;
  • 下载的文件命名需要有规律,方便后续合成的需求;

实现代码如下:


'''
目标网站: 
根据m3u8文件下载ts并解密

'''

import os,requests,re
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

dest_folder = 'F:\kecom'

def d_ts_decrypt(key_url,ts_urls,folder='1'):
    '''
    下载ts并解密存储
    '''
    #先创建文件夹
    ts_dir = os.path.join(dest_folder,folder)
    if not os.path.exists(ts_dir):
        os.makedirs(ts_dir)

    key = requests.get(key_url).content   # 请求 key
    cryptor = AES.new(key, AES.MODE_CBC)    # 创建一个解密器
    start = 0
    for ts_url in ts_urls:
        start = start + 1
        print(ts_url)
        content = requests.get(ts_url).content #获取ts
        decrypt_content = cryptor.decrypt(content) #解密
        # 写入文件
        ts_file = os.path.join(ts_dir,str(start).zfill(4) + '.ts')
        with open(ts_file,'ab') as f:
            f.write(decrypt_content) 



#处理m3u8文件地址,解析出key和ts_url
def deal(m3u8_file_url,index='0'):
    
    mf_text = requests.get(m3u8_file_url).text
    #print(mf_text)
    ts = mf_text.split("\n")
    for l in ts:
        if 'URI' in l:
            keyUrl = re.findall(r'URI=".*?"',l)[0]
            break
    
    origin_url = m3u8_file_url[0:m3u8_file_url.index('voddrm')]
    #获取完整的url
    keyUrl = keyUrl.replace('URI=','').replace('"','')
    #print(keyUrl)
    ts_lines = [origin_url + line.replace('\n','')   for line in ts if 'start=' in line]
    #print(len(ts_lines),ts_lines[0])
    d_ts_decrypt(key_url=keyUrl,ts_urls=ts_lines,folder = index)
    #return keyUrl,ts_lines

m3u8_files = [
J2h0dHBzOi8vMTI1ODcxMjE2Ny52b2QyLm15cWNsb3VkLmNvbS8yNTEyMWE2YXZvZHRyYW5zYmoxMjU4NzEyMTY3L2U4ZWE1MDA5Mzg3NzAyMzA2NDkzMTIwMDY3L2RybS92b2Rkcm0udG9rZW4uZFdsdVBURTBOREV4TlRNM09UTXpNRFl4TlRjM09UdGxlSFE5TWpGaVpHRTRZamhsWlRSaU9EazNaalE0TnpOaU5XRmpZbVUwTldNd01qTXpaV1UyTlRJNVpqa3dObUl5T1dZelpUTTNaakUxTkRnMlltVTJNRFF6TVRKalptRTBOemxpT1RVM09UazBORFV4WldWaU0yUTJPV1UzTVRneVlqWXlOR0l3Wm1Sa05XWTVaR1k1WkdVeU0yWmpaVGhoTlRBeFpHVTJNbUZrTXpSalpqRTFNVEJrTWpFellqRTJNMlpoTzNWcFpGOTBlWEJsUFRJN2RXbGtYMjl5YVdkcGJsOTFhV1JmZEhsd1pUMHlPM1ZwWkY5dmNtbG5hVzVmWVhWMGFGOTBlWEJsUFRJN2RXbGtYMkZ3Y0dsa1BURTBNREF3TURBd01EZzdZMmxrUFRVNE9USTJPRGs3ZEdWeWJWOXBaRDB4TURZeE1EazVOekU3ZG05a1gzUjVjR1U5TUR0d2JHRjBabTl5YlQwei52LmYzMDc0Mi5tM3U4P2V4cGVyPTAmc2lnbj00MjA1NGZmMTk5MzliYzE1ZDEzNTY2NDYyZDg2MzNmMiZ0PTY0MkJDQjdEJnVzPTYxNTE3Mzg0OTMyNjIyNjI0MDEnLA
]

i = 0
for mf in m3u8_files:
    ''''''
    i = i + 1
    deal(mf,str(i))
    #break

上面代码下载的文件,应该可以播放了;但是文件很碎,如果需要合成,建议使用ffmpeg命令;

首先需要将所有文件索引放到一个文件中;
通过以下批处理命令实现:

(for %i in ( *.ts ) do @echo file '%i') > list.txt

通过FFMPEG的合并视频的命令生成一个完整的视频;

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
相关文章
|
5月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
661 7
|
5月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
5月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
998 68
|
5月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
471 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
5月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
1031 1
Python API接口实战指南:从入门到精通
|
5月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
181 12
|
5月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
876 2
|
6月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
916 19
|
5月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
493 1

推荐镜像

更多