youtube如何锁定浏览器的直接链接?

时间:2012-12-10 19:13:07

标签: php youtube youtube-api

最近youtube改变了直接视频下载链接的工作方式(在url_encoded_fmt_stream_map中找到),现在有一个签名,除非出现正确的签名,否则链接不起作用 签名是一个'sig'参数,所以你可以很容易地接受它并构建链接并且它会起作用,但是自从这个签名出现以来链接也被锁定到用户的浏览器不知何故

意思是如果我在服务器端探测“http://youtube.com/get_video_info”并使用签名构建链接,然后在用户单击链接时将其打印为链接,则会打开黑色页面,但是我尝试在服务器端下载视频,它将起作用。 这意味着该链接以某种方式被锁定,属于打开“http://youtube.com/get_video_info”的用户

这种情况的问题是,为了流式传输视频,您必须先在服务器上下载它们

有谁知道这些链接是如何锁定到特定用户的,并且有办法实现吗?

这个想法是例如 - 你得到服务器端的链接然后你把它送到一些flash播放器,而不是使用无边框播放器

这是一个使用php的代码示例:

<?

$video_id = $_GET['id']; //youtube video id

// geting the video info
$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$video_id);
parse_str($content, $ytarr);

// getting the links
$links = explode(',',$ytarr['url_encoded_fmt_stream_map']);

// formats you would like to use
$formats = array(35,34,6,5);

//loop trough the links to find the one you need 
foreach($links  as $link){
     parse_str($link, $args);

     if(in_array($args['itag'],$formats)){

          //right link found since the links are in hi-to-low quality order 
          //the match will be the one with highest quality
          $video_url = $args['url'];

          // add signature to the link
          if($args['sig']){
            $video_url .= '&signature='.$args['sig'];
          }

          /*
          * What follows is three ways of proceeding with the link, 
          * note they are not supposed to work all together but one at a time
          */

          //download the video and output to browser
          @readfile($video_url); // this works fine
          exit;

          //show video as link
          echo '<a href="'.$video_url.'">link for '.$args['itag'].'</a>'; //this won't work
          exit;

          //redirect to video
          header("Location: $video_url"); // this won't work
          exit;
     }
}
?>

0 个答案:

没有答案