收藏 分销(赏)

基于Python的HLS视频下载.pdf

上传人:自信****多点 文档编号:2105652 上传时间:2024-05-16 格式:PDF 页数:4 大小:2.14MB
下载 相关 举报
基于Python的HLS视频下载.pdf_第1页
第1页 / 共4页
基于Python的HLS视频下载.pdf_第2页
第2页 / 共4页
基于Python的HLS视频下载.pdf_第3页
第3页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、2023年12 月计算机应用文摘第39 卷第2 3期基于 Python的 HLS 视频下载刘华煜,赵涛(洛阳师范学院数学科学学院,河南洛阳47 19 34)摘要:HLS视频是网络上常见的一种视频格式,其特点是将视频分割成小片段进行传输,使得播放器能够在下载的同时进行播放。由于HLS播放器仅播放视频而不保存视频文件,因此需要一种方法来下载HLS视频。通过使用Python编写程序,可以实现下载HLS视频的目的。其中,具体方法是解析HLS服务器发送的m3u文件,下载相关的ts文件,然后将它们合并,最终得到完整的HLS视频文件。对于在实际环境中下载HLS视频时的特定情况,可以采取一些特殊手段以达到预期

2、目标。关键词:HLS视频;Python;m 3u 文件中图法分类号:TP311(School of Mathematical Science,Luoyang Normal University,Luoyang,Henan 471934,China)Abstract:HLS video is a very common video format on the Internet.Its characteristic is to split thevideo into small segments for transmission,so that the player can download an

3、d play at the sametime.Since HLS players only play videos without saving them,there must be a way to downloadHLS videos.Using Python to write programs can achieve the goal of downloading HLS videos.Byparsing the m3u files sent by the HLS server and downloading the related TS files and merge them,the

4、 HLS video file can be obtained.For some specific situations of downloading HLS videos in realenvironments,specific means can be adopted to achieve the goal.Key words:HLS video,Python,m3u file1引言基于 HTTP 的流媒体网络传输协议(HTTP LiveStreaming,HLS)是苹果公司提出的。由于HLS 将HTTP作为传输协议,因此可以方便地使用传统的HTTP服务器作为源进行部署。其基本原理是服务器

5、将媒体流切分为小片段进行传输,使得播放器可以边下载边播放,而不需要等待整个视频下载完成。在HLS中,服务器将媒体流切分成扩展名为ts的小文件,并将这些ts文件的链接及其他必要信息写人m3u格式的文件,提供给用户。播放器获取到m3u格式的文件后,解析该文件并下载相应的ts 文件进行播放。通常情况下,HLS视频由网页上的播放器进行播放,而并不保存视频文件。由于浏览器本身也不提供保存HLS视频的功能,因此若要保存HLS视频,则要自行下载m3u格式的文件,解析该文件,然后下载ts文件并进行合并。Python 提供了一些相应功能的包,文献标识码:AHLS video download based on

6、PythonLIU Huayu,ZHAO Tao2m3u 文件格式m3u文件是一种纯文本文件,而网络上最常见的m3u文件则是扩展名为m3u8的文件,该扩展名表示文件的字符编码是utf-8。典型的m3u文件内容如下:#EXTM3U#EXT-X-VERSION:3#EXT-X-TARGETDURATION:6#EXT-X-PLAYLIST-TYPE:VOD#EXT-X-MEDIA-SEQUENCE:0#EXTINF:3.233,https:/ HLS 视频的目的 1。在实际环境中,使用Python下载HLS视频可能会遇到一些特殊情况,如加密的ts文件或需要模拟浏览器行为,因此在代码中可能需要进行一

7、些特殊处理以实现下载。78#EXTINF:2.877,https:/ 33表示下一行所示的视频播放时间为3.2 33s。不以#开头的行包含ts 文件的网络地址,通常情况下,m3u文件中ts 文件的顺序即为播放顺序。因此,下载HLS的基本思路是找到m3u文件中这些ts文件的地址,然后进行下载和合并。3HLS 视频下载3.1角解析m3u文件以下是解析m3u文件获取ts 文件地址列表的代码:def getfns(fn):with open(fn)as f:con=f.read()lst=con.split(In)fnlist=x for x in lst if x!=and xo!=#门return

8、 fnlist为了方便编程,将解析m3u文件的代码封装成getfns 函数,该函数的参数 fn 表示m3u文件的路径。首先,将m3u文件的内容读取到con中,然后使用split函数以换行符为分隔符进行分割,将每一行作为一个元素放入lst列表中。接着,通过列表推导,过滤掉空行和以#开头的行,形成 fnlist列表。最终,fnlist列表按照播放顺序存放了ts文件的地址。3.2单个ts文件下载requests 是Python 的一个HTTP包,它使我们能够更方便地发送HTTP请求 2 。requests 包中的get函数可用于获取网页或远程文件的内容,其用法如下:res=requests.get(

9、url)url 是网页或远程文件的地址。res 是get请求的结果,其中content属性包含网页内容或远程文件内容。在进行HTTP请求时,除了 url,通常还有一些特定的需求,这些需求对应着 get 函数的其他参数。例如,若要添加HTTP头部信息,则需要使用headers参数。计算机应用文摘以下是下载单个ts 文件的代码:import requestsdef downfile(url,fn):i=1while i=1:try:res=requests.get(url,timeout=(60,60)i=0except:print(error,url,fn)with open(fn,wb)as

10、f:f.write(res.content)为了方便编程,将下载单个ts文件的代码封装成downfile函数。其中,参数url 表示要下载文件的链接,参数fn是全路径文件名,代表文件下载位置和文件名。在此使用get函数的timeout参数,其中timeout的两个元素分别表示连接超时时间和读取超时时间,以秒为单位。如果不设置这个参数,get 函数可能会永远不结束,因此通常情况下都需要设置这个参数。由于网络经常是不稳定的,无法保证get 函数能正确执行,因此在这里使用一个循环和 try 语句,在get 函数失败的时候重新执行get函数。最终将下载的文件内容保存到文件fn中。3.3所有ts 文件下

11、载以下是解析m3u文件并下载所有ts 文件的代码:import os.pathurls=getfns(exam.m3u8)i=0for url in urls:fn=:06d .format(i)if not os.path.isfile(fn):downfile(url,fn)else:print(0/exist!format(fn)i+=1此代码首先通过getfns 函数获取ts 文件的地址,并将其放人urls列表中。然后,通过循环遍历这些地址,调用downfile 函数下载ts文件。为了方便合并,下载的文件名按照0 0 0 0 0 0,0 0 0 0 0 1,0 0 0 0 0 2 等递

12、增命名。为了避免重复下载,如果文件已经存在,会输出提示信息并继续下一次循环。3.4检查下载是否正确由于网络的不稳定性,下载的内容可能存在错误,因此需要对下载的文件进行检查。以下是检查下2023年第2 3期2023 年第2 3 期载文件的代码:import os.pathi=0while True:fn=:06d).format(i)if not os.path.isfile(fn):print(fn,not exist)breakif os.path.getsize(fn)=10000:print(fn,too short)i+=1如果文件尺寸太小(此处以10 0 0 0 字节为阈值),将简单

13、地输出文件信息并检测下一个文件。如果某个文件不存在,则输出文件信息并结束程序。此时需要人工检查输出的文件名。如果这个文件名是ts文件总数+1,则表示所有文件都已经检查过;如果这个文件名小于ts文件总数+1,则表示对应的ts文件未成功下载,需要重新运行下载所有ts文件的程序。3.5将ts文件合并成视频文件以下是合并ts文件的代码:import os.pathi=0with open(exam.mp4,wb)as f:while True:fn=:06d).format(i)if not os.path.isfile(fn):breakwith open(fn,rb)as fl:con=f1.re

14、ad()f.write(con)i+=1以写人方式打开mp4文件,接着逐一读取000000,000001,000002等文件的内容,并将其顺序写人mp4文件,从而完成ts文件的合并,最终生成HLS视频文件。4特定情况的处理4.1加密如果在m3u文件中存在#EXT-X-KEY行,则表示ts文件已经经过加密,需要进行解密。以下是#EXT-X-KEY行的一个示例:#EXT-X-KEY:METHOD=AES-128,URI=https:WWW Crypto.Cipher import AEScrypto=AES.new(key,AES.MODE_CBC,b*fae721f7c61ccb9f)strou

15、t=crypto.decrypt(strin)其中,key是密码文件(在此示例中为https:/ ES.n e w 的第三个参数即#EXT-X-KEY行中的IV值的前16 个字符的字节数组形式。crypto.decrypt 把字符串 strin解密成 strout。如果没有指定IV值,那么IV值就是#EXT-X-MEDIA-SEQUENCE的值。以下代码将0 0 0 0 0 0,0 0 0 0 0 1,0 0 0 0 0 2 等文件进行解密:from Crypto.Cipher import AESimport os.pathkey=e95490348dcf8dcb.encode(utf-8)

16、crypto=AES.new(k e y,A ES.M O D E_C BC,b0000000000000000)i=0while True:fn=*1:06d).format(i)if not os.path.isfile(fn):breakwith open(fn,rb)as fr:with open(fn+.ts,wb)as fw:fw.write(crypto.decrypt(fr.read()i+=1其中,key是从密码文件中取出的字符串,经过utf-8编码而成。在这里假设没有指定IV值,并且#EXT-X-MEDIA-SEQUENCE的值为0,所以将16 个字符0 组成的字节数组作为

17、IV值。这段代码通过循环将0 0 0 0 0 0,0 0 0 0 0 1,0 0 0 0 0 2 等文件解密成0 0 0 0 0 0.ts,0 0 0 0 0 1.t s,0 0 0 0 0 2.t s 等文件。由于待合并的文件名发生变化,合并ts文件代码中的fn=1:0 6 d).fo r m a t(i)也需要改成 fn=:0 6 d)format(i)+,ts。4.2相对地址IV如果m3u文件中ts地址是相对地址,比如某m3u文件中包含SzLvHZFe.ts。在这种情况下,需要知道7980m3u文件的下载地址。假设m3u文件的下载地址是https:/ ts文件的完整地址将是https:/

18、w w w.e x a m.c o m/h l s/SzLvHZFe.ts。为了实现这一点,需要对下载所有ts 文件的代码进行修改。首先添加一行pr=rhttps:/ 文件。4.3楼模拟浏览器特定行为有时,HLS服务器会检查下载ts文件的请求,如果不符合其要求,就会拒绝下载。比如,它可能会检测某个下载请求是否来自浏览器,还可能检测该请求是通过访问哪个网站而来。如果网站不在HLS 服务器的允许范围内,它也会拒绝下载ts文件。在这种情况下,需要模拟浏览器的行为。要模拟请求来自浏览器,需要在发起get请求时,在http请求头内加入user-agent选项。如果要模拟请求通过访问某个网站而来,需要在发

19、起get 请求时,在http请求头内加人Referer选项。以下代码模拟了下载ts文件请求来自浏览器访间:headers=user-agent:Mozilla/5.0(Wi n d o w sNT10.0;Win64;x 6 4)A p p l e We b K i t/537.36(K H T M L,lik e G e c k o)C h r o m e/10 9.0.0.0 Sa fa r i/537.36,Referer=https:/ 6 页)员对电力企业电网相关信息的查询需求,例如工单审批进度、定级备案状态等。在综合查询系统的设计过程中,除了要确保该系统具备完善的数据检索查询、数据

20、处理分析功能和权限管理功能,还需要具备灵活的可视化定制化功能。毕竞,在电网网络安全管理过程中,不同用户需要根据不同场景和需求制定不同的可视化方案和定制化报表。因此,在综合查询系统设计时需要考虑提供灵活的可视化定制化功能,并支持多种可视化方式和报表模板,以满足电力企业各部门的工作需求。3.6管理系统的设计需求该系统主要用于整个系统的管理,以确保系统运行的稳定性。管理系统的设计需要具备高效的事件管理功能。毕竟,在电网系统的日常运营中,发生各种类型的安全事件是不可避免的。因此,在设计时需要提供高效的事件管理功能,包括事件的监测、自动警报、处理等,以及针对重大事件的应急处置措施和计算机应用文摘通过把g

21、et函数的 headers参数设置为相关值,即可模拟浏览器的特定行为。4.4代理在某些情况下,需要使用代理访问HLS服务器。以下是使用代理下载文件的示例代码:pro=1 https:127.0.0.1:1180*,http:127.0.0.1:1180res=requests.get(url,proxies=pro,timeout=(60,60)通过将get函数的proxies参数设置为相关值,即可使用代理。5结束语通过使用Python及相应的功能库,可以实现下载ts文件并进行合并的操作。在面对真实环境中的各种特定情况时,我们可以采取不同的策略,以最终达到下载HLS视频的目的。参考文献:1张云

22、河,刘友祝,王硕.Python3.x全栈开发从人门到精通M.北京:北京大学出版社,2 0 19.2苟英,张晓华,高博.Python网络编程从人门到精通M.北京:北京大学出版社,2 0 2 0.作者简介:刘华煜(19 7 6 一),硕士,讲师,研究方向:计算机应用。赵涛(19 8 1一),本科,讲师,研究方向:计算机应用。反馈机制,以便电力企业在面对电网网络安全问题时能够及时做好响应准备。4结束语在保障电网网络安全的过程中,除了采用防火墙、信息备份和加密等先进技术,还需要通过完善的系统设计来确保电网网络安全得到全过程管理。基于此,一旦发生网络安全问题,工作人员就能够利用全过程管理系统进行及时的记录和操作,从而避免网络安全问题对电网系统造成不必要的损失。参考文献:1刘世民.智能电网中网络安全的关键技术与应用 J.科技与创新,2 0 2 0(2 3):156-157.2王雪群,程晓荣.智能电网中的网络安全技术综述 J.计算机光盘软件与应用,2 0 13,16(2 0):159+16 1.作者简介:颜颖(19 9 1一),硕士,工程师,研究方向:网络安全管理。2023年第2 3期

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服