захват URL видео на YouTube из curl или get_video_info - PullRequest
10 голосов
/ 30 ноября 2011

Итак, я работаю над проектом php, и одна его часть - захват URL-адреса видео на YouTube и вставка его в тег HTML html5. Я использовал вызов curl для http://youtube.com/get_video_info?video_id=XXX и получал правильные URL-адреса видеофайлов на моей локальной машине.

Но когда я загрузил свой код на свой веб-сервер и попытался запустить его, ни один из URL-адресов видео не работал. URL-адреса выглядели хорошо, но некоторые параметры, такие как IP, где разные. Я не могу понять, почему это работает с моей локальной машины, на которой работает xampp или mamp, но не на моем веб-сервере. Я даже попытался просто свернуться на странице видео YouTube и заметил, что локально, он будет выводить страницу и воспроизводить видео, но на моем веб-сервере все видео звонки получили 404 с.

Любая информация об этом? Во всяком случае, я могу получить URL-адрес видео YouTube, чтобы я мог воспроизводить видео YouTube в тег видео HTML5? Вот почему keepvid и подобные сайты используют чертов Java-апплет?

Ответы [ 5 ]

10 голосов
/ 30 ноября 2011

Вам стоит взглянуть на проект youtube-dl . Я уверен, что вы можете подумать, чтобы понять, как правильно достичь цели.

6 голосов
/ 20 декабря 2012

Недавно я создал скрипт на PHP для потоковой передачи видео с YouTube на клины, и, думаю, немного изменив мой сценарий, можно будет соответствовать вашей цели.

Вот мой 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; 
    } 
}
?>

Надеюсь, это поможет вам.

P.S. Вам необходимо отправить контент с сервера, поскольку URL-адрес видео зависит от интернет-провайдера.

2 голосов
/ 03 февраля 2013

Ссылка, которую вы извлекаете, работает только для IP-адреса, с которого вы ее извлекли.Таким образом, если вы извлечете его с локального компьютера, он будет работать в браузере на вашем компьютере.Однако, если вы извлечете его со своего сервера, только сервер сможет получить доступ к видеофайлу по этой ссылке.

1 голос
/ 17 июня 2014

Вы можете использовать этот код для загрузки видео YouTube:

<code><?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
"; ?>
0 голосов
/ 27 мая 2015

Вы можете просто создать URL для встраивания из идентификатора видео

Большим преимуществом здесь является то, что вы можете добавлять свои параметры в плеер по мере необходимости.

Например, iframe src,

http://www.youtube.com/embed/{$video_id}?theme=light&autoplay=1&...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...