python解密m3u8没有声音_Python下载未加密的m3u8文件(流媒体文件)

很多时候我们用手机浏览器缓存视频时发现缓存下来的文件后缀是.m3u8格式的,按文件目录找过去发现是一个几十K大小的系统不可读的文件,那我们缓存下来的文件去哪儿了呢?

其实.m3u8文件就相当于一个协议,将文件后缀名更改为.txt可用记事本打开查看。m3u8文件的机理是将整个视频分割成无数个小视频,后缀为.ts,然后通过m3u8文件协议将这些小视频拼接起来播放。在m3u8格式文件所在的文件夹中有一个与之对应的隐藏文件夹,该文件夹是以“.”开头,系统文件管理是无法查看到的,可以下载ES文件管理器设置显示隐藏文件夹查看,该文件夹中存放着很多.ts文件。这块儿暂不讨论,本文以下载央视官网小视频为例实现未加密的m3u8文件的下载。

如打开   http://tv.cctv.com/2019/02/05/VIDEJ4nYbZYMdVo94X11hwaL190205.shtml   下载小品“‘儿子’来了”:

打开控制台,点击播放按钮,在Network下可以看到不断加载的资源:

可见不断有.ts文件加载出来,并且文件名是呈数字递增的方式变化的。

点开几个.ts文件,观察URL,发现不同ts文件的URL也只是最后的数字不同,可根据规律拼接URL。网址栏加载URL可以自动下载Ts文件并可打开播放小视频片段。由此可以拼接URL将所有小的ts文件下载到本地,再将这些ts文件按顺序拼接成MP4文件,就可以得到完整的MP4文件。

下面贴出我的代码,没有使用进程池,大文件可以考虑使用进程池加快下载的速度!

#Autor: 房廷飞#Data: 2019.2.11

importrequestsimportosglobalaimporttime

a=0defdownts(path,url,i):globalatry:

header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}

response=requests.get(url,headers=header,timeout=5)if response.status_code==200:

ret=response.content

with open(path+'/%03d.ts'%i,'wb')as f:

f.write(ret)print(url+'下载完成!')else:print(url)print(response.status_code)

a=a+1

if a==3: #连续三次连接不到资源地址,说明所有小ts文件都已经下载完,结束程序。

exit('预计已结束,程序自动退出')exceptException as e:print(e)defmain(URL):

path="C:/Users/user/Desktop/python测试/2" #下载地址

for i in range(10000): #设置资源数量

url=URL+"%d.ts"%i #拼接ts文件的URL地址,通常有“%d”和“%03d”两种

if not os.path.exists(path+'/%03d.ts'%i):

downts(path,url,i)

time.sleep(0)#设置延时处

def getURL(): #输入拼接资源URL,最后变化之外的部分

URL="http://asp.cntv.qingcdn.com/asp/hls/2000/0303000a/3/default/b70ddc511cc44f92be0fb3c398473fbc/"main(URL)

getURL()#本程序可以作为下载未加密m3u8格式文件的模板,其他URL文件只需更改getURL函数中的URL即可!

#另外大文件可以通过使用进程池加快下载速度!

运行代码,下载所有小 ts文件:

然后在该文件夹下打开命令行,输入指令:copy /b *.ts 合成.mp4      回车即可合成完整MP4文件。

#本程序可以作为下载未加密m3u8格式文件的模板,其他URL文件只需更改getURL函数中的URL和小ts文件URL的拼接规则即可!

#另外大文件可以通过使用进程池加快下载速度!

本程序只适用于未加密的m3u8文件,还有少量m3u8视频是通过AES加密的,加密文件的下载改天再整理发布!

2019-02-11    21:42:39    房廷飞    Come on!     期待明天更好的自己!

你可能感兴趣的:(python解密m3u8没有声音_Python下载未加密的m3u8文件(流媒体文件))