如何抓住Youtube下载链接解密由Youtube使用的密码?

时间:2014-09-22 14:53:39

标签: php video encryption youtube

我正在开发一个下载YouTube视频的小项目。我遇到了一个令人惊叹的网站:

http://vimow.com/watch?v=VID_ID_HERE

令人惊讶的是,每个视频都可以在这里使用干净的YouTube视频链接,但我无法弄清楚这家伙是如何干净地提取视频链接的。 (这适用于VEVO和Sony受版权保护的YouTube视频)

我用Google搜索并发现youtube已经安装了某些密码来编码其URL路径,并且有一个类似的脚本来解密它。我不确定如何实现它。我只能创建一组糟糕的代码,使用虚假的用户代理浏览到youtube的移动视图,只获得HD MP4链接。

我该如何实现?或者任何人都可以告诉我vimow网站是如何工作的?

对于那些对我的代码感兴趣的人,直到现在:

<?php

if(!empty($_GET['url'])) { 
    $url = "https://www.youtube.com/watch?v=".$_GET['url'];

$ch1= curl_init();
curl_setopt ($ch1, CURLOPT_URL, "$url" );
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1,CURLOPT_VERBOSE,1);
//curl_setopt($ch1, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5');
curl_setopt ($ch1, CURLOPT_REFERER,'http://www.google.com');  //just a fake referer
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1,CURLOPT_POST,0);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 20);

$htmlContent= curl_exec($ch1);;
$source = urldecode($htmlContent);

$downloadURL = explode('url_encoded_fmt_stream_map', $source);
$downloadURL = substr($downloadURL[1], 0, 15600);

    $downloadURL = explode("url=", $downloadURL);

    $mp4link = str_split($downloadURL[1]);

    $newmp4link = array();

    for($i=0;$i<count($mp4link);$i++) {
    array_push($newmp4link, $mp4link[$i]);
    if($mp4link[$i] == '\\' || $mp4link[$i] == ',') {
        break;
    }
    }

    $newmp4link = join("", $newmp4link);

    $newmp4link = str_replace("\\","", $newmp4link);
    $newmp4link = str_replace(",","", $newmp4link);
    $newmp4link = str_replace(";","", $newmp4link);

    $ext = "mp4";

 function generateRandomString($length) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
$rand = generateRandomString(100);
$target = "tmp/$rand.mp4";
copy($newmp4link, $target);
echo "$newmp4link";
header("Location: tmp/$rand.mp4");

?>

2 个答案:

答案 0 :(得分:1)

我是该网站的开发者之一,感谢提问。事实上,我们使用cypher算法进入YouTube视频,但由于硬限制,我们仍然需要流式传输大部分视频。在从文档中获取空白之前,每个ip的请求少于10k。 最后,流媒体通过我们庞大的服务器集群,我们设法基于它们成长。

我希望这能解决旧问题,并作为我们解决方案的补充。

答案 1 :(得分:0)

这是您获取YouTube视频的文件链接的方法。

http://youtube.com/get_video_info?video_id=XXX 

但是这个网站正在做一个技巧。他们不是从youtube流媒体,而是Google文档。所以他们的链接格式为http://blah.c.docs.google.com/videoplayback而不是http://blah.c.docs.googlevideo.com/videoplayback。我也在寻找这种方法。所以如果你能找到它让我知道