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

Php youtube如何锁定与浏览器的直接链接?,php,youtube,youtube-api,Php,Youtube,Youtube Api,最近,youtube改变了直接视频下载链接的工作方式(在url_编码的_fmt_stream_地图中可以找到),现在有一个签名,如果没有正确的签名,链接就无法工作 签名是作为“sig”参数存在的,因此您可以轻松地接受它并构造链接,它将工作,但是自从出现此签名后,链接也以某种方式锁定到用户的浏览器 意思是如果我调查”http://youtube.com/get_video_info“在服务器端,创建带有签名的链接,然后将其打印为链接,当用户单击该链接时,将打开一个黑色页面,但是如果我尝试在服务器端

最近,youtube改变了直接视频下载链接的工作方式(在url_编码的_fmt_stream_地图中可以找到),现在有一个签名,如果没有正确的签名,链接就无法工作 签名是作为“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;
     }
}
?>

也许它使用的是会话ID。我猜签名或签名的一部分可能就是会话ID(coockies不算在内,所以用户不会拥有它,这就是为什么会失败),一旦打开链接,它会检查seision是否存在且未过期,并确定是否是创建链接的同一用户;最棘手的部分是他们用什么来识别,你能不能让用户看起来像你的服务器或者更像它让服务器看起来像用户截至2016年,我无法让签名在同一浏览器/会话中工作。它对你仍然有效吗?解决了这个问题,我想知道他们是怎么做的。