自己开发的在线视频下载工具,基于Java多线程

比如这个在线视频:

我们可以正常播放,但是找不到下载按钮。

打开Chrome开发者工具,在Network标签页里能看到很多网络传输请求:

随便看一个请求的响应,发现类型为video,大小为500多k。因此,这个在线视频被拆分成了若干500多k的小片段,然后通过浏览器下载到本地进行播放。

这个片段的url:

http://d2vvqvds83fsd.cloudfront.net/vin02/vsmedia/_definst_/smil:event/18/36/06/3/rt/1/resources/180919_PID_Intelligent_Enterprise_Gruenewald_720p-5F92.smil/media_b433000_10.ts

那么这个片段一共有多少个片段呢?在所有片段开始下载之前,有这样一个请求:chunklist即是视频片段的清单。

通过这个清单我们知道这个视频一共分为55个片段,序号从0开始。

了解了原理,我们就可以开始编程了。

1. 首先实现视频片段的下载逻辑,新建一个类,实现Runnable接口。

2. 使用JDK自带的多线程库 ExecutorService多线程下载这些片段。ExecutorService实际是一个线程池。第15行可以指定线程池里工作线程(Working thread)的个数。

private void download(){

URL task = null;

String path = DownloadLauncher.LOCALPATH + this.mIndex +

DownloadLauncher.POSTFIX;

String url = this.mTask;

try {

task = new URL(url);

DataInputStream dataInputStream = new DataInputStream(task.openStream());

FileOutputStream fileOutputStream = new FileOutputStream(new File(path));

ByteArrayOutputStream output = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int length;

while ((length = dataInputStream.read(buffer)) > 0) {

output.write(buffer, 0, length);

}

fileOutputStream.write(output.toByteArray());

dataInputStream.close();

fileOutputStream.close();

System.out.println("File: " + this.mIndex + " downloaded ok");

}

catch (MalformedURLException e) {

e.printStackTrace();

}

catch (IOException e) {

e.printStackTrace();

}

}

下载完成后,能在Eclipse的console控制台看到这些输出:

下载成功的视频片段:

3. Merger负责把这些片段合并成一个大文件。

private static void run() throws IOException{

FileInputStream in = null;

String destFile = DownloadLauncher.LOCALPATH +

DownloadLauncher.MERGED;

FileOutputStream out = new FileOutputStream(destFile,true);

for( int i = 0; i <= DownloadLauncher.LAST; i++){

byte[] buf = new byte[1024];

int len = 0;

String sourceFile = DownloadLauncher.LOCALPATH + i +

DownloadLauncher.POSTFIX;

in = new FileInputStream(sourceFile);

while( (len = in.read(buf)) != -1 ){

out.write(buf,0,len);

}

}

out.close();

}

public static void main(String[] args) {

try {

run();

} catch (IOException e) {

e.printStackTrace();

}

System.out.println("Merged ok!");

}

完整的代码在我的github上:

https://github.com/i042416/JavaTwoPlusTwoEquals5/tree/master/src/flick

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/9821554.html

时间: 2024-10-28 15:08:03

自己开发的在线视频下载工具,基于Java多线程的相关文章

WebVideoHunter 6 for Mac 6.0.1 中文共享版 – 网页在线视频下载工具

下载地址:风云社区 从YouTube,Vimeo,DailyMotion,VEVO等人处查找和下载视频只需几秒钟.WebVideoHunter 下载的视频比实时播放快15倍,并支持同步下载. WebVideoHunter具有内置的搜索和预览功能. “可通过网址获取视频”功能. WebVideoHunter为YouTube和DailyMotion视频保留字幕. 您无需安装任何其他播放器或转换器.下载的视频将自动转换为可在Mac上查看的格式.或者您可以选择适当的选项,YouTube视频将转换为mp3

快手视频怎么下载和保存?使用快手视频下载工具

本文转载自:怎么下载和保存快手app上的短视频? 快手上面的搞笑视频已经越来越让人无法自拔了,快手视频和app被全球超过4亿的用户使用,2017年3月23日,快手完成了腾讯领投3.5亿美元的融资.当你快手app看到自己特别喜欢的视频或者想把上面的视频处理下再发布到其他平台时,应该怎么把快手app上的视频下载下来? v.atob.site网站提供的快手视频下载和保存工具可以自动对快手视频的链接进行转换,具有在线下载并保存快手app上的视频到电脑或手机上的功能,你只需要通过以下几个简单步骤就可以轻松

命令行视频下载工具you-get和youtube-dl

you-get和youtube-dl都是基于python的命令行媒体文件下载工具,完全开源免费跨平台.用户只需使用简单命令并提供在线视频的网页地址即可让程序自动进行嗅探.下载.合并.命名和清理,最终得到已经命名的完整视频文件.两者搭配使用几乎可以下载所有主流视频网站的视频及有关资源,配合本地播放器还可直接播放在线视频,彻底避免广告和浏览器插件的困扰. 在安装使用之前需要进行以下部署工作: 安装python3和pip 安装媒体处理工具FFmpeg you-get 官网:https://you-ge

视频下载工具“硕鼠”与遨游浏览器的比拼(图文)

前两天的一次下载视频经历,发现视频下载也有很多的门道,这不今天就来个视频下载软件大比拼,将常用的两个视频下载软件拉出来溜溜. 1.硕鼠下载视频使用说明 先打开硕鼠的网址 www.flvcd.com. 这不上面列出了硕鼠支持的视频下载网站,现在支持88个,够不够多? 把要下载的网址粘贴到文本框中,开始GO! 经过网站的解析,提示用硕鼠下载. 两种下载方式,如果没装客户端,选第二个. 提示下载一个exe软件,842KB. 下载完后,有个带眼睛的小老鼠,点打开运行. 打开硕鼠的一个软件界面,开始. 上

命令行视频下载工具youtube-dl

1.查看目标详情 youtube-dl -F https://www.bilibili.com/video/av6731067/?p=1 2下载视频到当前文件夹,可以选择清晰度 youtube-dl -f 格式号 url(提前转至目标目录cd XX) 如:youtube-dl -f 2 http://www.bilibili.com/video/av3509380/ 3.不光可以下载bilibili,从名字看就知道本来是用来下载YouTube视频的 如果你在国内,需要下载youtube 的视频,

安卓TV开发(十) 智能电视开发之在线视频直播

转载注明出处:http://blog.csdn.net/sk719887916/article/details/46582987 从<安卓TV开发(八) 移动智能终端多媒体之在线加载网页视频源> 中我总结了怎么去解析一个网页,获取里面数据实现展现,如何去播放视频呢,今天就给大家简单介绍下比较常用视频开源框架vitamio,  项目sdk地址:https://www.vitamio.org/en/  .              解压vitamio sdk 可以看到有个InitActivity的

基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)

近来在学习Java NIO网络开发知识,写了一个基于Java NIO的多人在线聊天工具练练手.源码公开在Coding上: https://coding.net/u/hust_wsh/p/MyChat/git ,开发环境是Ubuntu14.04+Eclipse Mars+JDK1.8. 要想编写一个基于Java NIO的多人在线聊天工具,我总结需要以下几方面的地址:客户端服务器模型,Java NIO中的Selector,SocketChannel,ByteBuffer,Collections以及序

Mac如何下载爱奇艺、腾讯视频、B站的在线视频?Downie超简单下载教程

Mac如何下载爱奇艺.腾讯视频.B站的在线视频?小编今天推荐的就是Downie for Mac,下载在线视频超级简单,Downie是一款非常优秀的视频下载软件,这款软件以超级简单,超级强大的视频下载能力而获得众多用户的关注与喜爱.那么,作为一款视频下载工具,如何成功下载喜欢的视频呢?接下来,小编将详细的为你一一介绍Downie for Mac下载视频教程! 1.打开Downie for Mac软件.2.打开视频所在的网页.3.点击鼠标右键选择复制视频地址.4.在Downie软件界面粘贴,软件开始

分享一下 今天用到的 如何下载在线视频(如cntv.com)

1.第1种简洁的方法(推荐) centv.cn 最简单最快速的办法就是安装一个”百度工具栏“ 第一步:下载百度工具栏  重新打开IE  输入网址 第二步: 输入网址  点击音视频   保存 OK !! 2.第2种简洁的方法 用“维棠FLV视频下载”工具直接下载 点击新建→贴入视频地址→确定,自动分析下载其它设置保持默认即可 2.第2种简洁的方法 打开“硕鼠官网”    输入视频网址,跟着点三步就可以了  . 或者下载硕鼠工具 输入网址  一步就可以下载 自行选择 第1步: 第2步: 第3步: