【记录】试图分析出优酷在线视频的真正的可下载的flv地址

【背景】

折腾:

【记录】开发在线视频下载器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

如图:

first found flv address

然后通过response body的save as,可以保存出来对应的flv文件:

reponse body save as flv file

然后对于保存出来的那个flv,经过实际查看,是个广告:

6e that flv is advertisement

 

2.用同样的方法,去分析,第二个找到的flv地址:

http://61.160.205.11/youku/6775F25C5FB4E8321EB449430A/030002010051FC66FE706B0742D2DAEE326F29-7EB3-8399-FD5B-E6AEA14A53DF.flv

 

second flv address

然后也是另存为flv,再去播放一下,发现也是广告:

df flv is also advertisement

所以,上述两个flv,都不是我们所需要的。

4.再去分析,找到后面的一个url,其中有getFlvPath等字样,看起来就像是和此处真实地址相关的:

url is get flv path

地址是:

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

然后去看看,发现其返回的json字符串中,就包含有个server的mp4地址:

reponse body contain server http mp4 link

内容是:

[{"fileid":"030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4","server":"http://59.63.171.71/youku/656A3688B53D8104A099C2B9E/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4"}]

5.很明显,此时得到一个mp4的地址:

http://59.63.171.71/youku/656A3688B53D8104A099C2B9E/030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4

看起来,倒是像真实的视频地址。

注:此时处,对于当时分析url,已经过了很长时间了。

去试试,另外单独使用此地址,输入到浏览器,看看能否下载下来对应的内容,此时显示出来的是,让你下载:

input mp4 address ask you save

下载下来:

030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4

去播放看看,发现的确是真正的视频的内容:

06min 53 sec real video

但是只是其中的一部分,只有06:53的时长。不是完整的视频的长度。

6.而对于:

http://v.youku.com/v_show/id_XNTgxODEyODA0.html

来说,完整的时长是: 32:46

total 32 46 time length

所以,还要去找,余下的,其他的,多个视频片段。

7.此时,就让其自然去播放视频,然后一直等等播放完06:53的时长,看看其是如何再获得第二段视频,以及接下来的各个视频片段的。

此处,我是当视频内存加载了很多,我直接点击到了5分多钟,然后继续播放,知道超过06:53的时间段的,结果发现,其中,和获得新视频地址有关的,从最新,往前推断,有如下几个:

对于当前播放到07:11时,往前算,最近一个视频地址是:

for playing 0711 last mp4 address

即:

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

2486 2559 mp4 save as

再保存出来看看,结果发现,和上面的文件名是一样的,都是:

030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F.mp4

所以,为了不把之前的冲突掉,只能重命名,保存下来。

结果也不能播放:

2486 mp4 can not play

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 mp4 link then save as

发现2459可以播放,但是内容貌似也是空的,显示黑屏:

2459 can play but black

10.再往前推,找到了2451的url,其中带getFlvPath的:

2451 getflvpath sid link

其中就是获得了,前面(三个同样的那个)地址:

2451 get mp4 file

即:

2451通过:

http://f.youku.com/player/getFlvPath/sid/137584083224715524739_00/st/mp4/fileid/030008050151E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F?K=39fa519d6b0f08a02828d22e&hd=1&myp=0&ts=401&ymovie=1&ypp=2&yxon=1&special=true

获得了:

[{"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,应该是足够长了:

now has play 16 15 enough long

再去之前的,比如2459去save as一下:

2459 then 2868 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中出现的:

first occurence for 1358408

说明:

这个值是别的某个逻辑产生的。

最常见和可能的是:

某个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

player_yk swf file

这个看起来,应该就是优酷(youku=yk)的播放器了。

然后去save as,打开看看,果然的确是优酷的播放器:

player_yk is real youku flash player

然后,就去想办法,找找软件,去反编译此swf试试。

 

(B)030008050051E05409137C07A7194746224E6E-343B-9BC3-267C-E072F75D6D5F

 

【总结】



5 Thoughts on “【记录】试图分析出优酷在线视频的真正的可下载的flv地址

  1. Pingback: [Android基础] VideoView - 移动开发 - 阿里欧歌

  2. 都不用 这么麻烦了 提取 MP4的地址目的 是得到 手机 IPAD 可以同时看 我的网站都解决了 这个问题了 而且 只要你用手机看 都可以 不用广告哦 在 百度输入 蚯蚓分享 第一个就是 我的网站 关于我们 这个页面 有 我的联系 方式 和 蚯蚓分享的群 大家 可以用我手机 查看 我网站的视频哦

  3. 我也在研究这个,自己用c++写了个程序,在linux下抓包,得到优酷的视频地址:http://122.72.82.2/youku/67737F4A916357FE7195B3C2F/030008040051DA99159DA1050170575F739222-4DC5-7A38-6EFF-70D3D7471701.mp4?nk=67113662826_23475087326&ns=2_12&special=true
    ?后面的参数如果不加,下载是正确的,不明白参数什么意思,加了参数下载的视频不能看
    不知道您有没有qq,一起研究下可以吗?
    qq:414997284

  4. 我也在研究这个问题,基本思路也一样,也有一些心得,反编译我已经成功,现在在分析优酷player的代码,暂时问题没法解决,希望交流交流

发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量