最近 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;
}
}
?>