【背景】
折腾:
【记录】开发在线视频下载器OnlineVideoDownloader的过程
期间,需要先去分析优酷的flv真实地址。
【折腾过程】
1.继续用IE9的F12去分析。
现以
http://v.youku.com/v_show/id_XNTgxODEyODA0.html
为例。
2.按照正常的逻辑,去抓取上述地址,然后对于抓取出来的信息,从前到后分析,
看到的第一个,.flv的地址是:
http://61.160.206.14/youku/69775918D933281FE52FF04F5F/030002010051F39AE5138B003E8803272597D9-8E69-7591-EA24-462A19272A6E.flv |
如图:
然后通过response body的save as,可以保存出来对应的flv文件:
然后对于保存出来的那个flv,经过实际查看,是个广告:
2.用同样的方法,去分析,第二个找到的flv地址:
http://61.160.205.11/youku/6775F25C5FB4E8321EB449430A/030002010051FC66FE706B0742D2DAEE326F29-7EB3-8399-FD5B-E6AEA14A53DF.flv |
然后也是另存为flv,再去播放一下,发现也是广告:
所以,上述两个flv,都不是我们所需要的。
4.再去分析,找到后面的一个url,其中有getFlvPath等字样,看起来就像是和此处真实地址相关的:
地址是:
然后去看看,发现其返回的json字符串中,就包含有个server的mp4地址:
内容是:
[{"fileid":"030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4","server":"http://59.63.171.71/youku/656A3688B53D8104A099C2B9E/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4"}] |
5.很明显,此时得到一个mp4的地址:
看起来,倒是像真实的视频地址。
注:此时处,对于当时分析url,已经过了很长时间了。
去试试,另外单独使用此地址,输入到浏览器,看看能否下载下来对应的内容,此时显示出来的是,让你下载:
下载下来:
030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
去播放看看,发现的确是真正的视频的内容:
但是只是其中的一部分,只有06:53的时长。不是完整的视频的长度。
6.而对于:
http://v.youku.com/v_show/id_XNTgxODEyODA0.html
来说,完整的时长是: 32:46
所以,还要去找,余下的,其他的,多个视频片段。
7.此时,就让其自然去播放视频,然后一直等等播放完06:53的时长,看看其是如何再获得第二段视频,以及接下来的各个视频片段的。
此处,我是当视频内存加载了很多,我直接点击到了5分多钟,然后继续播放,知道超过06:53的时间段的,结果发现,其中,和获得新视频地址有关的,从最新,往前推断,有如下几个:
对于当前播放到07:11时,往前算,最近一个视频地址是:
即:
http://114.80.184.25/youku/69716FC59E53281090FC9E427D/030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4?nk=410423118599_22930860918&ns=3348100_22869800&special=true |
而对于此mp4,先如前所述,到response body中,save as,先另存为出来:
030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
再去播放一下,看看时长和内容是啥,结果发现大小只有2MB多,但是无法播放。
8.先不管上面那个,再往前推,又看到一个视频地址:2486/2559的
http://114.80.184.25/youku/69716FC59E53281090FC9E427D/030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4?nk=66948745656_22930860665&ns=478300_22869800&special=true |
再保存出来看看,结果发现,和上面的文件名是一样的,都是:
030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4
所以,为了不把之前的冲突掉,只能重命名,保存下来。
结果也不能播放:
9.如此,往前推,继续找,又找到一个2459的mp4:
http://114.80.184.25/youku/69716FC59E53281090FC9E427D/030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4?nk=66948745529_22930860248&ns=2_12&special=true |
发现2459可以播放,但是内容貌似也是空的,显示黑屏:
10.再往前推,找到了2451的url,其中带getFlvPath的:
其中就是获得了,前面(三个同样的那个)地址:
即:
2451通过:
获得了:
[{"fileid":"030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4","server":"http://114.80.184.25/youku/69716FC59E53281090FC9E427D/030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4"}] |
此时,有点明白上面的现象了:
此处,只播放到了07:11,即对于第一个,只有06:53的mp4视频:
030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
播放了没几分钟,所以,此刻:
对于第二个mp4文件:
030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
本地缓存还没完成,所以,上面通过2459获得的,此第二个mp4文件,是可以播放一点,但是不能完整播放的。
如果此推论正确的话,那么:
如果此第二个mp4视频文件,加入也是6,7分钟的视频,且在本地在线视频播放足够长,使得肯定是对于此第二段视频,播放和缓冲完毕了,那么再去save as这第二段时间,save as下载到本地,应该就可以正常播放了。
11.为了验证此想法,继续去播放此在线视频,以及让其播放和缓冲足够长:
(至少应该是06:53+06:53=大概14分钟以上估计才可以,所以此处,让其尽量长时间)
此处,已经播放了 16:15,应该是足够长了:
再去之前的,比如2459去save as一下:
存为:
030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F_after1615.mp4
注意,此时已经是抓取了2868个url了。
再播放看看,能否正常播放,结果也还是文件大小很小,只有153KB,还是无法正常播放。
12.那就看看,最新的,是不是又获得了,别的那个片段的视频了:
看到一个2838的url:
http://122.227.237.30/youku/697198AC75D398332270BE504E/030008050251E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4?nk=75956074069_22930885167&ns=14796000_22959200&special=true |
然后去save as,对应的文件是:
030008050251E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
虽然不能播放,但是很明显,此处,只要获得了:
之前的:
030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
之后,貌似就可以直接去获得对应的,后续的各个分段的视频了,即:
030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 030008050251E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
所以,如果顺利的话,猜测的结果,直接用代码,去模拟上述逻辑,在获得第一个mp4的视频地址,就可以算出后续的地址,或许就可以直接下载到对应的分段的mp4视频了。
当然,如果不顺利的话,则还要想办法模拟当前的各种环境,比如各种query string,或者是cookie等等,才能获得对应的地址,优酷服务器才真正响应你,否则拒绝你的访问,也是正常的。
13.那就分析和总结一下,对于第一个地址:
030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4 |
获得的逻辑:
(1)之前是在172/2320的url:
http://f.youku.com/player/getFlvPath/sid/137584083224715524739_00/st/mp4/fileid/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F?K=ae0944d95418f114261d286a&hd=1&myp=0&ts=414&ymovie=1&ypp=2&yxon=1&special=true
(2)返回的结果json:
[{"fileid":"030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4","server":"http://59.63.171.71/youku/656A3688B53D8104A099C2B9E/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4"}]
中,包含我们要的mp4的地址的:
http://59.63.171.71/youku/656A3688B53D8104A099C2B9E/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4
(3)而对于上述url,可以分解为:
http://f.youku.com/player/getFlvPath/sid/137584083224715524739_00/st/mp4/fileid/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F ?K=ae0944d95418f114261d286a &hd=1 &myp=0 &ts=414 &ymovie=1 &ypp=2 &yxon=1 &special=true
对应的这几个参数,简单分析一下为:
- K=ae0944d95418f114261d286a:暂时也不知道,但是看起来就是有用的值,需要后续去搞清楚如何生成此值。
- hd=1:估计hd是high definition,即高清的意思,所以推测此含义是:(向服务器要)高清视频
- myp=0:暂时不知道啥意思
- ts=414:暂时不知道啥意思
- ymovie=1:暂时不知道啥意思
- ypp=2:暂时不知道啥意思
- yxon=1:暂时不知道啥意思
- special=true:暂时不知道啥意思
所以,暂时的策略是,对于不知道的参数,暂时先不管,就直接用抓取出来的值
当然,如果后续调试,无法获得希望的返回的结果,则就要再去分析,各个参数的真正含义,以及如何获得该参数的值,该参数是否对于获得正确解决有价值等等情况了。
(4)再去分析,对于url:
http://f.youku.com/player/getFlvPath/sid/137584083224715524739_00/st/mp4/fileid/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F?K=ae0944d95418f114261d286a
是如何产生的。
很明显,就是要去搞清楚其中的一些值的来历,即如何获得的:
(A)137584083224715524739_00
所以就去,从开始搜此值出现的地方,结果第一个搜出来的,就只是当前url中出现的:
说明:
这个值是别的某个逻辑产生的。
最常见和可能的是:
某个javascript脚本中生成的。
另外,对于137584083224715524739_00这种值,看起来就像是:
当前的timestamp加上其他部分,构成的值。
先不管,先去找找哪里调用产生了此url,所以去搜:player/getFlvPath/sid
找到都是类似与此处的url,所以,还是没找到有效的产生此种url的地方。
或许此种url是一点点拼出来的,所以再去搜getFlvPath,结果也没搜到。
猜测:估计是youku的flash player内部的代码,产生的此种url。
此时,想到了,之前有个,可以反编译swf的软件,号称可以得到swf的源码的。
所以去找对应的优酷的flash player,即.swf文件。
然后从头开始,先后是:
http://static.youku.com/v1.0.0350/v/swf/loader.swf
http://static.youku.com/v1.0.0883/v/swf/ikuadapter.swf
http://irs01.net/MTFlashStore.swf#
http://irs01.net/MTFlashStore.swf#
后来才是:
http://static.youku.com/v1.0.0350/v/swf/player_yk.swf
这个看起来,应该就是优酷(youku=yk)的播放器了。
然后去save as,打开看看,果然的确是优酷的播放器:
然后,就去想办法,找找软件,去反编译此swf试试。
(B)030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F
【总结】
转载请注明:在路上 » 【记录】试图分析出优酷在线视频的真正的可下载的flv地址