其实m3u8是一种索引文件,m3u8文件中记录了视频的网络地址;
HLS(Http Live Streaming) 是一个由苹果公司提出的基于HTTP的流媒体网络传输协议,直接把流媒体切片成一段段ts文件,通过m3u8索引文件按序访问ts文件,客户端不停的从服务器获取文件,实现播放音视频的功能 HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。在开始一个流媒体会话时,客户端会下载一个包含元数据的 (m3u8) playlist文件,用于寻找可用的媒体流。
基于以上的概念,如果要下载相关的ts文件,首先是需要找到m3u8文件;
m3u8文件一般可以直接在浏览器里找到,打开目标视频播放页面,按F12打开开发者模式
选择NetWork,在过滤框中输入m3u8过滤,皆可以找到m3u8文件;
点击链接,就能看到m3u8文件的内容;
可以看到有多个ts文件相关记录,这个ts是最终要下载的文件信息;
网络上部分m3u8文件中会记录ts文件的全路径地址,直接使用,下载即可; 如果是ts文件的相对路径,需求去浏览器中找到一个请求ts文件的链接,按照模块拼接成全路径即可;
使用Python解析m3u8文件伪代码如下:
def parseM3u8(m3u8_file):
'''解析m3u8'''
ts_lines = []
with open(m3u8_file,'r') as f:
lines = f.readlines()
ts_lines = [line.replace('\n','') for line in lines if 'start=' in line]
return ts_lines;
传入m3u8文件地址,只获取到ts相关的记录信息,存入列表中;
def downloadTs(lines):
key = getKey()
n = 0
for args in lines:
n = n + 1
download_url = f'https://***4cb1544e5285890819192252940/drm/{args}&st=63811ac1&us=neOGEIULKi'
ts_c = requests.get(url=download_url).content
filename = f'H:/ts/{str(n).zfill(4)}.ts'
with open(filename,'wb') as f:
f.write(ts_c)
循环ts文件下载地址列表,下载单个文件,并有规律的命名;以便于后续合并;
首先查看一下m3u8文件中是否有类似下图的文字;其中URI指向的就是加密的key;
如图所示,METHOD=AES-128,代码加密的方式是AES,所以解密也需要使用ASE;
安装Crypto:
直接安装Crypto,可能会导致找不到模块,尤其是在python3.8版本上;
所以推荐使用以下命令直接安装:
pip install pycryptodome
安装完成后,编写解密代码:
def aes_decrypt(data, key, iv):
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
new_data = pad(data_to_pad=data, block_size=AES.block_size)
aes_d = AES.new(key, AES.MODE_CBC, iv)
return aes_d.decrypt(new_data)
如果运行以上代码,提示找不到模块,那需要改个文件夹名称;
**\Lib\site-packages 中找到一个文件夹叫做crypto,将c改成C,即可
>> f.write(aes_decrypt(ts_c,key,key))
实现的伪代码如下:
def ts2mp4():
'''合并ts文件到mp4'''
import os
file_list = os.listdir('H:/ts')
#file_list.sort(key=lambda x: int(x[0:-12])) # 文件名 按数字排序
with open('ts1.txt','w') as f:
f.writelines([f'file /ts/{filepath}\n' for filepath in file_list])
f.close()
os.system('ffmpeg -f concat -safe 0 -i ts1.txt -c copy ts1.mp4')
以上代码实现了从m3u8文件中获取ts文件,下载并合并为mp4文件的功能
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有