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 адрес к данному скрипту.
Скрипт давно не актуален к сожалению.. Может быть есть свежее решение?
Свежих решений нет, к сожалению. Из-за постоянных проблем с ютубом, пришлось отказаться от этого плеера в пользу другого, который использует ютуб апи, что гарантирует вечную работу плеера для воспроизведения роликов с ютуба.
А можно по-подробнее рассказать про плеер, который использует ютуб апи?
Ответ для Роман: к сожалению, нельзя, поскольку это было давно и сейчас он мог сильно измениться.