Создаем собственный YouTube
Евгений Зобнин (j1m@synack.ru)
Сегодня во всемирной паутине видео находится на пике своей популярности, каждый день рождаются новые видеохостинги, интернет-телеканалы, возможности обмена видеоматериалами встраиваются в социальные сети. Это невероятно прибыльная ниша, и оставаться в стороне от нее — непозволительная роскошь. Из этой статьи ты узнаешь, как работает видеохостинг, и получишь пошаговые инструкции по созданию своего сервиса наподобие ютуба.
Содержание:
- Видео на сайте
- Свой YouTube
- Как это работает
- PHPmotion — мультимедиа-сервис из коробки
- Выводы
- Боковые выносы
Есть несколько способов организовать показ видео на твоем сайте. Наиболее простой и менее затратный с точки зрения финансов заключается в использовании API сторонних видеосервисов (таких, как ) для встраивания видео в страницу.
В первом случае этот подход выглядит просто как подключение специального плагина к CMS (например, Embedded Media Field для Drupal), который как раз и позволяет проигрывать видео, опубликованное на одном из видеосервисов. Однако в этой схеме есть серьезный минус, который заключается в том, что для публикации видео на твоем сайте пользователю придется сначала перейти на сайт видеосервиса, залить видео, скопировать ссылку, передать ее тебе, после чего ты сможешь скормить ее плагину, который встроит видео в сайт.
Минус можно превратить в плюс, если воспользоваться другим плагином, предназначенным для заливки видео на различные сервисы (например, плагин Video Upload для Drupal). Это позволит тебе и другим пользователям воспользоваться специальной формой для заливки своего видео, а при некоторой доработке и скрещивании с плагином для показа видео, и для автоматического встраивания его в страницу.
Использование сторонних сервисов позволит получить нужную функциональность без каких-либо денежных вложений, покупки выделенного сервера и с минимальными трудозатратами. Но здесь есть несколько проблем: а) большинство видеосервисов накладывают ограничение на используемый тобой контент, включая запрет на его трансляцию в коммерческих целях; б) видеосервисы обычно вставляют рекламу, полупрозрачные копирайты и т.п. в распространяемые ими ролики; c) ссылки будут вести на сайт-источник видео, что будет свидетельствовать о дешевизне твоего сайта.
Чтобы обойти и эти проблемы, можно обратиться к профессионалам — компаниям-видеопровайдерам, которые позволят тебе создать полноценный видеопроект с подогнанным под дизайн сайта флеш-плеером, возможностью кодирования видео в любой указанный тобой формат, необходимыми инструментами для загрузки роликов, предоставят инструменты для ведения статистики, редактирования роликов, вставки рекламы и многого другого.
Цены за услуги подобного провайдера хоть и кусаются (в среднем несколько сотен долларов в месяц), но вполне приемлемы для компаний, не имеющих собственных специалистов или времени для создания полноценного видеосервиса.
Если же и этот вариант не годится, то единственный верный путь — создание собственного видеосервиса, что вполне по силам грамотному сисадмину и небольшой команде web-девелоперов.
Итак, ты решил остановиться на создании своей версии YouTube с блэкджеком и клубничкой. Поэтому для начала тебе понадобится мощный выделенный сервер с объемным хранилищем данных (нескольких Тб хватит для начала). Хостинги отметаются сразу, потому как: а) видеосервис создает существенные нагрузки, и большинство хостеров просто не смогут предоставить тебе достаточных мощностей, и б) для организации видеосервиса на сервер должны быть предустановлены некоторые не совсем стандартные софтины, например mencoder или ffmpeg.
Далее, ты должен определиться с тем, в каком формате посетители будут получать контент с твоего ресурса. Ясно, что лучше использовать FLV, но FLV — всего лишь контейнер, внутри которого хранится видео, закодированное выбранным тобой кодеком. В простейшем случае это будет H.263, то есть MPEG-1 или MPEG-2 с битрейтом порядка 100 Кбит/с. Сжатые с помощью H.263 ролики характеризуются малым весом и низким качеством, благодаря чему могут передаваться по низкоскоростным каналам связи, проигрываться на маломощных устройствах, но в то же время они очень убоги в визуальном плане. YouTube и большинство других видеохостингов использует H.263 по умолчанию.
Начиная с девятой версии, флеш-плеер от Adobe поддерживает также и кодек H.264, более известный под именами AVC и MPEG-4 Part 12. H.264 позволяет передавать ролики в достаточно высоком качестве, ценой чему будет невозможность его проигрывания на маломощных устройствах (смартфоны, некоторые нетбуки). В то же время вес ролика может оставаться прежним.
Некоторые видеохостинги (тот же YouTube) кодируют заливаемое на его сервера видео одновременно двумя кодеками: H.263 и H.264. Благодаря этому пользователь в праве сам выбрать качество просматриваемого ролика. Но есть и другая сторона медали: такое «двуличие» создает большую нагрузку на сервер, поскольку теперь требуется два прогона кодировщика (причем кодировщик H.264 съедает гораздо больше процессорных ресурсов и памяти) и больший объем дисковой памяти.
Третье, ты должен создать соответствующую инфраструктуру для кодирования роликов и отдачи их посетителям. Это инфраструктура должна включать в себя движок перекодировки, базу данных, флеш-плеер, а также всю наружную обертку сайта.
Движок для кодирования видео обычно строится поверх знакомых всем юниксоидам универсальных инструментов для обработки видео — ffmpeg, mencoder, или коммерческого решения под названием .
База данных используется для хранения информации о роликах, посетителях, популярности и всем том, что может понадобиться для ведения статистики. Флеш-плеер может быть выбран, исходя из личных предпочтений, хотя обычно выбор падает на , полностью открытый и бесплатный для некоммерческого использования, но стоящий денег (совсем небольших, надо сказать) в случае применения для создания коммерческих сайтов.
Для объединения всего этого вместе может быть использована почти любая CMS, имеющая специальные плагины, предназначенные для создания системы распространения видеоконтента. Такие плагины есть для Drupal, Joomla и многих других. При правильной переработке они легко превратятся в то, что нужно конкретно тебе. Кроме того, существует множество скриптов (в большинстве своем платных), которые можно использовать в качестве фундамента будущего сайта: , , .
К сожалению, для описания всех этапов создания видеохостинга потребовалась бы целая книга, поэтому в этом разделе я дам лишь краткое описание того, как работает простейшая система потокового вещания видео в стиле Web 2.0.
Все начинается с заполнения посетителем специальной формы, значения полей которой передаются скрипту, осуществляющему загрузку видео с машины клиента и помещающему его в некое хранилище на сервере. Имя посетителя, раздел, куда следует поместить ролик, и другие данные записываются в базу данных. Далее происходит вызов скрипта, ответственного за перекодировку видео. Он исполняет примерно такую команду:
# mencoder input.avi -ofps 12 -o video.flv -of lavf -lavfopts \ i_certify_that_my_video_stream_does_not_use_b_frames -oac lavc -lavcopts \ acodec=mp3:abitrate=32 -srate 22050 -ovc lavc -lavcopts vcodec=flv:\ vbitrate=100:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:\ vmax_b_frames=0:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2 \ -vop scale=360:240
Где опции vbitrate=100 и scale=360:240 задают битрейт, равный 100 Кбит/с (оптимальный вариант для соединений в 128 Кб/с) и размер 360:240. Ролик помещается в отдельное хранилище, его метаданные и место размещения заносятся в БД, оригинал удаляется (или остается на месте).
Теперь, когда информация о ролике есть в БД, любой посетитель, набравший имя ролика в форме поиска или перешедший на страницу с перечислением последних добавленных роликов, может увидеть ссылку на него (естественно, она генерируется на лету, используя значения БД).
После перехода по предложенной ссылке пользователь попадает на страницу, содержащую описание ролика и окно флеш-плеера, в котором начинает загружаться видео. Обычно это полностью генерируемая с нуля страница, содержащая примерно такой код:
<!-- Создаем контейнер для объекта -->
<div id="container"><a href="http://get.adobe.com/flashplayer">Get the Flash
Player</a> to see this player.</div>
<!-- Импортируем javascript -->
<script type="text/javascript" src="./javascript/swfobject.js"></script>
<script type="text/javascript">
/* player.swf - главный объект для загрузки flv */
var object1 = new SWFObject('./javascript/player.swf','mediaplayer',
'400','300','8');
object1.addParam('allowscriptaccess','always');
object1.addParam('allowfullscreen','true');
object1.addVariable('width','360');
object1.addVariable('height','300');
/* Шкурка плейера */
object1.addVariable("skin", "./skin/fashion.swf");
/* Превью */
object1.addVariable('image','./video/preview.jpg');
/* Источник видео */
object1.addVariable('file','../video/YupiSugianto.flv');
/* Имя контейнера */
object1.write('container');
</script>
И это, как ни странно, все. Превью ролика, обычно отображаемое во время его загрузки, а также на страницах поиска и в списках роликов, генерируется все тем же скриптом-кодировщиком, а его адрес помещается в БД.
Это самый примитивный вариант видеохостинга, размещенного на одной машине. Он не способен выдержать какой бы то ни было высокой нагрузки и легко загибается во время заливки на сайт сразу нескольких роликов. Некоторые скрипты и специализированные CMS позволяют запускать перекодировщик во время наименьшей нагрузки или по расписанию cron, чтобы хоть как-то повысить жизнеспособность сервиса во время множественных загрузок, но это спасает лишь на первых порах.
Хостинг с высокой посещаемостью использует распределенную систему обработки запросов, отдачи результатов и загрузки файлов для поддержания сервиса на плаву. Организована она примерна так:
1. Выделенная машина или несколько машин выступают в роли фронтендов — серверов, играющих роль «лица» сервиса. Они предназначены только для просмотра HTML-содержимого сайта (но не самих роликов).
2. Множество машин используются для хранения контента. Открывая видеоролик через веб-интерфейс сервера-фронтенда, посетитель фактически получает видео с одного из этих серверов.
3. Для кодирования видео используется другая сеть серверов. Загруженное пользователями видео попадает на один из data-серверов, описанных во втором пункте. После этого запрос на декодирование уходит к наименее загруженному вычислительному серверу (compute node), ответственному за преобразование видео в FLV. Закончив процесс кодинга, он загружает результат обратно на data-сервер, извещает об этом фронтенд, который теперь может показать ролик всем посетителям сайта.
Описанная схема, конечно, намного более сложна и обычно включает в себя сеть так называемых «управляющих серверов», отвечающих за консолидацию работы и связь всех машин сети в единую систему, а также технологии, используемые в GRID и облачных вычислениях. Часто в качестве хранилища данных, как впрочем и вычислительных серверов, используются сервисы Amazon, которые уже имеют стойкую, проверенную временем инфраструктуру, позволяющую без лишних танцев с бубном объединить машины в единый кластер.
PHPmotion — мультимедиа-сервис из коробки
Самые ленивые могут воспользоваться готовыми решениями для организации видеохостинга, называемыми Media Sharing CMS. Они предлагают уже сформированную и отлаженную инфраструктуру для организации различных мультимедиа-порталов, таких как видеохостинги, сервисы хранения и обработки изображений, а также веб-радиостанции. Наиболее популярное решение из этой области — .
PHPmotion — это мультимедиа-сервис из коробки, уже готовый к использованию веб-сайт, позволяющий посетителям загружать видео (поддерживаются почти все кодеки и контейнеры) и аудиофайлы, просматривать видео/изображения, прослушивать аудио, оставлять комментарии, видеть статистику просмотров, списки наиболее популярного контента, организовывать группы по интересам, вести тематические блоги, общаться с другими пользователями. Гибкая панель администрирования позволяет управлять всем этим через web-интерфейс, а система шаблонов — подогнать сайт под любой дизайн. Перед установкой ты можешь ознакомиться с возможностями PHPmotion, перейдя на тестовую площадку .
Перед развертыванием PHPmotion нужно позаботиться об установке на сервер следующих компонентов:
PHP 4.3 или выше для версии 2 и PHP 5 для версии 3 (с поддержкой CLI) MySQL Mp3-кодер LAME Libogg и Libvorbis Mencoder и Mplayer FFMpeg-PHP php-gd версии 2 или выше
В Ubuntu Linux все это компоненты уже есть в репозитории, поэтому для их установки достаточно выполнить одну команду:
$ sudo apt-get install \
mysql-server mysql-client lame libogg0 \
libvorbis libvorbis0 mplayer mencoder \
apache2 php5 php5-gd php5-ffmpeg php5-mysql \
php5-cli libapache2-mod-auth-mysql
Кроме дополнительных пакетов, PHPmotion требует особой настройки PHP, конфигурационный файл которого должен включать следующие строки:
$ sudo vi /etc/php5/apache2/php.ini open_basedir = upload_max_filesize = 100M post_max_size = 100M max_execution_time = 1500 session.gc_maxlifetime = 14000 safe_mode = off enable_dl = On
Где upload_max_filesize — это максимальный размер загружаемого файла, post_max_size — максимальный размер POST’а, max_execution_time — максимальное количество секунд, в течение которых может исполняться скрипт, session.gc_maxlifetime — временной интервал между запусками сборщика мусора. Опция enable_dl активирует функцию dl(), необходимую для загрузки сторонних бинарных модулей PHP.
После окончания установки и конфигурирования скачай дистрибутивный пакет и распакуй его в каталог /var/www:
$ cd /var $ sudo unzip /путь/к/phpmotion.zip -x $ sudo rm -rf www $ sudo mv phpmotion www $ sudo chmod -R 755 www/cgi-bin
Если ты загружаешь файлы, используя FTP, позаботься о том, чтобы следующие файлы и каталоги были загружены в бинарном режиме:
- /phpshiled/
- /classes/config.php
- /addons/customprofile/pimp.class.php
- /addons/customprofile/index.php
Они закодированы с помощью PHP-модуля PHPshield, который есть в дистрибутиве PHPmotion. Скопируй его в каталог /usr/lib/php5/20060613+lfs:
$ sudo cp www/phpshield/phpshield.5.2.lin /usr/lib/php5/20060613+lfs
И добавь в конец файла /etc/php5/apache2/php.ini следующую строку:
extension=phpshield.5.2.lin
По умолчанию Apache в Ubuntu (и Debian) настроен на поиск каталога cgi-bin в /usr/lib, поэтому конфигурацию придется изменить. Открой файл /etc/apache2/sites-enabled/000-default и замени строки /usr/lib/cgi-bin на /var/www/cgi-bin.
PHPmotion использует apache-модуль mod_rewrite, поэтому его вызов необходимо добавить в конфиг apache2:
$ sudo a2enmod rewrite $ sudo /etc/init.d/apache2 restart
Далее открой в браузере страничку www.твой-сайт.com/setup и следуй инструкциям помощника. Он проведет тебя через финальные этапы настройки, которые включают настройку доступа через FTP, установку правильных прав доступа на файлы и каталоги PHPmotion, настройку доступа к базе MySQL, ввод пароля и почтового ящика администратора и указание дополнительной информации о сайте. После этого удали каталог /var/www/setup (иначе PHPmotion запретит тебе вход).
Это, в общем-то, все. Панель администратора находится по адресу www.твой-сайт.com/siteadmin. С ее помощью можно произвести множество настроек, включая внутренние настройки PHPmotion, настройки движка перекодировки (например, битрейт, размер видео), натянуть шкурки, управлять контентом и многое другое.
Web уже перестал быть статичным и сегодня постепенно превращается в мощнейшую мультимедийную систему, позволяющую просматривать видео, слушать музыку, играть в игры, проводить видеоконференции. Телевидение и радио умирают, уступая место интерактивным интернет-технологиям, с помощью которых любой человек на Земле может организовать собственный телеканал или радиостанцию, сделать их популярными и зарабатывать деньги. Почему бы не воспользоваться такой возможностью? Тем более что, как ты смог убедиться, создать свой телеканал не так уж и сложно.
INFO
-
PHPmotion использует движок шаблонов TinyButStrong (), достаточно гибкий, но простой.
-
Пример кодинга видео с использованием ffmpeg:
$ ffmpeg -i video.avi -ar 22050 -ab 32k -f flv -b 100k \ -s 320x240 -y video.flv
WWW
- Некоторые видеопровайдеры:
- Дополнительные темы для PHPmotion лежат по адресу .
-
Многофункциональный модуль для Drupal, превращающий сайт в видеохостинг: .
Статья опубликована в декабрьском номере журнала «Xakep» за 2009 год.





Отличная статья.
Однако установить пхпмоушн по ней не удалось — Unable to load dynamic library ‘/usr/lib/php5/20060613/phpshield.5.2.lin
Хотя делал все по инструкции.
Возможно причина в том, чот у меня убунта 64 битная.
Автору респект.