Подготовка системы - сервера и InstantVideo состоит из множества шагов, мы расскажем обо всем, что необходимо для полноценного функционирования в целом.
Первый шаг: установка ПО для конвертации
Мы будем описывать функционирование на базе операционной системы Debian 9, возможно данное справочное руководство будет актуально и для других операционных систем как данного семейства, так и для других дистрибутивов Linux.
Для правильной работы конвертации необходимо: FFmpeg версии не ниже 2.7, а так же наличие Qt-faststart.
Мета-данные необходимы для индексирования файла. В свою очередь индекс, который размещается в начале видео файла, нужен для того, чтобы можно было в еще не скачанном (не буферизированном) файле при перемотке перемещаться по индексам, таким образом воспроизводить файл с любого места не дожидаясь его полной загрузки. МОжно это делать как средствами самого Ffmeg, так и при помощи Qt-faststart.
В Debian 9 "из коробки" версия Ffmpeg не совсем актуальная, поэтому идем на сайт deb-multimedia и добавляем любой из приведенных там репозиториев, согласно версии Debian, в /etc/apt/sources.list, например:
deb http://www.deb-multimedia.org stretch main non-free
Обновляем список пакетов с учетом нового репозитория:
apt update
После чего устанавливаем пакет deb-multimedia-keyring, соглашаясь с установкой неподписанного пакета:
apt install deb-multimedia-keyring
Устанавливаем Ffmpeg:
apt install ffmpeg
На этом установка необходимого ПО для конвертации закончена. Qt-faststart присутствует в пакете ffmpeg.
Второй шаг: псевдостримминг
Для псевдостримминга необходима двухуровневая конфигурация веб-сервера, Nginx + Apache. Этот вопрос достаточно широко освещен в интернете, например здесь, здесь или здесь, кроме этого, особенности данной связки можно почитать например тут.
Устанавливать необходимо последнюю версию NGINX, подключив репозиторий отсюда. Там же есть подробная инструкция по установке.
В данной связке важна настройка Nginx в контексте InstantVideo. Необходимо понимать:
- псевдостримминг работает только, если после конвертации над файлом происходит обработка программой для внесения мета-информации, см. выше;
- если в Nginx подключены модули псевдостримминга, mp4 и flv;
- конфигурация Nginx правильно настроена.
Примерная конфигурация Nginx для основного сайта, если вы не используете мультисерверность:
Для InstantVideo 1.X:
location ~/upload/video/view/.*.mp4$ { root /var/www/site.ru; # корневая директория вашего сайта mp4; # включаем модуль псевдостримминга mp4 файлов internal; # говорим, что эти файлы внутренние и недоступны по прямой ссылке } location ~/upload/video/view/.*.flv$ { root /var/www/site.ru; flv; internal; }
Для InstantVideo 2.X:
location ~/upload/video/storage/.*.mp4$ { root /var/www/site.ru; mp4; internal; } location ~/upload/video/storage/.*.flv$ { root /var/www/site.ru; flv; internal; }
Директивой internal вы исключаете возможность хотлинкования. Не забываете в настройках провайдера Localhost включать антихотлинк, а тип стримминга указывать "Nginx (x-accel-redirect)".
Для защиты сегментов HLS необходимо создать вот такой локейшн NGINX (если вы выбрали конвертировать в HLS формат в админке):
location ~/upload/video/storage/.*.ts$ { secure_link $arg_hash,$arg_e; secure_link_md5 "ivideosecret$secure_link_expires$uri$remote_addr"; if ($secure_link = "") { return 403; } if ($secure_link = 0) { return 410; } root /var/www/site.ru; }
Примерная конфигурация Nginx для InstantMedia Server
location ~/storages/storage2/.*.mp4$ { root /var/www/cdn1.site.ru; mp4; internal; } location ~/storages/storage2/.*.flv$ { root /var/www/cdn1.site.ru; flv; internal; } location ~/storages/.*.ts$ { add_header 'Access-Control-Allow-Origin' 'http://yousite.ru'; secure_link $arg_hash,$arg_e; secure_link_md5 "ivideosecret$secure_link_expires$uri$remote_addr"; if ($secure_link = "") { return 403; } if ($secure_link = 0) { return 410; } root /var/www/cdn1.site.ru; }
Обратите внимание! Для каждой директории хранения нужно добавлять правила или же исправить регулярное выражение в блоке локейшн.
Директивы mp4 и flv подключают модули псевдостримминга для Nginx. В начале убедитесь, что Nginx у вас собран/установлен с поддержкой данных модулей. Для этого введите в консоли nginx -V и проверьте, что строки "--with-http_mp4_module" и "--with-http_flv_module" присутствуют.
Для воспроизведения HLS убедитесь, что модули http_hls_module http_secure_link_module также присутствуют в Nginx, всё в том же выводе команды nginx -V.
В админке уже установленной CMS в разделе диагностика движок проверит выполнения указанных требований и отразит в соответствующем блоке.
Для кроссдоменного воспроизведения HLS, т.е. если у вас хранение и воспроизведения HLS файлов производится на InstantMedia Server, необходимо в локейшн *ts файлов добавить
add_header 'Access-Control-Allow-Origin' 'http://yousite.ru';где http://yousite.ru ваш основной домен с установленным InstantVideo2.