使用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    欢迎大家一起交流

https://minivideo.chaoniuck.com/erweima.jpg

猜你喜欢

转载自blog.csdn.net/javayxc/article/details/129825170