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$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
}
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 = ‘‘ . $sid . ‘_'. $s4 . ‘/st/' . $encoded[1] . ‘/fileid/' . $file_id;
echo $d_ADDR . ‘?K=' . $key;
//最后把地址输出
请注意,由于Youku 更换算法/格式上面的方法已经不能处理所有情况,我来描述下现在的流程:
1.访问[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

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Sambungan fail dalam Python ialah akhiran yang dilampirkan pada penghujung nama fail untuk menunjukkan format atau jenis fail. Ia biasanya terdiri daripada tiga atau empat aksara, nama fail diikuti dengan noktah, seperti ".txt" atau ".py". Sistem pengendalian dan program menggunakan sambungan fail untuk menentukan jenis fail itu dan cara ia harus diproses. Diiktiraf sebagai fail teks biasa. Sambungan fail dalam Python adalah penting semasa membaca atau menulis fail kerana ia menetapkan format fail dan cara terbaik untuk membaca dan menulis data. Sebagai contoh, sambungan fail ".csv" ialah sambungan yang digunakan semasa membaca fail CSV dan modul csv digunakan untuk memproses fail. Algoritma untuk mendapatkan sambungan fail dalam Python Manipulasi rentetan nama fail dalam Python.

Gunakan fungsi math.Max untuk mendapatkan nilai maksimum dalam set nombor Dalam matematik dan pengaturcaraan, selalunya perlu mencari nilai maksimum dalam set nombor. Dalam bahasa Go, kita boleh menggunakan fungsi Max dalam pakej matematik untuk mencapai fungsi ini. Artikel ini akan memperkenalkan cara menggunakan fungsi math.Max untuk mendapatkan nilai maksimum dalam set nombor, dan memberikan contoh kod yang sepadan. Pertama, kita perlu mengimport pakej matematik. Dalam bahasa Go, anda boleh menggunakan kata kunci import untuk mengimport pakej, seperti yang ditunjukkan di bawah: import"mat

Google Authenticator ialah alat yang digunakan untuk melindungi keselamatan akaun pengguna dan kuncinya ialah maklumat penting yang digunakan untuk menjana kod pengesahan dinamik. Jika anda terlupa kunci Google Authenticator dan hanya boleh mengesahkannya melalui kod keselamatan, maka editor tapak web ini akan membawakan anda pengenalan terperinci tentang tempat untuk mendapatkan kod keselamatan Google. Saya harap ia dapat membantu anda tahu lebih lanjut Pengguna sila teruskan membaca di bawah! Mula-mula buka tetapan telefon dan masukkan halaman tetapan. Tatal ke bawah halaman dan cari Google. Pergi ke halaman Google dan klik pada Akaun Google. Masukkan halaman akaun dan klik Lihat di bawah kod pengesahan. Masukkan kata laluan anda atau gunakan cap jari anda untuk mengesahkan identiti anda. Dapatkan kod keselamatan Google dan gunakan kod keselamatan untuk mengesahkan identiti Google anda.

Mendapatkan semula elemen terakhir daripada LinkedHashSet dalam Java bermakna mendapatkan semula elemen terakhir dalam koleksinya. Walaupun Java tidak mempunyai kaedah terbina dalam untuk membantu mendapatkan semula item terakhir dalam LinkedHashSets, terdapat beberapa teknik berkesan yang memberikan fleksibiliti dan kemudahan untuk mendapatkan semula elemen terakhir ini dengan cekap tanpa melanggar perintah sisipan - satu kemestian bagi isu pembangun Java yang ditangani dengan berkesan dalam aplikasinya . Dengan menggunakan strategi ini secara berkesan dalam projek perisian mereka, mereka boleh mencapai penyelesaian terbaik untuk keperluan ini LinkedHashSetLinkedHashSet ialah struktur data yang cekap dalam Java yang menggabungkan HashSet dan

Walaupun operasi umum telefon mudah alih domestik sangat serupa, masih terdapat beberapa perbezaan dalam beberapa butiran Sebagai contoh, model dan pengeluar telefon mudah alih yang berbeza mungkin mempunyai kaedah pemasangan dwi-SIM yang berbeza. Telefon baharu Erzhenwo 12Pro juga menyokong dwi-SIM siap sedia, tetapi bagaimanakah dwi-SIM perlu dipasang pada telefon ini? Bagaimana untuk memasang dwi SIM pada Realme 12Pro? Ingat untuk mematikan telefon anda sebelum pemasangan. Langkah 1: Cari dulang kad SIM: Cari dulang kad SIM telefon Biasanya, dalam Realme 12 Pro, dulang kad SIM terletak di bahagian tepi atau atas telefon. Langkah 2: Masukkan kad SIM pertama Gunakan pin kad SIM khusus atau objek kecil untuk memasukkannya ke dalam slot dalam dulang kad SIM Kemudian, masukkan kad SIM pertama dengan teliti.

Saiz fail ialah jumlah ruang storan yang digunakan oleh fail tertentu pada peranti storan tertentu, seperti cakera keras. Saiz fail diukur dalam bait. Dalam bahagian ini, kita akan membincangkan cara melaksanakan program java untuk mendapatkan saiz fail yang diberikan dalam bait, kilobait dan megabait. Satu bait ialah unit terkecil maklumat digital. Satu bait bersamaan dengan lapan bit. Satu kilobait (KB) = 1,024 bait, satu megabait (MB) = 1,024KB, satu gigabait (GB) = 1,024MB dan satu terabait (TB) = 1,024GB. Saiz fail biasanya bergantung pada jenis fail dan jumlah data yang terkandung di dalamnya. Mengambil dokumen teks sebagai contoh, saiz fail mungkin hanya beberapa kilobait, manakala imej resolusi tinggi atau fail video mungkin

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Jika pilihan "Dapatkan kemas kini terkini sebaik sahaja ia tersedia" tiada atau dikelabukan, anda mungkin menjalankan versi Saluran Pembangun Windows 11, dan ini adalah perkara biasa. Bagi yang lain, isu timbul selepas memasang kemas kini KB5026446 (22621.1778). Berikut ialah perkara yang boleh anda lakukan untuk mendapatkan kembali pilihan "Dapatkan kemas kini terkini sebaik sahaja ia tersedia". Bagaimanakah saya boleh mendapatkan kembali pilihan "Dapatkan kemas kini terkini sebaik sahaja ia tersedia"? Sebelum memulakan mana-mana penyelesaian di bawah, pastikan anda menyemak kemas kini Windows 11 terkini dan memasangnya. 1. Gunakan ViVeTool untuk pergi ke halaman Katalog Kemas Kini Microsoft dan cari kemas kini KB5026446. Muat turun dan pasang semula kemas kini pada PC anda
