分享

CNTV视频深入挖掘分析

 艺术女神 2011-02-24
摘自Crazy Code:话说CNTV曾经有几个视频想要下载,才疏学浅,一直找不到原视频地址,在缓存中找文件的方法对CNTV不管用了。这两天再次分析了一下,虽然最终还是没能找到方法,但还是有点收获的。以http://bugu.cntv.cn/life/science/kejizhiguang/classpage/video/20100808/100432.shtml页面为例,先不要急着看源文件,播放器以及提供了站外引用的关键代码.

直接复制就行了。内容如下:

<embed id='v_player_cctv' width='666' height='500' flashvars='videoId=20100808100432&filePath=/life/science/kejizhiguang/classpage/video/&url=http://bugu.cntv.cn/life/science/kejizhiguang/classpage/video/20100808/100432.shtml&tai=bugu&configPath=http://bugu.cntv.cn/nettv/Library/ibugu/player/config.xml&widgetsConfig=http://bugu.cntv.cn/nettv/Library/ibugu/player/widgetsConfig.xml&languageConfig=http://bugu.cntv.cn/nettv/Library/ibugu/player/zh_cn.xml&hour24DataURL=&outsideChannelId=channelBugu&videoCenterId=281683144ff646bfd0849aa9deff0e42' allowscriptaccess='always' allowfullscreen='true' menu='false' quality='best' bgcolor='#000000' name='v_player_cctv' src='http://player.cntv.cn/standard/cntvOutSidePlayer.swf?v=0.171.5.4' type='application/x-shockwave-flash' lk_mediaid='lk_juiceapp_mediaPopup_1257416656250' lk_media='yes'/>

是个标准的视频引用代码,如果把它保存为htm网页,就能实现播放。
注意两个关键参数srcflashvars,src是视频地址,flashvars是参数。不要以为src指向的http://player.cntv.cn/standard/cntvOutSidePlayer.swf?v=0.171.5.4就是视频地址了,它只是个flash播放器,用来播放视频文件。将src和flashvars这两个字符串组合在一起(注意中间用&连接),得到如下网址:

http://player.cntv.cn/standard/cntvOutSidePlayer.swf?v=0.171.5.4&videoId=20100808100432&filePath=/life/science/kejizhiguang/classpage/video/&url=http://bugu.cntv.cn/life/science/kejizhiguang/classpage/video/20100808/100432.shtml&tai=bugu&configPath=http://bugu.cntv.cn/nettv/Library/ibugu/player/config.xml&widgetsConfig=http://bugu.cntv.cn/nettv/Library/ibugu/player/widgetsConfig.xml&languageConfig=http://bugu.cntv.cn/nettv/Library/ibugu/player/zh_cn.xml&hour24DataURL=&outsideChannelId=channelBugu&videoCenterId=281683144ff646bfd0849aa9deff0e42

用IE打开,会看到什么?视频直接播放了。

看到这个长长的网址,你能联想到什么吗,反正我是想的了asp、php、jsp等动态网页,只不过这里变成了swf,后面"&xxxx="之类的就是参数,它们决定了cntvOutSidePlayer.swf播放器的各个属性,当然包括播放什么视频。

其中有几个参数不是必要的,有没有都不影响播放。经过测试,简化如下:

http://player.cntv.cn/standard/cntvOutSidePlayer.swf?v=0.171.5.4&videoId=20100808100432&configPath=http://bugu.cntv.cn/nettv/Library/ibugu/player/config.xml&widgetsConfig=http://bugu.cntv.cn/nettv/Library/ibugu/player/widgetsConfig.xml&videoCenterId=281683144ff646bfd0849aa9deff0e42

而其中决定播放哪个视频的是videoId这个参数。解释一下其他参数意义,v应该是播放器的版本,去掉也能播放;videoId当然就是视频Id了,configPath和widgetsConfig指向两个xml文件,很明显是决定了播放器配置属性,第一个待会说,第二个看了一下,貌似是决定的两侧的显示条目,如下图。videoCenterId应该是决定视频分类Id。


关于cntvOutSidePlayer.swf如何找到视频的原地址,我想到三种可能:
1.cntvOutSidePlayer.swf内部包含一个算法,把videoId这些参数经过一系列运算还原为真实地址,就类似迅雷快车这些专用地址,一转换就得到源地址。不过这里感觉可能性极小。如果是这样,可行解决方法是将swf反编译,看看算法流程。至于如何反编译,查了点资料,权当补充点课外知识了,写在下一篇文章。
2.受asp、php、jsp动态页面启发,这里也可能是将参数构造成数据库查询语句,带入数据库查询,得到视频地址。可能性比较大。如果真是这样,可行解决方法是将swf反编译,看看如何构造的语句,然后我们自己制作一个swf甚至asp、php页面来构造查询,然后显示地址。
3.提到前面的第一个xml文件,看下内容

  <?xml version="1.0" encoding="utf-8" ?>
- <data>
  <videoInfo parameter="videoId" parameter2="userid">http://bugu.cntv.cn</videoInfo>
  <interactiveInfo parameter="videoId" parameter2="userid">http://www./getInteractiveInfo.php</interactiveInfo>
  <rankingList>http://bugu.cntv.cn/hot/index.shtml</rankingList>
  <dig parameter="articleId" parameter2="oper" parameter3="url">http://ia.apps.cntv.cn/act/platform/subDCGrade.jsp</dig>
  <rate parameter="articleId" parameter2="gradeNum" parameter3="title" parameter4="type" parameter5="sorts" parameter6="url" parameter7="sysSource">http://ia.apps.cntv.cn/act/platform/subGrade.jsp</rate>
  <favorite parameter="videoid" parameter2="userid">http://www./favorite.php</favorite>
  <buguList parameter="videoid" parameter2="userid">http://www./buguList.php</buguList>
  <suggestion parameter="title" parameter2="content" parameter3="userId">http://bugu.cntv.cn/help_fankui/index.shtml</suggestion>
  <adplayer>http://player.cntv.cn/ad/cntvAdPlayer.swf</adplayer>
  <pauseAdplayer>http://player.cntv.cn/ad/cntvPauseAdPlayer.swf</pauseAdplayer>
  <adplayer>http://player.cntv.cn/adplayer/cntvAdPlayer.swf</adplayer>
  </data>

我对xml文件不了解,但其中这两行似乎很那什么

  <videoInfo parameter="videoId" parameter2="userid">http://bugu.cntv.cn</videoInfo>
  <interactiveInfo parameter="videoId" parameter2="userid">http://www./getInteractiveInfo.php</interactiveInfo>

应该大概也许可能是这样,swf将参数传入getInteractiveInfo.php(英语不过关,还特意百度了一下Interactive的意思,百度告诉我,这个单词的意思是交互,嘻嘻,看来这个页面就是“得到交互信息”),页面返回视频地址给播放器,这样和第二种假设差不多了,只不过多了一个环节,播放器把构造查询的任务交给了getInteractiveInfo.php。这个可能性应该相当大了。而userid可能由播放器传入,用来供getInteractiveInfo.php判断是谁来要视频文件,如果是swf,就给,如果是其他人,比如直接访问,就不给返回。这只是我的猜测。

分析暂时到此结束,有空再继续。

另外还有两点:
现在优酷,酷6这些视频站也都是类似向swf播放器传参数来播放视频文件,但是可以在缓存中找到视频文件,不知CNTV用了什么技术,就不行了,可能类似流媒体吧。这时迅雷的swf监视功能就不给力了,这样下载的只是swf播放器,视频文件得不到。

现在有一些影音嗅探软件,用了可能会有效果,但我一般不喜欢用一些乱七八糟的东西,就不测试了。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约