Возможно ли и насколько сложно организовать видеохостинг на собственном сайте? Это вполне осуществимо, а вот вопрос о сложности каждый должен решить для себя сам. Мы рассмотрим вариант создания собственного видеосервиса на базе CMS Drupal.

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

Мы будем рассматривать процесс создания такого видеосервиса на базе CMS Drupal версии 5.3, функционирующей в операционной системе Ubuntu 8.04 Hardy Heron или Debian Etch.

Нам придется выполнить следующие действия:

  • установить ПО для конвертации видеофайлов;
  • установить и настроить необходимые модули Drupal;
  • задать ряд серверных параметров;
  • создать необходимые шаблоны узлов и страниц;

n используя Views (компонент Drupal для визуализации контента), создать блоки и страницы, в которых будут отображаться списки узлов, содержащих видеоматериалы.

В Интернете можно найти несколько действующих проектов, где работает видеохостинг, созданный на Drupal.

Кратко о формате FLV

Большинство популярных видеосервисов (например, YouTube и его многочисленные подражатели) используют для передачи потокового видео в Интернете формат FLV (Flash Video).

Как следует из названия, для передачи видео используется технология Adobe Flash и плагины — сейчас они есть для большинства браузеров. Благодаря этому файлы в формате FLV пригодны для просмотра практически в любой операционной среде. Помимо браузеров формат поддерживают многие программы для просмотра видео. Он частично проприетарный: кодеки закрыты и защищены патентами, контейнер открытый.

С позиции пользователя формат представляется весьма неоднозначным: по задумке разработчиков он должен предотвратить скачивание видео на компьютер и затруднить его конвертацию, тем самым препятствуя дальнейшему распространению видеоклипов. В то же время он предоставляет большие возможности по совместимости с различными пользовательскими операционными системами и средствами просмотра. Кроме того, такой подход весьма удобен для одноразовых просмотров — в самом деле, нет никакой нужды перекачивать на свою машину клип, который сегодня посмотришь, а завтра забудешь.

С технической точки зрения FLV-файл представляет собой битовый поток, являющийся вариантом видеостандарта H.263 — стандарта сжатия видео, предназначен-ного для передачи по каналам с низкой пропускной способностью (128 кбит/с и ниже). Он же используется в программном обеспечении для проведения видеоконференций. Звук обычно кодируется в MP3; кроме него могут использоваться несжатый звук, Nellymoser codec, а также формат ADPCM.

Для онлайн-просмотра FLV-видео требуется Flash-проигрыватель, внедренный в соответствующую веб-страницу. С точки зрения HTML он выглядит как обычный Flash-объект.

В общих чертах организация собственного видеохостинга происходит следующим образом: пользователь закачивает на сервер исходный файл, на сервере происходит его перекодировка в формат FLV, генерируется стоп-кадр, который в дальнейшем используется как заставка и минимизированная картинка (thumbnail). Исходный файл по желанию разработчика или сохраняется, или удаляется ради экономии дискового пространства. Из стоп-кадров, которым можно назначать ссылки на соответствующие страницы с видеоклипами, в дальнейшем можно сформировать ленту видеоматериалов и разместить ее, например, на главной странице сайта.

Подготовка конвертера видеофайлов

Первое, о чем сразу надо предупредить: для дальнейшей работы потребуются права администратора (root), так как на сервер придется ставить дополнительное ПО — то есть про все виртуальные хостинги следует забыть сразу. Сервер потребуется как минимум выделенный, а лучше свой собственный. Помимо необходимости в установке дополнительного софта, есть и другие причины для покупки собственного сервера: во-первых, перекодировка видео — достаточно ресурсоемкая задача, налагающая определенные требования на мощность процессора и объем памяти, во-вторых, дискового пространства в любом случае потребуется «чем больше, тем лучше».

Итак, прежде всего нам следует установить конвертер видеофайлов. Воспользуемся набором свободных библиотек с открытым исходным кодом FFmpeg, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах.

Как и любую программу для Linux, FFmpeg можно взять из репозитория (онлайнового архива ПО) или же самостоятельно собрать из исходных файлов. Разработчики FFmpeg рекомендуют последний вариант с использованием свежих версий, выложенных в системе Subversion, хотя и установка из хранилища не таит в себе подводных камней — по крайней мере в моей практике их ни разу не возникало.

В обоих случаях придется подключить дополнительные хранилища с необходимыми кодеками. Эти репозитории закрыты (их обозначают non-free), так как в них хранится ПО с закрытым исходным кодом, в частности нужный нам кодек libmp3lame.

В случае Ubuntu 8.04 Hardy Heron в файл sources.list надо добавить строку:

deb http://packages.medibuntu.org/ hardy free non-free

Кстати, FFmpeg также можно взять из этого закрытого репозитория, тогда проблем с кодеками не возникнет. Правильная конфигурация FFmpeg (в Ubuntu 8.04) выглядит следующим образом:

— enable-gpl — enable-pp — enable-swscaler — enable-pthreads — enable-libvorbis — enable-libtheora — enable-libogg — enable-libgsm — enable-dc1394 — disable-debug — enable-libmp3lame — enable-libfaadbin — enable-libfaad — enable-libfaac — enable-xvid — enable-x264 — enable-liba52 — enable-amr_nb — enable-amr_wb — enable-shared — prefix=/usr

Сама FFmpeg имеет множество разных опций; к ее настройке мы еще вернемся.

Настройка параметров веб-сервера

Видеофайлы, как правило, не отличаются компактностью. Веб-сервер и CMS должны быть специально настроены для работы с файлами большого размера.

Прежде всего в файле php.ini или в корневом .htaccess необходимо указать следующие параметры:

post_max_size — максимальный допустимый размер POST-данных (в мегабайтах); рекомендуемое значение — не меньше 100 Мбайт.

Синтаксис: post_max_size=100M

upload_max_filesize — максимальный размер закачиваемого файла; должен быть меньше или равен post_max_size.

Синтаксис: upload_max_filesize=100M

max_execution_time — максимальное разрешенное время выполнения скрипта (в секундах); нужен для файлов, конвертация которых занимает много времени; рекомендуемое значение — не меньше 1000 с. Синтаксис: max_execution_time=1000

max_input_time — максимальное разрешенное время (в секундах), в течение которого скрипту разрешается анализировать входные данные; нужен для того, чтобы большие загрузки не «вылетали» по тайм-ауту; рекомендуемое значение — не меньше 1000 с.

Синтаксис: max_input_time=1000

Если по каким-то причинам доступ к php.ini отсутствует, можно задать эти параметры через файл .htaccess, расположенный в корневом каталоге конкретной копии Drupal. Синтаксис в этом случае будет таким:

php_value post_max_size 100M

php_value upload_max_filesize 100M

php_value max_execution_time 1000

php_value max_input_time 1000

Настройка Drupal

Создание шаблона контентБудем считать, что сама Drupal уже установлена. Теперь требуется инсталлировать модуль FlashVideo, обеспечивающий взаимодействие CMS с видеоконвертером и видеопроигрывателем, управление файлами, всевозможные настройки и прочие системные функции. Загрузить модуль можно со страницы http://drupal.org/project/flashvideo. По этому адресу доступны его релизы для Drupal версий 4.7.x, 5.x и 6.x. Помимо модуля FlashVideo понадобится CCK (Content Construction Kit — набор модулей для создания новых типов контента) и компонент Views. В настройках Drupal должен быть активирован модуль Upload.

Теперь следует определить тип контента, в котором будет возможна загрузка видеоматериалов, и создать для этого типа шаблон отображения содержимого (content template). Видеоматериалы загружаются как прикрепленные файлы, и, следовательно, для выбранного типа контента они должны быть разрешены.

Модуль FlashVideo предлагает два подхода к отображению видеоклипов и стоп-кадров. Первый заключается в использовании шаблонов содержимого. При этом в шаблоне содержимого, который создается в настройках Drupal (/admin/content/types/[content-type]/template, где [content-type] — интересующий нас тип содержимого) в разделе Body помещается специальный тег [video]. Он обеспечивает вывод полноразмерного видеоклипа. Для отображения стоп-кадра используется тег [thumbnail].

Теги имеют ряд дополнительных параметров, отделяемых двоеточием. В общем случае синтаксис тега с параметрами имеет вид [tag: param=value ], где tag — это video или thumbnail, param — имя параметра, а value — его значение.

Могут использоваться следующие параметры.

index — для обращения к определенному видеоклипу в том случае, когда в узле содержится сразу несколько клипов. Если при этом не задан параметр node, то подразумевается текущий узел. Нумерация клипов начинается от 0. Может применяться и для тега [video], и для тега [thumbnail].

Пример: [video: index=1] — вывод второго видеоклипа в текущем узле.

node — для обращения к видеоклипу, содержащемуся в некотором другом узле. Используется в сочетании с параметром index. Может применяться и для тега [video], и для тега [thumbnail].

Пример: [video: node=10: index=0] — вызов первого клипа в узле с идентификатором 10.

fids — задает один или несколько идентификаторов файлов (fid — File ID), разделяемых дефисом. Смысл этого параметра состоит в том, что он задает порядок последовательного воспроизведения нескольких клипов. Например, конструкция [video: fids:5-3-34] последовательно воспроизведет файлы с идентификаторами 5, 3 и 34. Может применяться и для тега [video], и для тега [thumbnail].

id — предназначен для воспроизведения видеоклипов с YouTube, Google и Brightcove. В случае обращения к YouTube достаточно просто указать уникальный идентификатор клипа на YouTube. Для остальных двух сервисов необходимо дописать префикс google- или brightcove- соответственно. Может применяться только для тега [video]. Примеры: [video:id=google-3754293779500828561] — воспроизведение клипа 3754293779500828561 с video.google.com;[video:id=SmVAWKfJ4Go] — вызов клипа с идентификатором SmVAWKfJ4Go с YouTube.

width и height — задают ширину и высоту клипа, отличные от указанных в настройках модуля FlashVideo. Могут применяться только для тега [video].

autostart — разрешает или запрещает автоматический запуск воспроизведения клипа. Имеет значение true или false; может применяться только для тега [video].

Другой подход к отображению видеоклипов предполагает использование стандартного синтаксиса «движка» PHPTemplate. В этом случае за вывод стоп-кадра отвечает команда , а за вывод видеоклипа — команда . При этом следует принудительно запретить применение тега [video] с помощью опции Disable the [video] tag в настройках модуля FlashVideo. Все вышеперечисленные дополнительные параметры при этом также могут быть использованы.

В настройках модуля FlashVideo, в поле ffmpeg Command раздела FFMPEG settings задается команда запуска FFmpeg. Параметры и ключи, с которыми может запускаться FFmpeg, чрезвычайно разнообразны. Полная документация по FFmpeg доступна по адресу http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html.

С помощью ключей и параметров командной строки можно задать, например, качество результирующего видеоклипа — за это отвечает параметр -qscale, принимающий значения от 1 до 31. Так, для получения постоянного качества на протяжении всего клипа (но при переменном битрейте) можно добавить в строку вызова FFMpeg ключ «-qscale n», где n — число от 1 (высшее качество) до 31 (низшее качество); качество изображения в свою очередь отражается на размере конечного FLV-файла.

Модуль FlashVideo предлагает гибкую систему настроек. На странице настроек модуля FlashVideo (/admin/settings/flashvideo/) доступны настройки как глобальные, для всех типов содержимого, так и индивидуальные для каждого типа. Существует русскоязычный перевод документации к модулю FlashVideo, выполненный энтузиастами Drupal. Найти его можно, например, по адресу http://news4people.ru/blogs/1. В статье мы приведем лишь самые интересные опции.

Интерфейс Dash PlayerОпределяя параметры обработки и показа видео (например, конвертацию сразу после загрузки, имена директорий для хранения файлов и т.д.), обратите внимание на опцию Show an Embed Video Textbox. Именно она отвечает за отображение на экране браузера кода для внедрения видеоклипа в сторонние HTML-документы. А отметив параметр Attach Video Player Download Link, вы предоставите пользователю ссылку для скачивания самой свежей версии проигрывателя Macromedia Flash.

Как мы уже говорили, плеер необходим для воспроизведения FLV-файлов. Обычно он представлен в виде файла в формате SWF и выполняет роль контейнера для видеоданных. Файл проигрывателя должен находиться в том же каталоге, в котором сохраняются итоговые сконвертированные FLV-файлы. Проигрыватель, конечно, можно написать и свой, но проще взять готовый, например простой и компактный Joroen Wijering’s Flash Player (http://www.jeroenwijering.com/?item=JW_FLV_Media_Player) или более продвинутый Dash Player (http://www.tmtdigital.com/node/131), опубликованный совсем недавно. Последний создан специально для Drupal, располагает развитым функционалом и графическим интерфейсом в стиле YouTube.

Собственно настройки плеера находятся в разделе Flash Player Settings. Здесь задают такие параметры, как имя и заставка проигрывателя, имена каталогов, в которых находятся исходные и итоговые видеоматериалы, а также способы их хранения.

Здесь же можно задать параметры логотипа, отображаемого поверх видеоклипа. Для этого служит поле Flash Player Logo, где задается имя графического файла. Логотип можно также загрузить из стороннего источника, задав его URL в поле Watermark (Logo) Link.

Cоздание страницы с прикрепленным видеофайломОтдельного разговора заслуживают размер и разрешение видеоклипов. Каких-либо жестких ограничений на эти параметры описываемая технология не накладывает. В принципе, если позволяют ресурсы, можно создавать и транслировать видеоматериалы стандарта HDTV. Узким местом в этом случае будет главным образом пропускная способность интернет-канала. Новейший проигрыватель Dash Player уже поддерживает кодек H.264, применяемый для кодирования HD-видео. Готовый пример можно посмотреть по адресу http://www.tmtdigital.com/node/131.

Итак, мы рассмотрели способы решения следующих задач:

  • сборка из исходников или установка из репозитория FFmpeg — утилиты конвертации файлов;
  • конфигурация серверных переменных;
  • установка и настройка модуля FlashVideo;
  • создание шаблона узла, в котором будут выводиться видеоклипы.

Результаты загрузки видеофайла на серверПосле того как установка и настройка всех необходимых компонентов завершены, у пользователя появится возможность прикреплять видеофайлы к создаваемым страницам. После загрузки на сервер файл будет перекодирован, отмасштабирован и выведен в окне проигрывателя с элементами управления. В дальнейшем, используя такие инструменты Drupal, как Views, можно создать блок, содержащий ленту видеоматериалов (например,10 последних клипов, представленных в виде стоп-кадров), и страницу с полным каталогом всех видеоматериалов сайта. Я реализовал это в своем последнем проекте — сервисе «Открытые новости» (http://news4people.ru).

Инструменты Drupal для работы с пользовательским видео постоянно совершенствуются. Так, пока готовилась к печати эта статья, появился новый проигрыватель FLV-файлов и был обновлен модуль FlashVideo.