前些天刷抖音,刷到個好看的動漫視頻。本想著做個手機壁紙,但是下載到本地后發(fā)現(xiàn)有水印。這可不行啊,多影響美觀,于是就寫了個獲取無水印視頻的Demo。
實現(xiàn)思路
抖音視頻有個復制鏈接的功能,這個鏈接是能在網頁打開的,如下:
https://v.douyin.com/qsSFEV/
這是個短鏈接,復制到瀏覽器地址欄后得到的長鏈接是下面的格式:
https://www.iesdouyin.com/share/video/6780619456570789127/?region=CN&mid=6771282500762471182&u_code=14fai9b88&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme
找到html里的video標簽的src元素就是視頻的播放鏈接地址。但這個播放鏈接的地址是帶有水印的,如下:
https://aweme.snssdk.com/aweme/v1/playwm/?s_vid=93f1b41336a8b7a442dbf1c29c6bbc567de80acd4fb17215462db57f4eabe430bb64051acde98da903f0d8cdc9f23f24485b28f6a85ef87dafed6915bb0494f6&line=0
只需要替換掉鏈接中的playwm成play就是無水印的視頻了(是不是很簡單)。
代碼實現(xiàn)
- 獲取剪切版的內容
/**
* 獲取剪切版內容
*
* @return 剪切版內容
*/
public String getShareText() {
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData data = null;
if (cm != null) {
data = cm.getPrimaryClip();
}
ClipData.Item item = null;
if (data != null) {
item = data.getItemAt(0);
}
String content = null;
if (item != null) {
content = item.getText().toString();
}
return content;
}
- 提取鏈接地址
/**
* 獲取鏈接地址
*
* @param text 獲取瀏覽器分享出來的text文本
*/
public static String getCompleteUrl(String text) {
Pattern p = Pattern.compile("((http|ftp|https)://)(([a-zA-Z0-9._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9&%_./-~-]*)?", Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(text);
boolean find = matcher.find();
if (find) {
return matcher.group();
} else {
return "";
}
}
- 從Html中獲取視頻播放地址
Document doc = Jsoup.connect(url).userAgent(userAgent).get();
Elements video = doc.select("video[src]");
for (Element el : video) {
String videoUrl = el.attr("src");
videoUrl = videoUrl.replace("playwm", "play");
// 獲取重定向的URL
videoUrl = getRealUrl(videoUrl);
}
- 獲取重定向的地址
/**
* 獲取重定向地址
*/
private String getRealUrl(String urlStr) {
String realUrl = urlStr;
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("user-agent", "Mozilla/5.0.html (iPhone; U; CPU iPhone OS 4_3_3 like Mac " +
"OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) " +
"Version/5.0.html.2 Mobile/8J2 Safari/6533.18.5 ");
conn.setInstanceFollowRedirects(false);
int code = conn.getResponseCode();
String redirectUrl = "";
if (302 == code) {
redirectUrl = conn.getHeaderField("Location");
}
if (redirectUrl != null && !redirectUrl.equals("")) {
realUrl = redirectUrl;
}
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
return realUrl;
}
然后有了這個地址就可以播放了(貌似這個只能在移動端播放)
差不多就只有這些了,具體的就看代碼吧:
最后
如果你有什么意見和反饋,歡迎到Github提issue(最喜歡別人提issue了)哈哈哈~