成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

java程序員手寫一個抖音視頻去水印工具

java基礎欄目介紹去水印工具的方法。

java程序員手寫一個抖音視頻去水印工具

相關學習推薦:java基礎

百因必有果

說一下我為什么要做個抖音視頻去水印工具,其實是因為我的沙雕女友,她居然剛我~

有天晚上她在抖音看見一個非常具有 教育意義 的視頻,“男人疼媳婦就該承包全部家務活”,然后它就想把視頻下載下來,分享到她的姐妹群交流 馭夫 心得。

可是大家都知道抖音下載的視頻是帶水印,作為一個重度強迫癥選手這是不被允許的,沒辦法那就找找有沒有去水印工具吧,找了一圈要不就是收費,要么下載不下來,主上臉上的笑容也在逐漸消失。

我在邊上調侃了一句:也沒多難,要不我給你做一個!“你行嗎?” 然后投來了一個不屑的眼神。

java程序員手寫一個抖音視頻去水印工具

哎呀!本來就開個玩笑,居然說我不行,這就不能忍了,我得證明給你看看!男人嘛,就受不了這話

先看下我做的去水印工具線上預覽效果: 47.93.6.5:8888/index

java程序員手寫一個抖音視頻去水印工具

下邊和大家一起分析下做這個去水印工具的思路,很多人乍一聽 去水印 ,下意識的覺得是一種什么牛比的算法,其實這是一種假象~

刨根問底

雖說要爭口氣,可剛開始做的時候我也真是一臉懵逼,因為根本不知道該從哪入手,去水印什么原理???難不成我還要寫個算法?

找了一個抖音視頻的分享鏈接,一點點分析,不難發現這是個經過處理的短鏈接,那這個短鏈接一定會重定向到真實的視頻地址 URL

https://v.douyin.com/JSkuhE4/

瀏覽器中輸入短鏈接得到了下邊這個 URL ,以我的經驗判斷URL中的 6820792802394262795 很有可能是視頻的唯一ID,而唯一ID通常用來作為獲取詳情接口的入參,哎嘿~ 好像有點頭緒了。

https://www.iesdouyin.com/share/video/6820792802394262795/

java程序員手寫一個抖音視頻去水印工具

趕緊祭出 F12 大法打開控制臺,在眾多請求中發現這么一個接口,它居然用到了上邊的唯一ID。

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6820792802394262795

java程序員手寫一個抖音視頻去水印工具
更驚喜的是接口返回的數據那叫一個詳細,作者信息、音頻地址、視頻地址、平面圖都有。但唯獨沒有無水印的視頻 URL
java程序員手寫一個抖音視頻去水印工具
只找到一個有水印的視頻 URL,有點小失落,我又看了看這個地址,發現 wm 和我項目名有點像啊,不就是watermark 水印的縮寫嗎?

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

java程序員手寫一個抖音視頻去水印工具
好像又看到了一絲希望,我趕緊修改URL在瀏覽器中又試了一下,果然真的沒水印了。

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

java程序員手寫一個抖音視頻去水印工具
到這才發現抖音去水印 簡單的讓人感動,哈哈哈~

身體力行

既然原理都清晰了,剩下的就是一步一步實現功能了,原理看著挺簡單的,但實現中還是遇到一點點小坑,浪費了不少時間。

實現過程只有簡單的三步:

  • 1、從輸入框中過濾取出視頻短連接
  • 2、短連接傳到后端解析出無水印的視頻 URL
  • 3、視頻 URL傳遞給前端預覽、下載

后端并沒有什么難度,一步一步按照上邊分析的流程解析真實視頻 URL 就可以了。

注意 :我們想得到的地址URL,都是當前短連接URL 經過重定向后的URL。而抖音有些鏈接是不支持瀏覽器訪問的,所以要手動修改 User-agent 屬性模擬移動端訪問才可以。

/** * @param url * @author xiaofu * @description 獲取當前鏈接重定向后的url * @date 2020/9/15 12:43 */public static String getLocation(String url) {         try {             URL serverUrl = new URL(url);             HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();             conn.setRequestMethod("GET");             conn.setInstanceFollowRedirects(false);             conn.setRequestProperty("User-agent", "ua");//模擬手機連接             conn.connect();             String location = conn.getHeaderField("Location");             return location;         } catch (Exception e) {             e.printStackTrace();         }         return "";     }

下邊是完整的后端實現,可以看到代碼量非常的少。

/**  * @author xiaofu-公眾號:程序員內點事  * @description 抖音無水印視頻下載  * @date 2020/9/15 18:44  */@Slf4j @Controllerpublic class DYController {     public static String DOU_YIN_BASE_URL = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=";     /**      * @param url      * @author xiaofu      * @description 解析抖音無水印視頻      * @date 2020/9/15 12:43      */     @RequestMapping("/parseVideoUrl")     @ResponseBody    public String parseVideoUrl(@RequestBody String url) throws Exception {         DYDto dyDto = new DYDto();         try {             url = URLDecoder.decode(url).replace("url=", "");             /**              * 1、短連接重定向后的 URL              */             String redirectUrl = CommonUtils.getLocation(url);              /**              * 2、拿到視頻對應的 ItemId              */             String videoUrl = "";             String musicUrl = "";             String videoPic = "";             String desc = "";             if (!StringUtils.isEmpty(redirectUrl)) {                 /**                  * 3、用 ItemId 拿視頻的詳細信息,包括無水印視頻url                  */                 String itemId = CommonUtils.matchNo(redirectUrl);                 StringBuilder sb = new StringBuilder();                 sb.append(DOU_YIN_BASE_URL).append(itemId);                 String videoResult = CommonUtils.httpGet(sb.toString());                 DYResult dyResult = JSON.parseObject(videoResult, DYResult.class);                 /**                  * 4、無水印視頻 url                  */                 videoUrl = dyResult.getItem_list().get(0)                         .getVideo().getPlay_addr().getUrl_list().get(0)                         .replace("playwm", "play");                 String videoRedirectUrl = CommonUtils.getLocation(videoUrl);                 dyDto.setVideoUrl(videoRedirectUrl);                 /**                  * 5、音頻 url                  */                 musicUrl = dyResult.getItem_list().get(0).getMusic().getPlay_url().getUri();                 dyDto.setMusicUrl(musicUrl);                 /**                  * 6、封面                  */                 videoPic = dyResult.getItem_list().get(0).getVideo().getDynamic_cover().getUrl_list().get(0);                 dyDto.setVideoPic(videoPic);                 /**                  * 7、視頻文案                  */                 desc = dyResult.getItem_list().get(0).getDesc();                 dyDto.setDesc(desc);             }         } catch (Exception e) {             log.error("去水印異常 {}", e);         }         return JSON.toJSONString(dyDto);     }}

前端實現也比較簡單,拿到后端解析出來的視頻URL 預覽播放、下載就OK了。

java程序員手寫一個抖音視頻去水印工具

為快速實現我用了老古董JQuery,我這個年紀的人對它感情還是很深厚的,UI 框架用的 layer.js。源碼后邊會分享給大家,就不全貼出來了。

$.ajax({     url: '/parseVideoUrl',     type: 'POST',     data: {"url": link},     success: function (data) {         $('.qsy-submit').attr('disabled', false);         try {             var rows = JSON.parse(data);             layer.close(index);             layer.open({                 type: 1,                 title: false,                 closeBtn: 1,                 shadeClose: true,                 skin: 'yourclass',                 content: `<p style="overflow:hidden;height: 580px;width: 350px;"><p><p class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['videoUrl']}','${rows['desc']}')"><button class="layui-bg-red layui-btn-sm layui-btn">下載視頻</button></a></p><p class="popButton"><textarea id="videourl" cols="1" rows="1" style="height:0;width:0;position: absolute;">${rows['videoUrl']}</textarea><button class="layui-btn-sm layui-bg-blue layui-btn" onclick="copy('videourl')">復制鏈接</button></p><p class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['musicUrl']}','${rows['desc']}')"><button class="layui-btn-sm layui-btn">下載音頻</button></a></p><video id="video" width="360px" height="500px" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video></p></p>`                 //content: `<video id="video" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video>`             });          } catch (error) {             layer.alert('錯誤信息:' + error, {                 title: '異常',                 skin: 'layui-layer-lan',                 closeBtn: 0,                 anim: 4 //動畫類型             });             return false;         }     },     error: function (err) {         console.log(err);         layer.close(index);         $('.qsy-submit').attr('disabled', false);     },     done: function () {         layer.close(index);     }})})

注意:我們在自己的網站中引用其它網站的資源URL,由于不在同一個域名下referrer 不同,通常會遇到三方網站的防盜鏈攔截,所以要想正常訪問三方資源,必須要隱藏請求的referrer,頁面中設置如下參數。

 <!-- 解決訪問視頻url 請求403異常 -->  <meta name="referrer" content="no-referrer"/>

還簡單做了下移動端適配,樣式看著還可以,但是功能使用起來有點差強人意,后邊在做優化了。

java程序員手寫一個抖音視頻去水印工具

總結

很多東西就是這樣,沒認真研究之前總感覺深不可測,可一旦接觸到技術的本質,又開始笑自己之前好蠢,懂與不懂有時就查那么一層窗戶紙。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
日产亚洲一区二区三区| 娇妻借好友1—38| 国产AV妓女影视妓女影院| 国产AV激情无码久久| 国产欧美VA欧美VA香蕉在| 狠狠躁夜夜躁人人爽碰AV| 久久久久久精品免费免费69| 内射丰满熟妇18p一区二区| 人妻[21P]大胆| 成人国内精品久久久久影院| BGMBGMBGM老少配| 厨房掀开馊了裙子挺进电影| 国产精品久久久久精品日日| 精品久久久久久无码国产| 蜜臀AV无码国产精品色午夜麻豆| 取一个独一无二的网名| 甜性涩爱在线播放| 无码一区二区av| 麻豆果冻传媒新剧国产短视频| 动物交配的全过程| 亚洲无人区码一码二码三码的含义| 人交互MOUSE人害女生迈开腿| 国内揄拍国内精品| АV天堂手机版在线观看| 亚洲成A人一区二区三区| 日韩AV影院在线观看| 国产成人AV免费网址| 久久99精品久久久久久9| 欧美少妇XXXXX| 小SB是不是想被C了| 中文字幕乱码人在线视频1区| 大BBW大BBW大BBW| 好男人好资源在线观看免费视频| 女上男下啪啪激烈高潮无遮盖| 天堂А√中文最新版地址在线| 亚洲午夜无码久久| 成码无人AV片在线电影无下载| 韩国午夜理伦三级在线观看仙踪林| 男女后进式猛烈XX00动态图片| 婷婷五月深爱憿情网六月综合| 野花香视频在线观看社区| 厨房人妻HD中文字幕69XX| 精品无码久久久久国产动漫3D| 人妻熟女一区二区AⅤ| 亚洲国产成人久久综合电影| А√天堂资源8在线官网地址| 孩教小UXXXⅩ精品| 人妻少妇精品久久久久久| 亚洲精品AⅤ无码精品| 啊轻点灬太粗嗯太深了用力| 精品无码老熟妇MAGNET| 三个媳妇一锅烩大团圆| 亚洲中文字幕在线第六区| 公交车上噗嗤一声尽根而没| 久久国产精品一国产精品金尊 | 洗澡被公强玩好舒服肉欲小说| 中文字幕日韩人妻在线乱码| 国产啪亚洲国产精品无码| 欧美猛少妇色XXXXX猛交| 亚洲国产成人精品激情姿源 | 永久免费AV无码网站韩国毛片 | 久久EE热这里只有精品| 私密按摩高潮熟女啪啪| √天堂网WWW最新版| 韩国AV一区二区| CAOPORN视频在线观看| 综合 欧美 亚洲日本| 高潮喷奶水在线播放视频| 粉嫩人妻一区二区三区| 大香伊蕉在人线国产2020年| 国产AV无码专区亚洲AV| 国产精品久久无码一区| 国产成人久久精品一区二区三区| 国产精品毛片一区内射| 国模和精品嫩模私拍视频| 天无日天天射天天视| www.五月婷婷.com| 久久久久亚洲AV无码专区网站| 午夜DJ在线观看免费完整版社区| 爱情岛永久地址WWW成人| 久久青草亚洲AV无码麻豆| 亚洲AV成人一区二区三区观看在| 成人免费无码大片A毛片抽搐| 免费A级毛片无码视频| 亚洲精品成A人在线观看| 国产成在线观看免费视频成本人| 欧洲精品VA无码一区二区三区| 夜夜躁狠狠躁日日躁2002| 国内自拍视频一区二区三区| 天天摸天天碰天天添| 菠萝视频免费最新在线观看| 年轻老师的滋味3在观整有限中字| 亚洲无线码高清在线观看| 国模小黎大尺度精品(02)[| 手机国产乱子伦精品视频| 把腿张开老子CAO烂你动态图| 免费看黑人强伦姧人妻| 野外XXXXFREEXXXX日| 精品国产一二三产品区别在哪| 午夜无码一区二区三区在线观看| 番剧初恋不可能是亲姐姐| 人人添人人妻人人爽频| 99久久精品免费看国产| 免费女人18毛片A级毛片视频| 野外XXXXFREEXXXX日| 久久99精品国产麻豆宅宅| 亚洲国产区男人本色| 好男人官网在线观看免费播放| 性色AV一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟 | 欧洲PAYPAL网站WWW| 97久久精品人人爽人人爽蜜臀 | 精品一区二区三区在线成人| 亚洲AV永久无码精品秋霞电影秋 | 亚洲国产婷婷香蕉久久久久久| 中文手机电影在线观看| 河南妇女毛深深的沟WCD| 人人澡人摸人人添学生AV| 亚洲AV无码一区二区少妇| WWW国产亚洲精品久久麻豆| 国产性夜夜春夜夜爽| 人妻AV一区二区三区| 亚洲综合国产成人丁香五月激情| 丰满少妇大力进入| 欧美精品第1页WWW| 被主人调教边C边打屁股作文| 欧美日韩精品一区二区在线视频| 91人妻人人爽人人狠狠| 免费A级毛片无码A∨奶水在线| 最新国产毛2卡3卡4卡| 年级老师的滋味4| CSGO大姐姐AWP多少钱| 欧美一区二区三区不卡| 锕锕锕锕锕锕~好深啊电影APP| 人妻无码AⅤ中文字幕系列| 草草永久地址发布页①| 日韩一卡2卡3卡4卡| 国产CHINESE男男GAYGAY网站| 无码G0G0大胆啪啪艺术| 国产手机在线国内精品| 亚洲国产综合无码一区二区BT下| 久久精品国产亚洲色欲蜜壂AV | 无码A级毛片免费视频内谢| 国产亚洲AV综合人人澡精品| 亚洲国产成人爱AV网站| 久久青草精品38国产| 69无人区乱码一二三四区别| 人妻少妇久久精品电影| 丰满熟妇大号BBWBBWBBW| 无码午夜人妻一区二区不卡视频| 国内精品久久久久影院中文字幕| 亚洲精品无码久久久久不卡| 巨大黑人极品VIDEOS精品| 999久久久国产精品消防器材| 日本VA视频免费在线观看| 国产XXXX色视频在线观看| 亚洲AV无码乱码国产精品老妇| 久久精品国产男包| 99久久精品无码专区| 少妇被猛烈进入到喷白浆| 国产又黄又爽又刺激的免费网址| 亚洲日韩精品无码一区二区三区| 免费体验120秒视频| 差差差很疼30分钟的视频| 无码人妻一区二区三区免费看成人 | 麻豆av一区二区三区久久| 宝贝乖女你的奶真大水真多小说| 婷婷色香五月综合激激情| 精品国产污污免费网站入口| 2014AV天堂| 天天综合天天爱天天做| 护士HD老师FREE性ⅩⅩⅩ| 午夜精品久久久久9999| 国产特级毛片AAAAAA视频| 用力挺进她的花苞| 无遮挡又黄又刺激的视频| 饥渴人妻精油按摩无码专区| 亚洲婷婷五月激情综合APP| 旧芭乐视频官网下载地址IOS| 50岁人妻丰满熟妇ΑV无码区| 秋霞手机在线看秋免费| 粉嫩AV精品一区二区三区| 小东西几天没做又紧了| AE成品免费下载网站| 全免费A级毛片免费看网站| 国产成人亚洲色成人网站WWW永久四虎| 亚洲AV无码成人精品区瑜伽裤 | 亚洲熟妇色自偷自拍另类| 人妻蜜と1~4中文字幕月野定规| 国产男男激情VIDEOSGAY| 永久黄网站色视频免费观看APP| 日韩久久久久久中文人妻| 机长脔到她哭H粗话H| TPU色母和PA6色母的性能| 香蕉大美女天天爱天天做| 女教师の爆乳BD在线观看| 国产熟睡乱子伦视频| 69国产成人精品午夜福中文| 西西人体大胆WWW444| 欧美人与性动交Α欧美精品|