当前位置: 代码迷 >> 综合 >> 趣头条视频解析去水印原理分析过程,简单又有趣
  详细解决方案

趣头条视频解析去水印原理分析过程,简单又有趣

热度:33   发布时间:2023-09-05 19:41:27.0

拿到两个趣头条视频的分享链接如下

[精选] 同样是单身狗,第三个才是实至名归。查看http://new.3qtt.cn/1hKLnp
[热门]太原出土了一口黄金棺材,为何专家却不敢打开,里面有...。查看http://new.3qtt.cn/1hKLox

1.无水印视频源

趣头条视频解析去水印原理分析过程,简单又有趣
很幸运了,网页端直接给出了无水印视频。那就直接在网页端找解析途径旧OK了。

2.解析途径

首先查看网页源码:
趣头条视频解析去水印原理分析过程,简单又有趣
像上面这样子的,没有办法,接下来看网络请求
成功找到一个很敏感的jsonp请求
趣头条视频解析去水印原理分析过程,简单又有趣

3.接口分析

该接口如下:

curl 'http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js?_=1575335580658&callback=Zepto1575335580609' 
-H 'Referer: http://art.lywka.cn/share/detail/video_out.html?content_id=1461641430&key=1ca4BBgiVUXnZSyXFdilmUT3lVqh_EoXtp9cdZut1eAbZRXnzz22Bu3K_eTMSeFaJWZDz7xU40JWNBXKBri_2OOQa9nEjb6_lP2aeQG4ucVWeTPPZvsSn31t4EONOkLGbsPV2tAMCnEcxaZBrVp2nh6YBkkH8ZYxJWlq&pv_id=&cid=2&jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js&fr=2&i=2886747874&shareContentType=2' 
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' 
--compressed

趣头条视频解析去水印原理分析过程,简单又有趣
经过验证,请求头及请求参数均可省去,如下请求即可正常请求

http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js

请求返回如下

cb({"title": "同样是单身狗,第三个才是实至名归","source": "","createTime": "2019-11-28 17:56:54","detail": "{\\\"type\\\":\\\"qtg\\\",\\\"value\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"address\\\":[{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hld.mp4\\\",\\\"size\\\":\\\"510994\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"112\\\",\\\"definition\\\":\\\"hld\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hd.mp4\\\",\\\"size\\\":\\\"2208282\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"486\\\",\\\"definition\\\":\\\"hd\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hhd.mp4\\\",\\\"size\\\":\\\"741034\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"163\\\",\\\"definition\\\":\\\"hhd\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/ld.mp4\\\",\\\"size\\\":\\\"996722\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"219\\\",\\\"definition\\\":\\\"ld\\\"}]}","keywords": "娱乐,社会,搞笑,生活,小姐姐","description": "","nickname": "农村帅小伙","avatar": "http:\/\/static.1sapp.com\/qupost\/avatar\/2019\/08\/04\/1564922926378541353.jpg?imageView2\/1\/h\/120\/w\/120\/q\/90","authorid": "1979410"
})

很明显的一个jsonp请求,和视频相关的最关键的数据就是 detail字段 了,一起来看看detail字段的详情

{"type": "qtg","value": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a","address": [{"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a","url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hld.mp4","size": "510994","duration": "37","format": "mp4","bitrate": "112","definition": "hld"}, {"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a","url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hd.mp4","size": "2208282","duration": "37","format": "mp4","bitrate": "486","definition": "hd"}, {"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a","url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hhd.mp4","size": "741034","duration": "37","format": "mp4","bitrate": "163","definition": "hhd"}, {"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a","url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/ld.mp4","size": "996722","duration": "37","format": "mp4","bitrate": "219","definition": "ld"}]
}
字段 类型 说明 备注
file_id string 顾名思义
url string 视频链接 不完整
size int 视频大小
duration int 视频时长
format string 视频封装格式
bitrate int 比特率
definition string 视频清晰度

首先,同一个视频 不同清晰度file_id相同
其次,根据视频的 sizebitrate,可以确定不同清晰度的视频质量有如下关系

hd > ld > hhd > hld

hd 级别的清晰度是质量最高的视频源

4.hd视频源

先看看我们正常播放用到的视频链接
趣头条视频解析去水印原理分析过程,简单又有趣
我去,不会吧,竟然是ld的,要下载这个视频也没什么卵用,那就直接拿hd的玩玩吧

http://v4.qutoutiao.net/toutiao_video_zdgq_online_self/6fcd4db33f8a5ab29a13747b15c8ff76/ld.mp4

上面是ld级别的完整视频链接。那hd级别的就是下面了

http://v4.qutoutiao.net/toutiao_video_zdgq_online_self/6fcd4db33f8a5ab29a13747b15c8ff76/hd.mp4

趣头条视频解析去水印原理分析过程,简单又有趣
成功了。

5.完工了?

看到这里,很开心,完工了,拿到无水印视频了~~~
真的吗?那下面这个接口从哪里来的呢?

http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js

趣头条解析原理的有趣也正在这里,目前呢,有两种方式获取上面这个接口的地址
http://art.lywka.cn/share/detail/video_out.html?content_id=1461641430&key=1ca4BBgiVUXnZSyXFdilmUT3lVqh_EoXtp9cdZut1eAbZRXnzz22Bu3K_eTMSeFaJWZDz7xU40JWNBXKBri_2OOQa9nEjb6_lP2aeQG4ucVWeTPPZvsSn31t4EONOkLGbsPV2tAMCnEcxaZBrVp2nh6YBkkH8ZYxJWlq&pv_id=&cid=2&jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js&fr=2&i=2886747874&shareContentType=2

上面是短链重定向的地址了,眼尖的朋友一定发现了

content_id=1461641430

眼更尖,尖到变态的朋友也一定发现了

jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js

也正是上面的两种发现,会有两种不同的获取接口地址方式。

5.1 短链重定向获取

首先是发现jsonp的朋友,他会这样去分析了

jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js

首先urldecode,得到

jsonp=//html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js

一步到位,直接到达了高潮

5.2 自行计算

那发现content_id的朋友就会更有趣味性了

content_id=1461641430

真实的url地址如下

html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js

出现的数字从后向前排列一下,来寻找规律

数字 序号
1461641430 1
146164143 2
14616415 3
1461642 4

已经看出了点什么了吧!当然,一个并不能说明什么,那就多来几个!最后你会发现下面的规律。

1.存在一个函数 qtt_fun ,伪代码如下

def qtt_fun(num):return num%10 == 0?  num/10 : num/10 +1 

如果模10有余,就在除以10后的结果上加一,否则不加一
2.存在下列计算,伪代码

path0 = 1461641430
path1 = qtt_fun(path0)
path2 = qtt_fun(path1)
path3 = qtt_fun(path2)
url = "html2.qktoutiao.com/detail/jsonp/" + path3 + "/" + path2 + "/" + path1 + "/" + path0 + ".js"

好了,到现在才算是真的完工了。

  相关解决方案