您当前的位置: 首页 > 网站编程 > PHP教程 > Youku 视频绝对地址获取的方法详解

Youku 视频绝对地址获取的方法详解

作者:不详 来源:网络 发布时间: 2014-08-19 09:12 点击:
前一阵子为了研究 KnLiveCommentary 而进行了一系列的关于视频站点的研究。由于KnLiveCommentary需要能够获取充足的视频源进行测试,所以我们选取了 Youku(优酷)一个比较大的视频网站来进行测试。 其实开始研究解析绝对地址也是为了研究Youku 的自带播放器,顺便去除

Youku 视频绝对地址获取的方法详解

  前一阵子为了研究 KnLiveCommentary 而进行了一系列的关于视频站点的研究。由于KnLiveCommentary需要能够获取充足的视频源进行测试,所以我们选取了 Youku(优酷)一个比较大的视频网站来进行测试。

  其实开始研究解析绝对地址也是为了研究Youku 的自带播放器,顺便去除广告什么的。后来我们就把Youku 的播放器用 ASV6 (ActionScript Viewer 6)“反编译”了一下,达到了惊人的效果。

  Youku的视频采取了加密+动态的获取方式,视频地址需要访问网站动态获取,而结果则还需经过解密等操作。

  复制代码 代码如下:

  $base_url = 'http://v.youku.com/player/getPlayList/VideoIDS/'; //获取视频信息的地址 基地址

  $_VIDEO_ID = $_GET['vid']; //从GET里面把Video Id提取

  if($_VIDEO_ID=='')

  $_VIDEO_ID = 'XMjY0ODE1MDA0'; //我比较懒,测试的时 候就固定了一个

  $ch = curl_init(); //开启cURL对象

  curl_setopt($ch, CURLOPT_URL, $base_url . $_VIDEO_ID); //获取这个视频的信息的地址

  curl_setopt($ch, CURLOPT_HEADER, 1); //要 HEADER

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($ch, CURLOPT_REFERER, 'http://v.youku.com/v_show/id_' . $_VIDEO_ID); //给一个假的"REFERER"

  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //把现在的浏览器User Agent传递给服务器

  curl_setopt($ch, CURLOPT_NOBODY, 0);

  $content = curl_exec($ch); //执行!!!

  curl_close($ch); /*下面解析*/

  preg_match(‘~”seed”s*:s*(d+)s*,~iUs',$content,$seed);

  preg_match(‘~{s*”(flv|mp4)”s*:s*”(.*)”s*}~iUs',$content,$encoded);

  preg_match(‘~”key1″s*:s*”(.*)”s*,~iUs',$content,$key1);

  preg_match(‘~”key2″s*:s*”(.*)”s*,~iUs',$content,$key2);

  //从返回的JSON串中提取必要信息 seed, encoded_url, key1, key2

  class decoder{

  var $randomSeed = 0;

  var $cg_str=”";

  function __construct($seed){

  $this->randomSeed = $seed;

  }

  function ran(){

  $this->randomSeed = (($this->randomSeed * 211)+30031)%65536;

  return ($this->randomSeed / 65536);// 根据旧的 Seed 计算新的Seed,并且返回一个Seed的比例位置 [0,1)

  }

  function cg_hun(){ //估计这个叫 “CG混”,反正ASV解的函数就是这个名字

  $this->cg_str="";

  $sttext = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/:._-1234567890'; //默认字符串(最大)

  $len = strlen($sttext); //获取其长度

  for($i=0;$i<$len;$i++){

  $cuch = (int)($this->ran()*strlen($sttext)); //获取字符串 Seed比例 位置的字符下标

  $this->cg_str.=$sttext[$cuch]; //把字母读出来

  $sttext = str_replace($sttext[$cuch],”,$sttext); //删掉这个读出来的字母(到 0 就停)

  }

  }

  function decode($string){

  $output=”";

  $this->cg_hun();

  $expl = explode(‘*',$string); //把 1*23*34*45*56* 这个字符串打散

  for($i=0;$i<count($expl)-1;$i++){

  $output.=$this->cg_str[(int)$expl[$i]]; //获取数字位代表的 cg_hun 打乱字符串字符,自此解密完成

  }

  return $output; //OK拉

  }

  function decode_key($key1,$key2){

  $key = hexdec($key1); //两个Key都是HEX

  $key = $key ^ -1520786011; //这个原来也是个8 位HEX,后来被我用计算器算了数值,因为这样方便PhP位运算

  return $key2 . dechex($key); //合成最终 Key

  }

  }//解密类,用这个很方便$new = new decoder((int)$seed[1]);

  $fileid = $new->decode($encoded[2]);

  $key = $new->decode_key($key1[1],$key2[1]);

  //把数据喂进去,计算//地址载构成

  $s7 = substr($fileid,10,strlen($fileid));

  $s5 = substr($fileid,0,8);

  $s6 = substr($fileid,6,2);

  // 拆开$s4 = '00′;//注意这是一个 HEX 值,即00表示视频第一个分段,01第二个 0f第十五个…依此类推$sid = time() . mt_rand(10,99) . '1000′ . mt_rand(30,80) . '00′;//获取一个随机的SID,给服务器(其实不会被检查)

  $d_ADDR = ‘http://f.youku.com/player/getFlvPath/sid/‘ . $sid . ‘_'. $s4 . ‘/st/' . $encoded[1] . ‘/fileid/' . $file_id;

  echo $d_ADDR . ‘?K=' . $key;

  //最后把地址输出

  请注意,由于Youku 更换算法/格式上面的方法已经不能处理所有情况,我来描述下现在的流程:

  
1.访问http://v.youku.com/player/getPlayList/VideoIDS/[ID]

  2.获得文件,同时解析”streamfileids”:{“flv”:”加密地址”,”mp4″:”加密地址”,”等等等”:”加密地址”

  3.按照上面的方法破解加密地址

  4.获取分段数目和K

  {“mp4″:[{“no”:”0“,”size”:”18367795″,”seconds”:”421″,”k”:”281ff2875db680bb261c02ce“},{“no”:”1“,”size”:”19045091″,”seconds”:”421″,”k”:”45398cdd4aa44968261c02ce“},

  ……

  5.合成地址,不过每个分段的K都采用上面获得的新K
分享到:
本文"Youku 视频绝对地址获取的方法详解"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4