自己开发的在线视频下载工具,基于Java多线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了自己开发的在线视频下载工具,基于Java多线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2474字,纯文字阅读大概需要4分钟。
内容图文
![自己开发的在线视频下载工具,基于Java多线程](/upload/InfoBanner/zyjiaocheng/854/b33b4ca219734dffa314f71316d55c9f.jpg)
比如这个在线视频:
我们可以正常播放,但是找不到下载按钮。
打开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的原创文章,请关注公众号"汪子熙":
内容总结
以上是互联网集市为您收集整理的自己开发的在线视频下载工具,基于Java多线程全部内容,希望文章能够帮你解决自己开发的在线视频下载工具,基于Java多线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。