天天看点

java下载m3u8视频,解密并合并ts(一)问题分析优点缺点准备

下一篇 java下载m3u8视频,解密并合并ts(二)——获取m3u8链接

问题

由于在观看电影时,发现视频缓冲太慢,特别是一些人气不是很高的网站,每跳一次视频进度都需要加载几十秒还不一定成功。所以,我打算写一个java程序,来下载这些视频。

分析

视频播放地址必须时m3u8链接。当播放视频的时候,如果你打开了浏览器的开发者工具的话,就会发现有许许多多的ts片段。这些ts片段也就是加载的视频片段。我们要做的就是下载这些ts片段,然后合并。

当你打开m3u8链接的时候,会发现m3u8实际上是一个可以用文本打开的一个文件,它包含了一些和视频相关的标签。通过这些标签,我们可以获取我们要下载的ts片段。

现在大部分网站都对ts片段进行加密,所以我们首先要从m3u8文件拿到ts密钥。然后再进行下载。当然有的ts片段是没有被加密的。

每一个解密后ts片段都是可以单独播放的,所以合并的时候我们就直接流合并就行了,无需做任何处理。合并的文件我们就用mp4.

优点

  1. 可以识别m3u8获取的ts片段是否需要解密
  2. 可以自定义下载线程数,达到多线程快速下载
  3. 可以自定义ts片段下载失败重试次数,很难下载失败

缺点

  1. 当重试次数耗尽时或者部分片段解密失败时,不能够再次重新下载失败的ts片段。但是不影响视频后期合并,导致观看合并完成的视频的时候,播放不衔接;
  2. 线程越多,占用内存越高。当线程数为100时,下载400M视频需要700M内存,而10个线程则需要70M左右内存。当然线程越多,下载越快。这个问题可以自己看代码优化。不是不可以解决的。

准备

  1. JDK:1.8
  2. 开发环境:IntelliJ IDEA
  3. 用于解密的jar包:bcprov-jdk16-139.jar

    传送门:点击下载

  4. 了解一些m3u8标签作用

    https://www.cnblogs.com/shakin/p/3870442.html

git地址:https://github.com/qq494257084/m3u8Download

下一篇 java下载m3u8视频,解密并合并ts(二)——获取m3u8链接