美文网首页
Android实现抖音无水印视频

Android实现抖音无水印视频

作者: Android阿南 | 来源:发表于2021-02-26 20:34 被阅读0次

    前言

    好久没写文章了,最近微信8.0设置视频状态比较火,很多小伙伴问有没有什么办法去除抖音上的水印,所以写一篇文章。
    此文章为照顾新手,去除大部分框架,以及一些代码规范,以最原始的代码呈现


    文章目录


    核心

    抖音的无水印视频获取:将playwm改为play即可
    有水印的视频链接https://aweme.snssdk.com/aweme/v1/playwm/…
    无水印的视频链接https://aweme.snssdk.com/aweme/v1/play/…


    以下是本篇文章正文内容。

    一、准备工作

    导入jsoup框架

    implementation 'org.jsoup:jsoup:1.13.1'
    复制代码
    

    网络权限

    <uses-permission android:name="android.permission.INTERNET"/>
    复制代码
    

    二.实现思路以及核心代码

    1.最开始的思路

    利用Jsoup框架爬取网页中的视频地址:

    Document doc = Jsoup.connect(URL).get();
    Elements elements = document.select("video").frist;
    String videoUrl = element.attr("src");
    复制代码
    

    到这发现有一层防爬措施,获取不到视频链接

    2.另一种思路

    为解决此问题,反编译拥有此功能的APP后,从smali文件中得到另一种思路
    1.将网页保存至本地

     mWebView = new WebView(this);
            //允许执行javascript语句
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
            mWebView.loadUrl(Url);//从抖音复制的链接
            mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                }
    
                //当新的 url 即将被加载的时候---->用户点击了 Webview 内容里面的一个超链接的时候会触发该方法的调用
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
    
                //在页面加载结束时调用。
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    view.loadUrl("javascript:window.local_obj.showSource('<head>'+" + "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
                }
    
                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    super.onReceivedError(view, errorCode, description, failingUrl);
                }
            });
    复制代码
    
        final class InJavaScriptLocalObj {
            @JavascriptInterface
            public void showSource(final String html) {
               //html为保存的网页代码
            }
        }
    复制代码
    

    2.使用Jsoup解析本地网页(此操作写在子线程中)

    Document doc = Jsoup.parse(html);
    Element element = doc.select("video").first();     //搜索搜索节点的id 获得element
    String videoUrl = element.attr("src");
    复制代码
    

    这时发现有时element中会没有数据
    将代码改写为

     if (element != null) {
      String videoUrl = element.attr("src");
      }else{
      //webview重新load网页操作
      }
    复制代码
    

    三.获取有水印的视频链接后,更改链接

    String aftervideoUrl=videoUrl.replace("playwm","play");
    复制代码
    

    为了方便看效果,直接用VideoView播放(低版本的测试机器,未适配高版本机器) (主线程中进行)

    videoview.setVideoPath(aftervideoUrl);
    videoview.requestFocus();
    videoview.start();
    

    作者:计蒙不吃鱼
    链接:https://juejin.cn/post/6932011178260594701
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Android实现抖音无水印视频

          本文链接:https://www.haomeiwen.com/subject/beevfltx.html