28 марта, если тут имеются посетители моего сайта видео-концертов, то они (или вы ) заметили, что большая часть видео перестала показываться. Вместо обычной буфферизации, за которые следовало воспроизведение видео, пользователи получали сообщение о пыпытке соедениться, а затем ужасную красную надпись
) заметили, что большая часть видео перестала показываться. Вместо обычной буфферизации, за которые следовало воспроизведение видео, пользователи получали сообщение о пыпытке соедениться, а затем ужасную красную надпись «Не влезай, убьёт!» «error». Я написал разработчику плеера, он пообещал разобраться, но после двух суток проблема так и не была решена. К тому-же, общение с разработчиком было усложнено тем, что он иностранец и оно происходило на ломаном английском.
В итоге, я решил разбираться сам по двум причинам.
- Время шло, а большая часть видео не работало. Ппосетители пришедшие на сайт хотят смотреть видео прямо сейчас, а не ждать неопределённое время, следовательно я терял посетителей с каждым часом. К тому-же, как на зло, на вчера пришёлся рекорд посещаемости.
- Со временем всё сильнее и сильнее мне надоедало моё бессилие, к тому-же на сайте разработчика можно было скачать исходник данного скрипта. Да и php,можно сказать, родной мне язык т.к. многое я на нём сотворил, хотя на звание профи не претендую.
Скачав данный скрипт я начал разбиратся, но далеко я не ущёл т.к. увидел, что скрипт берёт данные из какого-то youtube‘овского url и проследовал по нему. Как оказалось, скрипт «высасывал» из данного url ключ сессии и путь к картинке-превью, а затем выводил их в удобном для флэш — xml виде. Я проверил работу скрипта — ключ он выводит и картинку тоже, но т.к. этот ключ главная задача скрипта, то я стал разбираться почему видео не показываются. Я отправился на videosaver.ru и вставив туда адрес ролика получил ссылку на скачивание, которую я сравнил со ссылкой, в которую подставил данные «высосанные» скриптом. В результате ссылка полученная скриптом — не работает, а с помощью videosaver.ru — работает. Но тут мне стало жутко лень разбираться почему скрипт не работает и я решил написать свой скрипт, который берёт данные немного из другого источника, а затем выводит их в том-же, более понятном для флэша, xml виде. Суть скрипта очень проста. Скрипту передаётся id видео ролика. Например, страница с видео имеет адрес
, а id данного видео будет
Используя этот id скрипт парсит (ранее «высасывает»http://www.zhitenev.ru/wp-includes/images/smilies/icon_mrgreen.gif) со страницы правильный, работающий ключ и возвращает его. Единственный минус моего скрипта в том, что он не возвращает адрес картинки-превьюшки, но это не критично, имхо. К тому-же, через 3 дня, когда сдам все зачёты, будет больше свободного времени и я доработаю свой скрипт. Тогда он не будет уступать своему со-брату, а именно: сделаю возможным выдачу адреса для картинки-превьюшки и возможность передачи ему, как id страницы, так и обычной ссылки на видео.
Вот сам скрипт.
Скрипт требует подключенную библиотеку curl.
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Content-type: text/xml");
$cUrl = curl_init();
$ur=$_GET['id'];
$urlAddress = "http://www.youtube.com/watch?v=".$ur."";
if (($html = urlGetContents($cUrl, $urlAddress)) === false) {
    print "Адрес <b>".$urlAddress."</b> в данный момент недоступен";
} else {
    print $html;
}
curl_close($cUrl);
function urlGetContents(& $cUrl, $url, $port = 80, $timeout = 5, $errCount = 1)
{
    curl_setopt($cUrl, CURLOPT_URL, $url);
    curl_setopt($cUrl, CURLOPT_PORT, $port);
    curl_setopt($cUrl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
    $content = curl_exec($cUrl);
    if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
        return (($errCount < 2) ? urlGetContents($cUrl, $url, $port, $timeout, ++$errCount) : false);
    } else {
        //return $content;
if(eregi("\"t\": \"(.*)\"", $content, $out)) {
$t=substr($out[1],0,44);
$iurl="";
$ur=$_GET['id'];
return '<xml><video video_id="'.$ur.'" iurl="'.$iurl.'" t="'.$t.'" /></xml>';
} else {
return '<xml><message error="Bad URL." /></xml>';
}
    }
}
?>
Если вы используете toobplayer, то в исходнике плеера, в параметрах компонента, укажите в поле youTubeProxy адрес к данному скрипту.
Скрипт давно не актуален к сожалению.. Может быть есть свежее решение?
Свежих решений нет, к сожалению. Из-за постоянных проблем с ютубом, пришлось отказаться от этого плеера в пользу другого, который использует ютуб апи, что гарантирует вечную работу плеера для воспроизведения роликов с ютуба.
А можно по-подробнее рассказать про плеер, который использует ютуб апи?
Ответ для Роман: к сожалению, нельзя, поскольку это было давно и сейчас он мог сильно измениться.