Android在家免费看大片神器开发技术详解(M3U8VideoDownload)

https://blog.csdn.net/jiangwei0910410003/article/details/89764025

一、程序猿的情怀
最近妇联4上映了,但是电影票真的是被炒到史无前例的高,而我却没钱去看,但是我又是个假的漫威粉丝,所以就在家贡献一张免费的电影票表达内心的歉意!我们知道现在其实很多有很多私密网站都可以提前看到想看的电影,比如关注一些微信公众号,直接在后台输入电影名称就有观看链接了,当然这里为了安全和对电影制作者的极度尊重,不公开操作方法,因为我们要尊重每一部电影的制作不易和版权意识,一定要去电影院看正片,不要去看这些盗版,当然也要坚决抵制盗版。

 

二、M3U8视频格式
这篇文章不是教你怎么破解正版视频,而是开发一个可以下载M3U8格式的视频到本地,当然现在应用市场中也有这个应用,但是都没有开源或者技术详解,首先我们来了解一下m3u8这个视频的格式,这个格式大家可能都听过,M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。这个是为了在线播放流视频诞生的,而这种视频最大的特点就是把原来的视频进行切片,所谓切片就是把一个完整的视频比如.mp4格式的切成多段.ts格式视频,然后生成一个对应切片片段视频的索引文件,这个索引文件就是m3u8:

 

看到这个文件其实就是个索引文件,当然ts切片视频文件和m3u8文件放在同一目录下,这个文件还有其他字段的详解,大家可以去网上详细查看,这里不细说了。

 

三、分析页面信息
简单介绍完了m3u8格式之后,我们开始进入正题了,首先我无意中关注了一个电影公众号,然后搜在后台搜索了妇联4关键字,就给我返回了一个播放地址:

 

然后我就用这个地址开始观看了,但是有两个问题就是首先这种大片最好还是需要在家里电视大屏幕上观看,其次最好是下载到本地,不然看一段卡一段,因为没钱所以家里的网络也是很慢的,所以最后还是决定把电影下载到本地,这时候就开始操作了,在Chrome中打开网页找到视频的地址:

 

我们一般查看网页信息直接点击"检查"即可:

 

点击播放地址,然后继续点击"检查"逐个页面中的元素,看到播放器这一个元素之后发现了视频地址是个m3u8格式的,这个一点不惊讶哈,所以我们就需要下载m3u8地址的视频到本地了,这个就是本文的重点了,这个下载方式网上统一的答案就是ffmpeg,关于ffmpeg这个炸天的开关工具毋庸置疑,现在很多视频编辑和播放等应用都离不开它,他可以编解码视频,编辑操作视频等非常方便,当然下载m3u8格式也不在话下,命令非常简单:ffmpeg -i [m3u8地址] output.mp4

 

当然这里的m3u8地址可以是网络流地址,可以是本地m3u8文件路径,这样就开始下载了。当然我们需要在网上找到Windows中或者Mac中安装ffmpeg工具,安装方式也是非常简单的。就这样下载到本地了,然后拷贝到电视中可以愉快的看电视了啦。

 

四、开发自动下载视频工具
到这里其实我们已经可以看到我们想看的电影了,但是这个不是我们技术的终点,因为如果这么简单我就不会写这篇文章了,所以我们接下来要做的是如何在手机中下载m3u8格式的视频,因为有这种需求就是在每逢放假坐高铁的时候,都想预先下载好电影在车上看,所以这时候就需要一个手机中下载m3u8格式的视频应用了,而且只需要输入视频播放地址,这个地址就是从上面关注的公众号后台获取到的,然后直接下载即可到手机中。所以从这个过程来看,我们需要做两件事:

第一件事:使用jsoup库解析页面信息自动获取到视频地址

第二件事:下载视频地址到本地,一般是m3u8格式,所以手机中需要集成一个ffmpeg库

好了这两件事其实不难,第一件事就是解析网页信息,这个毋庸置疑就是用jsoup库即可,但是前提是需要分析页面信息,这个其实在之前我们分析过了:

 

首先是从后台获取的视频详情地址,然后找到播放地址,这里主要是通过class类型查找元素信息,这里是"stui-content-playlist clearfix" 然后是href地址即可,对应的jsoup代码也很简单:

 

这里的代码简洁明了,这里顺便把视频名页保存下来为了保存到本地的文件名用,有了这个播放地址继续往下看:

 

然后继续分析这个播放详情页面元素,找到了class="stui-player"即可:

 

然后就成功解析到了视频地址,那么第一件事就完成了,这个Jsoup库太强大了一定要记住哈!

 

第二件事就是如何在手机中下载m3u8格式了,其实到这里我们可以不用自己写一个,网上有个现成的,可以直接使用,但是这个不是本文的意图,我每写一篇文章都是些想给大家传递更多的知识,是过程导向而不是结果导向,所以这个也是我一直强调不要上来就问app下载地址在哪?如果给你了这个过程技术你就会忽略了。授之于鱼不如授之以渔!其实我在上面PC端用了ffmpeg下载了视频,在Android中也有很多ffmpeg库,这个别人已经编译好了直接拿过来用就好了,去github上搜索ffmpeg一大堆库,都差不多,一般是拼接ffmpeg命令然后运行当然也有毁掉包括成功、失败、开始、进度。但是这里的进度是message形式的,所以需要重新解析进度而且很费劲,但是我们最好有个进度展示在UI页面上方便查看。所以这时候我们就需要先去下载m3u8格式文件到本地然后在用ffmpeg合成本地的m3u8到mp4格式,因为github上有一个下载m3u8的库,这个库已经封装好了下载进度,暂停开始多线程下载等功能。这个就不多解释了,关于这两个github上可以找到的库,如果有其他问题可以去编码美丽小密圈继续交流:

 

这里我已经在封装了一层把FFMpeg+HtmlParse+M3u8Download,当然这里肯定有播放功能和通知栏提醒等,这个工程中很多库都非常好用非常好的一个案例,为了安全就不公开这个代码了,大家需要技术学习可以去编码美丽小密圈查看即可。

 

这里最后将下载好的m3u8格式的文件合并成mp4文件:

 

看到这里下载好了所有的视频切片文件,看到.ts也是一种视频格式,其实是可以直接观看的,但是都是一段一段的,如何把这些一段一段视频合成一个完整的mp4就需要依靠m3u8这个视频索引文件了。当然ffmpeg是支持把本地的m3u8格式合成一个mp4格式的视频的,只需要这些视频片段和m3u8放在一个目录下即可。

 

到这里我们就完成了一个简单的视频下载应用,只需要输入视频页面即可,自动解析出m3u8视频地址,然后开始下载最后到合成本地mp4文件,整个过程一气呵成,不用关心观看视频卡顿问题了。

 

下载后的视频也是非常高清还有字幕功能:

 

这样就可以愉快的观看了:

 

到这里我们就开发完了这个看片神器功能,但是这个工具还不是很完善,就需要各位同学后期完善啦。

 

五、工具不足和技术总结
这个工具还有很多功能需要优化,比如可以支持直接输入一个m3u8地址视频然后直接下载,其实就是在加个输入框入口而已,省略了自动解析m3u8格式地址功能,因为有的时候我们可以通过一定方式直接拿到视频的m3u8地址格式,还有这个工具我没用加上在线播放视频功能,其实我们可以加个播放器支持在线播放m3u8格式,一遍下载一遍观看也是不错的,这个只要去github上找一个在线播放m3u8流视频播放器库即可。当然看到上面的工具页面,其实缺少了一个文件大小和已经下载大小的功能,这个需要解决一些bug,因为精力问题我就没继续往下研究了。这些不完善的功能都需要大家后期优化了。

看完本文之后,其实我们可以了解到这些知识点,而这些知识点也是非常重要的:

第一、了解到了在线流视频m3u8的格式信息

 

其实这张流程图大致的解释了现在视频网站的工作原理,后台利用工具进行视频切片,然后用户使用设备点播流视频,一遍播放一遍下载下一个视频切片非常方便。

第二、我们知道现在解析页面信息肯定用到的是Jsoup库,而我们经常会写一些工具需要去自动解析页面信息,这时候大家可以利用这个库即可。

第三、我们了解到了M3U8文件格式下载功能,其实底层还是直接下载一个文件而已,只是先现在m3u8文件,然后解析在把每个视频片段下载下来即可,没什么玄乎的功能,同时也了解到了一个强大的视频库ffmpeg了
---------------------
作者:尼古拉斯_赵四
来源:CSDN
原文:https://blog.csdn.net/jiangwei0910410003/article/details/89764025
版权声明:本文为博主原创文章,转载请附上博文链接!

 

相关推荐

网友评论(0)