简单总结在线视频下载方式

在此笔者粗略地将视频分为点播式和直播式,下面主要介绍点播视频的下载方式,而且是限定在最主流的http请求方式。

1、浏览器调试

最简单查看一个视频播放链接的方式就是利用浏览器的调试页面或者叫审查页面的网络来查看,有些浏览器会限制调试,后面再详细聊怎么跳过。

这里就说一下具体的下载步骤,在网页上遇到想要下载的视频,直接在空白处点击鼠标右键,然后点击【检查】或者【审查元素】。谷歌系浏览器可以使用快捷键F12来打开调试页面。

进入检查元素界面之后,点击【Network】,点击浏览器的刷新页面,让数据重新获取。现在可以看到一个个请求了,大部分时css文件,js文件以及图片的请求,我们要找的视频链接

就会隐藏在这一堆。

2、简单mp4

目前很大一部分视频还是简单的.mp4,早期的还有flv(现在还有用它做直播流的)。我们利用浏览器的搜索功能,直接搜索.mp4,或者.flv.如果能出来则直接把链接复制出来,

直接贴在浏览器的访问下能不能直接播放,以虎扑视频为例子,虎扑视频还有个更简单的下载方式直接点击右下角的三个点,点击下载即可,

这是最简单的一种方式,

3、请求头防盗链

稍微做了点防范工作的会对视频的请求作防盗链,比如微博视频,随便找个微博视频贴到浏览器播放发现播放不了,并且会提示403,针对微博视频需要在请求时加上微博的referer,直接使用postman等api工具对

一般用户稍有难度,推荐使用视频下载器,上工具,比如,使用蝌蚪视频下载器,输入链接,输入请求头,这个请求头可以在微博视频的请求里面找到,会出即可

4、视频切片

目前主流的视频请求不会一下子把整个视频完整的请求回来,而是会分成多个片段,在合适的时间请求几个分片,这样的好处是时可以数据分片后每个返回体小了,传输更可靠,可以断点续传,可以进行小范围重传,

在播放视频时还能做到跳播。实现方式在请求头加上range字段,http返回码是206。对于此类视频的多线程现在也是利用了range字段来实现的.

5、音视频分离

b站使用的的视频协议做了一个改进,就是将将音视频进行分离,将视频和音频单独传输,所以下载b站的视频需要将音频和视频分别单独下载下来,再使用ffmpeg等工具进行合并。

6、苹果hls协议

2009年苹果推出了hls流媒体传输协议,它通过将整个媒体文件划分为小的、独立的文件块,并使用HTTP协议进行传输,实现了实时流媒体的分发,最常见的形式则是使用一个m3u8文件记录

所有的视频片段(直播流不是,直播流只是部分分片,需要隔一段时间向服务器请求新的m3u8文件),比如acfun使用m3u8协议传输视频,里面的每一个extinfo段都是一个视频片段,常见以ts为后缀名,

也可能以mp4为后缀名,或者其他的.m3u8文件也可能记录的是多种播放质量的m3u8源,遇到这种需要选择其中的一个链接拿到最终的m3u8文件。m3u8文件常见以m3u8或者m3u为后缀名,也可能没有后缀名。

7、视频普通加密

hls协议支持通用的aes-128解密,也支持更加复杂的自定义加密,以后可以细说,aes-128加密是通用的可以简单处理,但是自定义加密就需要具体分析,搞破解是个麻烦事儿。

从上面的讨论可知,hls协议的视频流的下载需要将m3u8文件里面的视频片段全部下载下来,有xmap头部的需要拼接头部,有加密的需要解密,然后将所有的ts片段进行拼接,这个拼接需要借助ffmpeg等工具进行处理。

ffmpeg很轻大,它本身就支持下载及合并hls协议的视频,只要不是私有加密方式,目前来看它都能胜任,当前前提是播放源在当前环境下可以播放。

和普通的mp4请求一样,ts片段也可能做了防盗链的处理,这种情况下使用ffmpeg下载需要把请求头加进去,为了简单,蝌蚪视频下载器也支持m3u8下载,和下载mp4文件一样,输入m3u8链接和请求头即可下载视频。

8、视频drm保护

事实上我上面提到的只是m3u8的一部分,m3u8还支持drm,这种解密难度极高,暂且不提,可以参考优酷的播放源,阿里有私有的hls加密协议,参考程序员客栈的部分视频。

还有就是niconicovideo视频里面的片段比较不一般,鄙人实力一般,暂时找不到将它们的片段合并的方法,如有解决方案,烦请教教我。

9、dash协议

dash流媒体是由MPEG组织于2012发布,该协议的目标是提供一种能够适应网络状况和终端设备特性的动态自适应流媒体传输解决方案。该方案和hls有点相似,但功能更加丰富,支持更多drm协议,支持音视频分离,同时也更加复杂了,该协议也需要一个描述文件将视频的所有片段记录下来,但是有区别,hls协议必须将所有片段的全限定名或部分限定名记录下来,dash可以划定一个范围,

比如说一段视频一分钟,三秒钟一个片段,每个片段使用通过一个模板和一个片段偏移就能计算出这个片段的全限定名,这样在一个长视频里面就可以少占用很多文本篇幅。具体的描述和计算以后有时间可以详细聊。

dash协议以xml格式记录所有的播放质量及音视频,文件一般以mpd为后缀名,不像hls需要支持选择播放质量还需要额外使用一个m3u8文件,dash一个文件就涵盖了所有。但是这样也更复杂了,特别是dash里面的具体对片段的描述有多种形式,

甚是复杂。

10、dash下载方式

上面的hls差不太多,dash也是需要将所有片段下载下来,然后进行片段合并。如果遇到drm加密的话就放弃吧,麻烦。目前见到西瓜和油管会使用到。总体来说使用dash的相对hls还是少,不是一个量级,

在注重版权的领域的采用率会高些。

蝌蚪视频下载器目前也支持dash视频下载,但是遇到加密就不行了。