java 解析m3u8的实例_使用java线程池批量下载m3u8。合并mp4.

使用java线程池批量下载m3u8合并mp4.

看了线程池的demo,然后就想下载文件试试。

代码未必规范,多多建议。

大家可以自行修改,满足自己的需求。

还需要深入学习一下线程池。

给俺个星星⭐,可好 = =

m3u8 链接下载

下载m3u8文件,找到内部的链接

下载内部的m3u8,提取所有的ts链接

线程池批量下载。

当前针对于 ok、zuida 资源 进行下载测试。

运行步骤:

将ffmpeg 和 当前代码放在同一目录

更换M3U8_URL的地址(下载啥就放啥)

文件路径

然后直接运行就ok 了。

M3u8Download.java

package cn.lacknb.test.threaddownload;

import java.io.*;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

import java.util.concurrent.*;

/**

* @description: 下载 ok 资源网、最大资源网的  m3u8连接

* home.php?mod=space&uid=686208 gitsilence

* home.php?mod=space&uid=1248337 1.0

* home.php?mod=space&uid=686237 2020/12/11 14:59

*/

public class M3u8Download {

/*

* m3u8地址

* */

private static final String M3U8_URL = "https://yuledy.helanzuida.com/20201204/15904_c1fcf83a/index.m3u8";

/*

* 视频的下载路径

* */

public static final String DOWNLOAD_PATH = "G:\\work\\video\\";

/*

* m3u8文件的路径

* */

private static final String FILE_PATH = DOWNLOAD_PATH + "tmp.m3u8";

/*

* 临时文件的文件名

* */

private static final String TMP_NAME = "tmp.txt";

public static void main(String[] args) {

try {

// 创建父级文件夹

createParentDirs();

// 下载外层m3u8 url

downloadFile(M3U8_URL);

String content = readFile(FILE_PATH);

System.out.println(content);

String realUrl = M3U8_URL.split("index")[0] + content;

System.out.println("realUrl: " + realUrl);

// 下载内层m3u8 url

downloadFile(realUrl);

content = readFile(FILE_PATH);

// 获取所有的ts, 并合并 url

List urls = mergeUrl(content, realUrl);

// 生成tmp.txt, 用于合并视频

createMergeVideoTmp(content);

//            urls.forEach(System.out::println);

ExecutorService executorService = Executors.newFixedThreadPool(12);

urls.forEach( url -> {

executorService.execute(new TsDownload(url));

});

//            // 关闭线程池,等待任务结束。

executorService.shutdown();

while (!executorService.isTerminated()) {

System.out.println("任务下载中");

try {

TimeUnit.SECONDS.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

// 任务下载完毕后

mergeVideo(content, UUID.randomUUID().toString());

// 删除ts文件

deleteTsFile(content);

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* corePoolSize:核心池的大小;当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中 =10

* maximumPoolSize:线程池最大线程数 &#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值