前言
之前看到一些视频类APP可以播放VIP或者付费视频,当时很奇怪怎么做到的。只能确定一点,APP的作者肯定不是用的自己的服务器作为播放源。后来看到一些课程,才逐步明白了其中的一些道理。因此,记录一下这一历程。
思考
问题一、为什么不能直接使用<video src="xxx.mp4"></video>
标签?
大部分懂点HTML的都会认为要想在网页上播放视频,肯定会优先直接使用video
标签。但是大部分视频网站会直接这么用吗?
答案是不会,一部电影2个G,要让用户直接下载完才可以观看吗?用户肯定会骂街。此处的视频播放指在线视频,主动下载或缓存的不在讨论范围内。这时候有些人会想到流媒体,这的确是一个方向。
问题二、一般的视频网站是怎么来优化用户体验的?
用户上传视频后会有以下流程进行处理:
- 转码。将视频按照不同的分辨率处理,比如360P、720、1080P和2K等等,满足在不同网络环境下的加载速度
- 切片。比如把1小时的视频按分钟拆分为60份,用户在拖动进度条的时候可以快速加载,只需要加载三五个切片就可以了。快速加载,充分利用带宽,减少服务器压力。
需要文件记录:
- 视频播放顺序
- 视频存放路径
知识点: M3U文件。1. 文件是否有加密 2. 文件地址
视频播放顺序则是从上到下。
M3U、text、json => 文本
文件读写
问题三、抓取视频的套路?
基本步骤;
- 找到m3u8文件
- 通过m3u8下载ts文件
- 通过手段把ts文件合并为一个视频文件
实践
- 拿到页面源代码
- 从源代码提前m3u8文件的URL
- 下载m3u8
- 读取m3u8文件,下载视频
- 合并视频
以91kanju.com为例
首先打开目标视频的URL,查看源代码,然后从源代码里找到带有m3u8
的部分
下载m3u8文件,获取其中内容。
代码示例:
1 | import requests |
最后一步合并视频的方式就各显神通吧。
总结
事实证明和最初预想的完全不一样。