Видео

Зачем свой YouTube?

Создание собственного видеосервиса позволяет:

  • Получить независимость от поставщика внешнего видеохостинга
  • Обеспечить “вечное” хранение
  • Использовать видеосервис как основу видеосервисов организации

Обзор архитектуры

Видеосервис архитектурно близок к распределенной архитектуре YouTube. Оригинал видео загружается на сайт ELiS (Drupal), где создается задача на конвертирование и ставится в очередь на конвертацию. Ферма серверов конвертации видео, по мере освобождения ресурсов, конвертирует оригинал видео в три разных разрешения и два формата для показа в интернете. Сконвертированное видео загружается на ферму серверов хранения, откуда потом будет доставляться в браузеры пользователей и на мобильные устройства.

Выделение отдельных серверов транскодирования видео позволяет не снижать производительность сайта видеосервиса во время конвертации. Использование отедельных серверов хранения позволяет не использовать сложные кластерные системы и дорогостоящие системы хранения большого объема, расширяя пространство под сконвертированное видео по мере необходимости.

Сайт видеосервиса

Сайт видеосервиса представляет собой два модуля к CMS Drupal7 и может быть полностью независимым решением, никак не интегрированным с основной инфраструктурой ELiS. В случае интеграции с ELiS, загруженное видео попадет в поиск, сможет прикрепляться в каталог ELiS и отображаться в приложениях. Для видео появится возможность добавления в избранное и другой стандартный функционал, относящийся к документам ELiS. При интеграции видеосервиса в библиотеку ELiS, модули устанавливаются на тотже сайт, на который загружаются книги. Видео, загружаемое на сайт, попадает в папку /var/www/vh/library/sites/all/defualt/files/myvideo. Эту папку следует размещать на отдельном диске большой емкости. При размещении большого числа видеоматериалов можно использовать кластерную файловую систему. Производительность этой файловой системы большого значения не имеет, т.к. при просмотре видео, оригинал использоваться не будет.

Кроме установки модулей myvideo и myvideo channel, потребуется установить ffmpeg, при помощи которого генерируются скриншоты после загрузки видео.

Видеоканалы

К каждому видео можно добавить теги, на основе которых генерируются видеоканалы. Активация модуля myvideo channel создает по адресу http://example.com/channel/<tag> плеер, случайным образом отображающий видео помеченное тегом <tag>. Пример: http://k.psu.ru/library/channel/топ5

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

Видеоканалы вы можете встраивать в другие сайты с помощью модуля oEmbedder. Пример для встраивания:

{{oembedder:http://k.psu.ru/myvideo/oembedder?url=http://k.psu.ru/myvideo/channel/новости}}

Ноды транскодеров

Видео, отображаемое в вебе, должно поддерживаться браузерами и мобильными устройствами. Для обеспечения поддержки максимального числа браузеров, видео должно быть в MP4/H.264 и WebM/VPX. Кроме того, чтобы пользователи могли смотреть видео на низкоскоростных каналах, требуется перекодировать видео в низкое разрешение, для снижения требований к полосе пропускания.

Перекодированием (транскодированием) оригинального видео в два разных формата и три разрешения занимаются специализированные сервера, которые так и называются транскодирующими серверами. Итого, на каждое оригинальное видео будет создано дополнительно 6 файлов.

Число серверов в ферме зависит от скорости загрузки видео и его длительности. Для работы видеосервиса требуется не менее одного транскодирующего сервера. Максимальное число серверов транскодирования не ограничено.

Системные требования

Для транскодирования видео требуются много процессорного времени. Поэтому таким нодам следует обеспечить максимальную производительность по процессору. Транскодирование видео практически линейно масштабируется с ростом числа ядер процессора.

Оперативной памяти, наоборот, много не требуется и 4 ГБ на ноду будет достаточно.

Дискового пространства также много не требуется, как и применение высокопроизводительных SAS-дисков. Достаточно выделить 100ГБ на папку /tmp и использовать для нее обычные SATA-диски на 7200 об/мин.

Подключение ноды транскодера

Все ноды транскодеров должны быть зарегистрированы на сайте видеопортала в таблице myvideo_transcodernode, в которой указывается ip-адрес транскодирующего сервера и его статус (подключен: 1, временно или постоянно выведен из работы: 0).

На каждой ноде транскодера в файле конфигурации /srv/scripts/converter/config.php должен быть корректно указан URL с которого данная нода будет получать задания на конвертирования.

Один транскодер может обслуживать несколько сайтов (видеосервисов). Это может пригодиться, когда несколько организаций имеют несколько независимых видеопорталов, но используют общую ферму транскодирования видео для экономии средств на закупку транскодирующих серверов. Соответственно, все адреса сайтов к которым подключен транскодер должны быть перечислены в файле /srv/scripts/converter/config.php.

Процесс транскодирования

Ноды транскодирования сами обращаются на сайт видеосервиса и получают задание. Далее скачивается оригинальный файл на транскодирующую ноду и, с помощью ffmpeg, начинается процесс транскодирования. Транскодированное видео размещается в папке /tmp. Готовое видео загружается на ноду (сервер) постоянного хранения и происходит оповещение сайта видеосервиса об выполнении задания.

В случае, если производительности сервера хватает для одновременного транскодирования нескольких видео, нода может взять несколько заданий.

При использовании систем виртуаллизации, полная утилизация всех процессорных ядер может приводить к нежелательным миграциям виртуальных машин с загруженного хоста. В таких случаях не следует выделять для транскодирующего сервера более половины процессорных ядер при включенном Hyper-threading. Также имеется параметр утилизации процессора $cpu_utiliz_koef в файле /srv/scripts/converter/cron.php, который изменяется от 0 до 1 и является средней утилизацией всех процессорных ядер, при превышении которых новое задание на транскодирование браться не будет. Например: при указании $cpu_utiliz_koef 0.5 и 16 процессорных ядер, задания на транскодирования перестанут браться если будет полностью утилизированы любые 8 ядер. Не рекомендуется устанавливать данный параметр более 0.8, т.к. это приведет к увеличению времени публикации отдельного загруженного видео.

Сервера постоянного хранения видео

Транскодированное видео должно быть доставлено пользователю. Для этого оно размещается на ферме серверов хранения, основная задача которых - быстрая отдача файлов в браузеры и на устройства по протоколу http.

Такие сервера должны иметь публичный ip-адрес и доступны в интернете (если видео будет доступно в интернете). Нахождение серверов за NAT недопустимо.

Для работы видеосервиса нужно не менее одного сервера хранения. Аналогично с серверами транскодирования, один сервер хранения может обслуживать несколько видеосервисов.

Системные требования

Сервера хранения требуют прежде всего дискового пространства. В большинстве случаев можно ограничиться SATA-дисками на 7200 или 5600 об/мин. Процессорных ядер достаточно 2-4. Оперативной памяти от 4ГБ. Увеличение объема оперативной памяти будет изспользоваться для дискового кеша, поэтому, при большой нагрузке желательно использовать большее количество памяти.

Подключение сервера хранения

  1. Надо перейти на сайт видеосервиса и по адресу http://example.com/admin/config/media/myvideo создать префикс и секретный ключ (если они еще не созданы).
  2. На сервере хранения в файле /var/www/html/config.php в массив $secret_keys добавить элемент массива с ключом совпадающим с секретным ключом на сайте и значением в виде префикса.
  3. В таблице myvideo_filenode базы данных сайта видеосервиса (ELiS) добавить ip-адрес сервера хранения и флаг can_upload, отвечающий за наличие свободного места на сервере хранения.

На этом процесс добавления закончен.

Note

Префикс может быть пустым (“”), но секретный ключ обязан быть не пустым и сложным, т.к. он является паролем, который использует инфраструктура видеосервиса для загрузки видео и удаления уже не нужного видео при удалении ноды видео на сайте.

Префикс необходим в случае, если один файловый сервер обслуживает несколько сайтов и обеспечивает уникальность имен.

Обслуживание видеосервиса

Администратору необходимо мониторить свободное пространство на серверах хранения и вовремя выводить их из списка, на которые возможно загрузка сконвертированного видео (myvideo_filenode.can_upload поставить в 0). Также необходимо поставить под мониторинг свободное место на сервере с сайтом видеосервиса.