使用java处理视频最方便最简单的去水印方案 附上java源码
·
本文仅仅用于编程学习研究,不做其他用途。
不知道怎么回事 总审核不过
首先,对输入的短链接进行URL解码,并将解码后的字符串存储在"decodeUrl"变量中。
接着,创建一个HashMap类型的数据"data",用于存储从哔哩哔哩网站中获取的视频信息。
调用HttpUtil类中的"getGetLocationtoutiao"方法,获取短链接对应的重定向链接,并将其存储在"location"变量中。
判断"location"变量中是否包含键名为"location"的键值对,如果存在,则说明获取重定向链接成功,将重定向链接存储在"redirctUrl"变量中。
创建一个HashMap类型的数据"headers",用于存储HTTP请求的头信息,并设置一些常见的头信息,如User-Agent、Accept等。
调用HttpUtil类中的"doGetAndHead"方法,发送GET请求并获取响应内容,将响应内容存储在"body"变量中。
对响应内容进行处理,将其中的";(function())"替换为"@",方便后续使用正则表达式匹配。
使用正则表达式匹配响应内容中"window.INITIAL_STATE="和";(function())"之间的内容,并将其存储在"initialStr"变量中。
public Map bilibili(String shortUrl) throws Exception {
byte[] decode = URLDecoder.decode(shortUrl.getBytes());
String decodeUrl = new String(decode);
HashMap<String, String> data = new HashMap<>();
Map<String, String> location = HttpUtil.getGetLocationtoutiao(decodeUrl);
if (location.containsKey("location")) {
String redirctUrl = location.get("location");
HashMap<String, String> headers = new HashMap<>();
//headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46");
headers.put("user-agent", "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36");
headers.put("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7");
headers.put("accept-encoding", "gzip, deflate, br");
String body = HttpUtil.doGetAndHead(redirctUrl, headers);
String s = body.replaceAll(";\\(function\\(\\)", "@");
String initialReg = "window.__INITIAL_STATE__=([^@]+)";
Pattern initialP = Pattern.compile(initialReg);
Matcher initialM = initialP.matcher(s);
if (initialM.find()) {
String initialStr = initialM.group(1);
JSONObject jo = JSONObject.parseObject(initialStr);
if (jo.containsKey("video")) {
jo = jo.getJSONObject("video");
if(jo.containsKey("viewInfo")){
jo = jo.getJSONObject("viewInfo");
if (jo.containsKey("title")) {
String title = jo.getString("title");
data.put("desc", title);
}
if (jo.containsKey("pic")) {
String pic = jo.getString("pic");
String cover = URLDecoder.decodeForPath(pic, Charset.defaultCharset());
data.put("cover", toHttps(cover));
}
}
}
}
String playInfoReg = "var options = ([^;]+)";
Pattern p = Pattern.compile(playInfoReg);
Matcher m = p.matcher(s);
if(m.find()){
String group = m.group(1);
JSONObject jo = JSONObject.parseObject(group);
if(jo.containsKey("readyVideoUrl")){
String videoUrl = jo.getString("readyVideoUrl");
data.put("videoUrl",toHttps(videoUrl));
}
}
String playInfoReg = "window.__playinfo__=([^<]+)";
Pattern p = Pattern.compile(playInfoReg);
Matcher m = p.matcher(s);
if (m.find()) {
String videoInfo = m.group(1);
JSONObject jo = JSONObject.parseObject(videoInfo);
if (jo.containsKey("data")) {
jo = jo.getJSONObject("data");
if (jo.containsKey("dash")) {
jo = jo.getJSONObject("dash");
if (jo.containsKey("video")) {
JSONArray videos = jo.getJSONArray("video");
if (videos.size() > 0) {
JSONObject videoJo = videos.getJSONObject(0);
String baseUrl = videoJo.getString("baseUrl");
data.put("videoUrl", baseUrl);
data.put("referer", redirctUrl);
}
}
}
}
}
}
if (StringUtils.isNotBlank(data.get("videoUrl"))) {
return data;
}
return null;
}
更多平台源码的网盘地址:
链接:https://pan.baidu.com/s/1S-I6Pvv31iwNgzVTZVSLwA
提取码:rwtk 欢迎大家一起交流

更多推荐


所有评论(0)