Итак, я работаю над проектом php, и одна его часть захватывает URL-адрес видео YouTube и вставляет его в тег html5. Я использовал curl call на http://youtube.com/get_video_info?video_id=XXX и получал правильные URL-адреса видеофайлов на своей локальной машине.
Но, когда я загрузил свой код на свой веб-сервер и попытался его запустить, ни один из URL-адресов видео не работал. URL-адреса выглядели прекрасно, но некоторые параметры, например IP, отличались друг от друга. Я не могу понять, почему он работает с моей локальной машины, запускающей xampp или mamp, но не на моем веб-сервере. Я даже попробовал просто сделать завиток на странице видео на YouTube и заметил, что локально он выводит страницу и воспроизводит видео, но на моем веб-сервере все видеозвонки получают 404s.
Любая информация об этом? В любом случае, я могу захватить URL-адрес видео YouTube, чтобы я мог воспроизводить видео на YouTube в видеотеге html5? Вот почему keepvid и подобные сайты используют проклятый java-апплет?
Вы должны взглянуть на проект youtube-dl. Я почти уверен, что вы можете принять определенную идею, чтобы понять правильный способ достижения своей цели.
Я создал скрипт в PHP для потоковой передачи видео в клиники в последнее время, и я думаю, изменив немного моего сценария, может соответствовать вашей цели.
Вот мой PHP-скрипт:
<?php @set_time_limit(0); //disable time limit to make sure the whole video is streamed to the client $id = $_GET['id']; //the youtube video ID $type = $_GET['type']; //the MIME type of the desired format parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$id),$info); //get video info $streams = explode(',',$info['url_encoded_fmt_stream_map']); //split the stream map into streams foreach($streams as $stream){ parse_str($stream,$real_stream); //parse the splitted stream $stype = $real_stream['type']; //the MIME type of the stream if(strpos($real_stream['type'],';') !== false){ //if a semicolon exists, that means the MIME type has a codec in it $tmp = explode(';',$real_stream['type']); //get rid of the codec $stype = $tmp[0]; unset($tmp); } if($stype == $type && ($real_stream['quality'] == 'large' || $real_stream['quality'] == 'medium' || $real_stream['quality'] == 'small')){ //check whether the format is the desired format header('Content-type: '.$stype); //send the HTTP headers header('Transfer-encoding: chunked'); //necessary for streaming @readfile($real_stream['url'].'&signature='.$real_stream['sig']); //send the content to the client ob_flush(); //disable PHP caching flush(); //flush the content out break; } } ?>
Надеюсь, это может вам помочь.
PS Вам необходимо отправить контент с сервера, потому что URL-адрес видео зависит от интернет-провайдеров.
Ссылка, которую вы извлекаете, работает только для IP-адреса, из которого вы его извлекли. Таким образом, если вы извлечете его из своего локального компьютера, он будет работать в браузере на вашем компьютере. Однако, если вы извлечете его со своего сервера, только сервер сможет получить доступ к видеофайлу из этой ссылки.
Вы можете использовать этот код для загрузки видео с YouTube:
<?php $id='5HDw7sQE2H0'; $dt=file_get_contents("http://www.youtube.com/get_video_info?video_id=$id&el=embedded&ps=default&eurl=&gl=US&hl=en"); $x=explode("&",$dt); $t=array(); $g=array(); $h=array(); echo "<pre>\r\n"; foreach($x as $r){ $c=explode("=",$r); $n=$c[0]; $v=$c[1]; $y=urldecode($v); $t[$n]=$v; } $streams = explode(',',urldecode($t['url_encoded_fmt_stream_map'])); foreach($streams as $dt){ $x=explode("&",$dt); foreach($x as $r){ $c=explode("=",$r); $n=$c[0]; $v=$c[1]; $h[$n]=urldecode($v); } $g[]=$h; } print_r($g); echo "\r\n</pre>"; ?>
Вы можете просто создать URL-адрес встраивания из идентификатора видео
Большим преимуществом здесь является то, что вы можете добавить свои собственные параметры игроку по мере необходимости.
Например, iframe src,
http://www.youtube.com/embed/ {$ video_id}? theme = light & autoplay = 1 & …
Возможно, соскабливание YouTube – не очень хорошая идея, вы должны взглянуть на официальный API: http://code.google.com/apis/youtube/overview.html
«API данных» кажется вам необходимым.