天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

php技術Youku 視頻絕對地址獲取的方法詳解,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线观看视频中文字幕 | 亚洲H成年动漫在线观看不卡 | 久久两性视频 | 亚洲午夜福利未满十八勿进 | 国产香蕉视频 | 99热视频这里只有久久精品 | 人成午夜免费视频 | 亚洲午夜性春猛交XXXX | 特黄AAAAAAA片免费视频 | 色婷婷99综合久久久精品 | 男男校园园bl文全肉高h寝室 | 港台三级大全 | 国产精品免费久久久久影院 | 男女又黄又刺激B片免费网站 | 亚洲人成网站在线观看90影院 | 91热久久免费精品99 | 久久精品亚洲精品国产欧美 | 国产成人在线播放视频 | qvod电影资源 | 蜜臀亚洲AV永久无码精品老司机 | 国产精品丰满人妻AV麻豆 | 国产精品久久久久久亚洲影视 | 中文字幕一区久久久久 | 国产真实女人一级毛片 | 十八禁啪啦啪漫画 | 健身房被教练啪到腿软H | 高清毛片一区二区三区 | 日本真人啪啪试看30秒 | 男人插曲女人的视频 | 稚嫩挤奶h调教h | 久久综合色一综合色88中文 | RUN AWAY无删减全集动漫 | 亚洲精品国产品国语在线试看 | 精品日韩二区三区精品视频 | 国产在线观看黄 | 美国ZOOM动物在线观看 | 99er热精品视频国产免费 | 德国美女密密麻麻浓毛 | 看电影来5566一区.二区 | 嫩草影院地址一地址二 | 亚洲国产成人精品无码区99 |