解析网页m3u8文件地址
Posted xybz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析网页m3u8文件地址相关的知识,希望对你有一定的参考价值。
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; class text{ static String 二级m3u8地址; static String 解析的url文件地址; 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(); return content; }catch (Exception e){ e.printStackTrace(); } return null; } public static List analysisIndex(String content){ String prePath = 二级m3u8地址.substring(0,二级m3u8地址.lastIndexOf("/")+1); Pattern pattern = Pattern.compile(".*ts"); Matcher ma = pattern.matcher(content); List<String> list = new ArrayList<String>(); FileOutputStream fs; try { fs = new FileOutputStream(new File(解析的url文件地址)); PrintStream p = new PrintStream(fs); while(ma.find()){ String latePath = ma.group(); list.add(latePath); p.println(prePath+latePath); System.out.println(prePath+latePath); } p.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } return list; } public static void openXunlei(){ final Runtime runtime = Runtime.getRuntime(); Process process = null; final String cmd = "rundll32 url.dll FileProtocolHandler "+解析的url文件地址;//要打开的文件路径。 try { process = runtime.exec(cmd); } catch (final Exception e) { System.out.println("Error exec!"); } } } class Main{ public static void main(String[] args){ String urlPath = "https://kbzy.zxziyuan-yun.com/ppvod/3DAFCB3DCFC52A80A5BBD7C57FC28907.m3u8"; text.二级m3u8地址=urlPath; text.解析的url文件地址="C:\\Users\\xianyu\\Desktop\\temp.downlist"; //改成下载器相应的格式就能直接打开下载页面 String indexStr = text.getIndexFile(urlPath); text.analysisIndex(indexStr); text.openXunlei(); } }
getIndexFile类用来下载网页视频m3u8文件
analysisIndex类用来解析m3u8文件,改写成url的形式
openXunlei类是根据解析好的url地址打开迅雷下载
前两个类没什么好说的,第三个类实现原理是把analysisIndex类生成的url存成文本,直接命名为.downlist文件。
而.downlist是迅雷存下载地址的文件,存好后用runtime调cmd,直接打开这个文件,就能进下载页面了。
所以,没有安装迅雷,第三不就不会执行,不过程序还是能生成一个解析好的url文件的。按需要改相应的参数。
主类中urlPath是二级m3u8文件,注意,一级m3u8文件是不行的,因为一级里面是一些适配码率的代码,没有真正的视频地址文件。
text.解析的url文件地址是m3u8文件解析好的url地址文件,按那个地址下就行了
另外,上面代码也有一些问题,下载下来的视频全部都是.ts切片文件,下载后需要把他们合成一个整视频
我一般用cmd合成
copy /b 要合成的.ts文件路径\*.ts 生成文件路径\new.mp4
*是通配符,具体参见百度
还有一个问题,就是代码会在生成url的时候还会在控制台输出,而一旦输出过多,前面一部分就会丢失,所以不要用控制台生成的地址去下载
靠谱的还是去生成文件里面去找,因为那样不会溢出。
现在遇到的问题是有的视频很长切片太多,而我的迅雷一次最多添加1000个链接,我的想法是每生成1000个url后就重新生成一个文件,然后分开下载。
还有一个待解决的问题,就是有些网站会对他的地址进行AES加密,表示暂时看见了没办法。
实现好了随缘跟新吧。
以上是关于解析网页m3u8文件地址的主要内容,如果未能解决你的问题,请参考以下文章
m3u8文件格式讲解,Python解析m3u8文件,并获取在线地址
m3u8文件格式讲解,Python解析m3u8文件,并获取在线地址
学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析