Archive for the ‘PHP’ Category

Megavideo Flv Php Script

Tuesday, March 17th, 2009

Here is a little gem I found one day. Don’t know what the hell I was looking for but I ended up finding this. What it does is simple: Lets say you named this php script “megavideo.php”, If you wanted to get the file, all you would have to do is go to the url you uploaded to and do this “megavideo.php?file=VIDEOID”. The videoid is the id of the video you want. Example: “http://www.megavideo.com/?v=5GB9TD59” <- the bolded part is the video id.

<?php
function mv_decrypt($str_hex, $key1, $key2){
$str_bin = "";
// 1. Convert hexadecimal string to binary string
for($i = 0; $i < 128; $i++){
$str_bin .= floor(hexdec($str_hex[floor($i/4)])/pow(2,(3-($i%4))))%2;
}
// 2. Generate switch and XOR keys
$key = Array();
for ($i = 0; $i < 384; $i++){
$key1 = ($key1 * 11 + 77213) % 81371;
$key2 = ($key2 * 17 + 92717) % 192811;
$key[$i] = ($key1 + $key2) % 128;
}
// 3. Switch bits positions
for ($i = 256; $i >= 0; $i--){
$temp = $str_bin[$key[$i]];
$str_bin[$key[$i]] = $str_bin[$i%128];
$str_bin[$i%128] = $temp;
}
// 4. XOR entire binary string
for ($i = 0; $i < 128; $i++){
$str_bin[$i] = $str_bin[$i] ^ $key[$i+256] & 1;
}
// 5. Convert binary string back to hexadecimal
$str_hex = "";
for($i = 0; $i < 32; $i++){
$str_hex .= dechex(bindec(substr($str_bin, $i*4, 4)));
}
// 6. Return counted string
return $str_hex;
}
 
// Is set the "file" variable?
if(isset($_GET["file"])){
// Does player send video position?
$pos = (isset($_GET["pos"]) ? intval($_GET["pos"]) : "");
//Obtain Megavideo ID from link
$megavideo_id = $_GET["file"];
// Obtain Megavideo XML playlist file
if ($content = @file_get_contents("http://www.megavideo.com/xml/videolink.php?v=".$megavideo_id)){
// Parameters which I want to obtain from XML;
$parameters = Array("un", "k1", "k2", "s", "size");
$success = true;
// Obtain parameters from XML one by one
for($i=0; $i<Count($parameters); $i++){
$success = $success && preg_match('/ ' . $parameters[$i] . '="([^"]+)"/', $content, $match);
$$parameters[$i] = $match[1];
}
if($success){
// Count "dkey" from obtained parameters
$dkey=mv_decrypt($un,$k1,$k2);
// set URL address of video file
$video_url = "http://www".$s.".megavideo.com/files/".$dkey."/".$pos;
// Send headers to browser
header("Content-Type: video/flv");
header("Content-Disposition: attachment; filename=video.flv;" );
header("Content-Length: ".$size);
// Read video file from Megavideo server
readfile($video_url);
}
}
}
?>

Source: Longtail Forum