博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

m3u8视频下载

Posted on 2020-07-03 16:58  shyHorse  阅读(969)  评论(0编辑  收藏  举报
package com.hh.M3u8;

import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 
 * @create 2020-07-03
 */
public class M3u8Demo {


    private static String rootPath = "G:\\m3u8dir";

    public static void main(String[] args) {
        String indexPath = "http://202.100.35.195:6666/openUrl/JqpcPNC/live.m3u8";
        String prePath = indexPath.substring(0,indexPath.lastIndexOf("/")+1);
        System.out.println(prePath);
        //下载索引文件
        String indexStr = getIndexFile(indexPath);
        //解析索引文件
        List videoUrlList = analysisIndex(indexStr);
        //下载视频片段
        List<String> fileList = downLoadIndexFile(prePath,videoUrlList);


    }

    //下载索引文件
    public static String getIndexFile(String urlpath){
        try{
            URL url = new URL(urlpath);
            //下在资源
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
            String content = "" ;
            String line;
            while ((line = in.readLine()) != null) {
                content += line + "\n";
            }
            in.close();
            System.out.println("下载索引文件 "+content);
            return content;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    //解析索引文件
    public static List analysisIndex(String content){
        Pattern pattern = Pattern.compile(".*ts");
        Matcher ma = pattern.matcher(content);

        List<String> list = new ArrayList<String>();

        while(ma.find()){
            String s = ma.group();
            list.add(s);
            System.out.println("解析文件 "+s);
        }
        return list;
    }


    //根据解析结果下载视频片段
    public static List<String> downLoadIndexFile(String preUrlPath,List<String> urlList){
        try{
            List<String> filePathList = new ArrayList<String>();
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            for(String urlpath:urlList){
                URL url = new URL(preUrlPath+urlpath);
                //下在资源
                DataInputStream dataInputStream = new DataInputStream(url.openStream());
                String fileOutPath = rootPath+ File.separator+uuid+File.separator+urlpath;
                File file = new File(rootPath+File.separator+uuid);
                if(!file.exists()){
                    file.mkdirs();
                }
                FileOutputStream fileOutputStream = new FileOutputStream(new File(fileOutPath));
                byte[] bytes = new byte[1024];
                int length = 0;
                while ((length = dataInputStream.read(bytes)) != -1) {
                    fileOutputStream.write(bytes, 0, length);
                }
                System.out.println("下载完成..."+fileOutPath);
                dataInputStream.close();
                filePathList.add(fileOutPath);
            }

            return  filePathList;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}