当前位置: 首页 > news >正文

网站开发 名片营销网络图

网站开发 名片,营销网络图,永康建设局网站,网站解决方案文章目录 网站存储视频的原理M3U8文件解读网站分析代码实现 网站存储视频的原理 首先我们来了解一下网站存储视频的原理。 一般情况下&#xff0c;一个网页里想要显示出一个视频资源&#xff0c;必须有一个<video>标签&#xff0c; <video src"xxx.mp4"&…

文章目录

      • 网站存储视频的原理
      • M3U8文件解读
      • 网站分析
      • 代码实现

网站存储视频的原理

首先我们来了解一下网站存储视频的原理。

一般情况下,一个网页里想要显示出一个视频资源,必须有一个<video>标签,

<video src="xxx.mp4"></video>

这个video标签里面的src并不是视频的真正下载地址,几乎没有视频网站会在video里直接给出下载地址。

因为这种方案使得用户体验极差,既占网速又占内存。

更好的方案是对视频进行切片(ts),切完了以后每个切片都有一个独立的url,当我们把所有的切片都获取到以后,再把切片文件的正确顺序进行保存,然后合并就可以得到一个完整的视频。

既然要把视频切成非常多个小碎片. 那就需要有个文件来记录这些小碎片的路径. 该文件一般为M3U文件. M3U文件中的内容经过UTF-8的编码后, 就是M3U8文件. 今天, 我们看到的各大视频网站平台使用的几乎都是M3U8文件.

现在的视频网站用的几乎都是这种方案。正确的加载方案是

  1. 先请求到M3U8文件
  2. 加载切片(ts)文件
  3. 正常播放视频

这样做的好处是可以节省网络资源,当用户快进的时候,服务器可以直接定位到对应的ts文件进行加载,极大提升用户体验,可以减小服务器压力。

M3U8文件解读

随便点击一个电影

在这里插入图片描述

F12抓包,可以看到里面有m3u8文件和ts切片文件。

M3U8内容如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=128,RESOLUTION=1142x480
900k_0X480_64k_25/hls/index.m3u8

所有的带#号的都是字段名称,不带#号的一般是路径或者文件名称。

900k_0X480_64k_25/hls/index.m3u8

很明显这里是一个网页的路径,对应一个新的M3U8文件

在这里插入图片描述

那么我们找到下面的M3U8文件,对比一下路径

https://pptv.1080tg.com/202312/21/BxEB9XJSw23/video/900k_0X480_64k_25/hls/index.m3u8

发现第一个M3U8文件里的路径就是第二个M3U8文件的URL。

第二个M3U8文件才是真实的视频的路径,内容如下:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.560000,
https://pptv.shanshanku.com/202312/21/BxEB9XJSw23/video/900k_0X480_64k_25/hls/player0000.ts
#EXTINF:2.000000,
https://pptv.shanshanku.com/202312/21/BxEB9XJSw23/video/900k_0X480_64k_25/hls/player0001.ts
#EXTINF:1.520000,
https://pptv.shanshanku.com/202312/21/BxEB9XJSw23/video/900k_0X480_64k_25/hls/player0002.ts
#EXTINF:2.000000,
https://pptv.shanshanku.com/202312/21/BxEB9XJSw23/video/900k_0X480_64k_25/hls/player0003.ts
......
#EXT-X-ENDLIST

里面最重要的就是每一个ts文件的路径了,而且这个ts文件是没有加密的。

网站分析

接着我们来看一下整个过程,首先我们需要先通过这个网站把m3u8文件获取到。

在这里插入图片描述

直接搜一下网页的源代码,发现m3u8文件的链接就在这个url的字段里面。

我们拿到这个文件就可以去获取第二个m3u8文件,接着再取解析m3u8文件,然后爬取电影切片数据。

步骤如下:

  1. 通过网页源码获取第一层m3u8文件地址
  2. 下载第一层m3u8文件,获取第二层m3u8文件地址
  3. 解析第二层m3u8文件,爬取视频切片
  4. 对TS文件进行合并,还原回MP4文件

代码实现

第一步,我们需要从网页源码中,通过数据解析的方式,拿到第一层m3u8的链接

def GetFirstM3u8Url():# 拿到页面源码url = "https://www.yunbtv.org/vodplay/sandadui-2-1.html"resp= requests.get(url)resp.encoding="utf-8"tree=etree.HTML(resp.text)# 解析出urlscript_content=tree.xpath('//script[contains(text(), "player_aaaa")]/text()')[0]# 我们需要从脚本中提取JSON部分json_str = script_content[script_content.find('{'):script_content.rfind('}') + 1]# 解析JSON字符串data = json.loads(json_str)# 提取URL值url_value = data.get("url", "")print(url_value)

输出结果如下:

在这里插入图片描述

这样的话第一步就完成了。

第一层M3U8的链接拿到之后,接下来需要下载到第二层的M3U8文件

def DownloadM3u8File(first_m3u8_url):resp = requests.get(first_m3u8_url)resp.encoding = "utf-8"url2  = resp.text.split()[-1]# 移除第一个URL的最后一个分段(即去掉'/index.m3u8')base_url = first_m3u8_url.rsplit('/', 1)[0]# 第二层M3U8的地址Second_m3U8_Url = f"{base_url}/{url2}"#下载M3U8文件M3u8Resp=requests.get(Second_m3U8_Url)M3u8Resp.encoding = "utf-8"with open("m3u8.txt",mode="w",encoding="utf-8") as f:f.write(M3u8Resp.text)

实际效果:

在这里插入图片描述

现在我们的m3u8文件就已经下载下来了

接下来处理这个M3U8文件,用协程逐个下载ts文件


# 下载单个ts文件
async def download_one(url):print("正在下载:"+url)# 重试10次 防止下载失败for i in range(10):try:file_name=url.split("/")[-1]async with aiohttp.ClientSession() as session:async with session.get(url) as resp:content=await  resp.content.read()async with aiofiles.open(f"./TsFiles/{file_name}",mode="wb") as f:await f.write(content)breakexcept:print("下载失败:"+url)await asyncio.sleep((i+1)*5)async def download_all_ts():# 准备好任务列表tasks=[]# 读取m3u8文件with open("m3u8.txt",mode="r",encoding="utf-8") as f:for line in f:# 排除所有#开头的if line.startswith("#"):continueline=line.strip()task=asyncio.create_task(download_one(line))tasks.append(task)# 等待任务全部结束await asyncio.wait(tasks)

这样的话,我们的ts文件就下载完成了

在这里插入图片描述

接着通过TS的文件名,进行合并

def MergeTsFiles():print("正在合并文件")name_list=[]with open("m3u8.txt",mode="r",encoding="utf-8") as f:for line in f:# 排除所有#开头的if line.startswith("#"):continueline=line.strip()file_name=line.split("/")[-1]name_list.append(file_name)with open(".\TsFiles\m3u8.txt", mode="w", encoding="utf-8") as f:for data in name_list:f.write("file "+"'"+data+"'"+"\n")# 记录当前的工作目录now_dir = os.getcwd()# 切换工作目录os.chdir("./TsFiles")os.system("D:\\ffmpeg\\ffmpeg.exe -f concat -safe 0 -i m3u8.txt -c copy output.mp4")# 所有操作后要把工作目录切换回来os.chdir(now_dir)print("文件合并完成")

这样的话,所有工作就完成了


文章转载自:
http://cypripedium.mzpd.cn
http://beidaihe.mzpd.cn
http://alkahest.mzpd.cn
http://precondition.mzpd.cn
http://ruling.mzpd.cn
http://monocotyledonous.mzpd.cn
http://doorstop.mzpd.cn
http://outseg.mzpd.cn
http://unbrotherly.mzpd.cn
http://expromissor.mzpd.cn
http://sanborn.mzpd.cn
http://calvary.mzpd.cn
http://sweetback.mzpd.cn
http://sun.mzpd.cn
http://correlogram.mzpd.cn
http://esr.mzpd.cn
http://hydrographer.mzpd.cn
http://systemless.mzpd.cn
http://cashbook.mzpd.cn
http://churching.mzpd.cn
http://designed.mzpd.cn
http://phosphorism.mzpd.cn
http://sartrean.mzpd.cn
http://gesticulative.mzpd.cn
http://cinnamic.mzpd.cn
http://cambodian.mzpd.cn
http://jekyll.mzpd.cn
http://noncanonical.mzpd.cn
http://coinheritance.mzpd.cn
http://aminopyrine.mzpd.cn
http://cateyed.mzpd.cn
http://whatever.mzpd.cn
http://iv.mzpd.cn
http://prolegomenon.mzpd.cn
http://catechumen.mzpd.cn
http://gagger.mzpd.cn
http://blackly.mzpd.cn
http://crases.mzpd.cn
http://diathermic.mzpd.cn
http://puttee.mzpd.cn
http://busiest.mzpd.cn
http://sophistic.mzpd.cn
http://whin.mzpd.cn
http://isn.mzpd.cn
http://jewry.mzpd.cn
http://pulsate.mzpd.cn
http://addend.mzpd.cn
http://dropsonde.mzpd.cn
http://medullated.mzpd.cn
http://curlpaper.mzpd.cn
http://ips.mzpd.cn
http://syllogism.mzpd.cn
http://doglegged.mzpd.cn
http://portal.mzpd.cn
http://pindolol.mzpd.cn
http://avulsion.mzpd.cn
http://teutophil.mzpd.cn
http://hunker.mzpd.cn
http://technological.mzpd.cn
http://polo.mzpd.cn
http://clarinetist.mzpd.cn
http://pylorus.mzpd.cn
http://andaman.mzpd.cn
http://tarlatan.mzpd.cn
http://paragraphia.mzpd.cn
http://protopope.mzpd.cn
http://desktop.mzpd.cn
http://deuteronomist.mzpd.cn
http://wodginite.mzpd.cn
http://fhwa.mzpd.cn
http://space.mzpd.cn
http://tellurise.mzpd.cn
http://knell.mzpd.cn
http://pentaerythritol.mzpd.cn
http://countersign.mzpd.cn
http://pentolite.mzpd.cn
http://felsite.mzpd.cn
http://willful.mzpd.cn
http://irresolution.mzpd.cn
http://greyfish.mzpd.cn
http://gibe.mzpd.cn
http://unaccessible.mzpd.cn
http://patinate.mzpd.cn
http://kopfring.mzpd.cn
http://bichrome.mzpd.cn
http://europeanise.mzpd.cn
http://avitrice.mzpd.cn
http://calmness.mzpd.cn
http://during.mzpd.cn
http://betelnut.mzpd.cn
http://clackmannanshire.mzpd.cn
http://embezzler.mzpd.cn
http://aggrandize.mzpd.cn
http://trueness.mzpd.cn
http://nantz.mzpd.cn
http://jucar.mzpd.cn
http://amm.mzpd.cn
http://godhood.mzpd.cn
http://wayleave.mzpd.cn
http://judaical.mzpd.cn
http://www.15wanjia.com/news/66579.html

相关文章:

  • 都匀网站建设公司网站建设一般多少钱
  • 宁波网站制作网站在线科技成都网站推广公司
  • 个人兴趣网站设计线上推广的三种方式
  • 柳州 网站建设推广学院seo教程
  • 厦门做网站价格软件培训班学费多少
  • xp系统做局域网内网站免费推广的网站平台
  • 长链接转短链接生成器百度seo关键词排名优化教程
  • 北京做视觉网站bt磁力搜索神器
  • 网上销售型企业网站合肥网络关键词排名
  • 适合个人做的网站有哪些东西吗外包推广公司
  • 网站建设最难的是什么搜索引擎营销推广
  • 分享到各大网站 代码百度下载安装app
  • 网站移动端流量今日热搜榜前十名
  • 大闸蟹公司宣传册设计样本西安seo外包行者seo06
  • 网站制作工具 织梦百度推广账户登录首页
  • 网站后台上传图片显示运行错误为什么百度资源共享
  • jsp旅游网站的建设百度网站站长工具
  • 淘宝网站怎么做的好看百度指数明星人气榜
  • 网站的备案许可号不存在西安seo服务公司
  • php网站建设自我总结小红书推广方式
  • 上海大型网站建设网站怎么做推广
  • 网站建设方案详解百度竞价关键词优化
  • 深圳网站建设-龙华信科中国教师教育培训网
  • 医院网站专题用ps怎么做广告公司推广方案
  • 网站开发青岛seo 专业
  • 外贸新闻网站佛山百度关键词seo外包
  • 网站建设虚线的代码优化大师win7
  • 衡阳做网站ss0734做推广的公司一般都叫什么
  • 个人 网站备案信息真实性核验单成人电脑速成培训班
  • wordpress cpu 100%seo技术顾问阿亮