Code Monkey home page Code Monkey logo

m3u8download's People

Contributors

qq494257084 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

m3u8download's Issues

单例模式模式下,不同的下载链接只下载第一个链接

参考如下代码:
` downloadVideoButton.addActionListener(new ActionListener() {
@OverRide
public void actionPerformed(ActionEvent actionEvent) {

            int index = list.getSelectedIndex();
            String name = nameList.get(index);

            String html = "https://" + nameListURL.get(index);
            System.out.println(html);

            String html1 = GetContent.getHtml(html);

            String videoUrl = GetContent.getVideoUrl(html1);
            System.out.println(videoUrl);

            File file = new File(name);
            if (!file.exists()) {
                file.mkdir();
            }
            String filePath = file.getAbsolutePath();

            M3u8DownloadFactory.M3u8Download m3u8Download = M3u8DownloadFactory.getInstance(videoUrl);
            m3u8Download.setDir(filePath);
            m3u8Download.setFileName(name);
            m3u8Download.setThreadCount(100);
            m3u8Download.setRetryCount(20);
            m3u8Download.setTimeoutMillisecond(10000L);
            m3u8Download.setLogLevel(Constant.DEBUG);
            m3u8Download.setInterval(500L);
            m3u8Download.addListener(new DownloadListener() {
                @Override
                public void start() {
                    System.out.println("开始下载!");
                    progressBar.setValue(0);
                }

                @Override
                public void process(String downloadUrl, int finished, int sum, float percent) {
                    System.out.println("下载网址:" + downloadUrl + "\t已下载" + finished + "个\t一共" + sum + "个\t已完成" + percent + "%");
                    progressBar.setValue((int) percent);
                }

                @Override
                public void speed(String speedPerSecond) {
                    System.out.println("下载速度:" + speedPerSecond);
                }

                @Override
                public void end() {
                    System.out.println("下载完毕");
                    progressBar.setString("Video download completed!");
                }
            });
            m3u8Download.start();
        }
    });`

改变 list 的值,每次点击 downloadVideoButton 应该产生不同的 videoUrl , 但是每次下载都是第一个 videoUrl (软件不关闭情况下)。

后来看到了 工厂类的 getInstance() 方法:
public static M3u8Download getInstance(String downloadUrl) { if (m3u8Download == null) { synchronized (M3u8Download.class) { if (m3u8Download == null) m3u8Download = new M3u8Download(downloadUrl); } } return m3u8Download; }

当第二次点击 downloadVideoButton 时,m3u8Download 不为null 直接 return 了, 所以还是第一个的 videoUrl, 这就导致了每次下载只下载第一个链接。
建议不要把 downloadUrl 放在getInstance()参数里,增加 set get 方法。

视频使用暴风影音也无法播放

image

我把如上那密钥的路径注释掉了,因为密钥获取失败,key不存在; 合出来的文件打不开,是因为密钥的问题吗,m3u8里的文件使用了AES-128对称加密算法。

地址:https://mv.aura-el.com/0434af755a444f738795823e1f61324d/NTdiMThhZWEtMmQ0OS00YmNmLThhYzktMjUwOWYwYzRhN2U1L2pqL2R5QU9CaFZCTmJnYjdsWjc4NnBneXZhZ29zbm5BQUFBQUFBQUFBQmVwdHcxWDVPQzVrK1NybHNaREdZSlJ0cVlMWE9XSStkYlRhRnl0NlFUSzV4b2tOQ2J4ZXh1

这是获取密钥的地址,我看原页面也没有访问这个地址,所以就注释掉了。

How to use header?

How to download a video with request headers? Is there a way to headers for download request?

循环调用 线程出现问题

当我尝试循环调用的时候 出现了错误信息

下载网址:********* 已下载73个 一共34个 已完成214.71%

` public static void M3u8DownLoad(String m3U8URL,String path,String videoName){
M3u8DownloadFactory.M3u8Download m3u8Download = M3u8DownloadFactory.getInstance(m3U8URL);
//设置生成目录
m3u8Download.setDir(path);
//设置视频名称
m3u8Download.setFileName(videoName);
//设置线程数
m3u8Download.setThreadCount(100);
//设置重试次数
m3u8Download.setRetryCount(100);
//设置连接超时时间(单位:毫秒)
m3u8Download.setTimeoutMillisecond(10000L);
/*
设置日志级别
可选值:NONE INFO DEBUG ERROR
/
m3u8Download.setLogLevel(Constant.INFO);
//设置监听器间隔(单位:毫秒)
m3u8Download.setInterval(500L);
//添加额外请求头
/
Map<String, Object> headersMap = new HashMap<>();
headersMap.put("Content-Type", "text/html;charset=utf-8");
m3u8Download.addRequestHeaderMap(headersMap);*/
//添加监听器
m3u8Download.addListener(new DownloadListener() {
@OverRide
public void start() {
System.out.println("开始下载!");
}

        @Override
        public void process(String downloadUrl, int finished, int sum, float percent) {
            System.out.println("下载网址:" + downloadUrl + "\t已下载" + finished + "个\t一共" + sum + "个\t已完成" + percent + "%");
        }

        @Override
        public void speed(String speedPerSecond) {
            System.out.println("下载速度:" + speedPerSecond);
        }

        @Override
        public void end() {
            System.out.println("下载完毕");
        }
    });
    //开始下载
    m3u8Download.start();
}`

合并问题

你好 是否能加一个下载后不合并ts的方法呢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.