Перейти к содержанию

Конвертация и сжатие видеофайлов

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

Все видео приводятся к единому формату MP4 для корректного воспроизведения в веб-плеере без необходимости скачивания файла. Для обработки используется отдельный микросервис конвертации. Файлы передаются ему напрямую по ссылке через защищенное соединение с использованием API-ключа. После завершения конвертации и сжатия сервис возвращает готовый файл, который становится доступен по ранее сгенерированной ссылке. Все операции по конвертации выполняются через систему очередей. Ниже описан процесс настройки сервиса.

Процесс настройки

  1. Создание потоков

Создайте два потока (Администрирование — Общая бизнес-логика — Потоки) для конвертации и ответа: video-convertation и video-convertation-callback. Названия могут быть произвольные. Неудачных попыток до прекращения обработки события — 1, Поведение в случае ошибки — Пропустить.

  1. Создание очередей

Создайте две очереди событий (Администрирование — Общая бизнес-логика — Очереди событий): video-convertation-action и video-convertation-callback-action. Названия могут быть произвольные.

  1. Создание сервиса

Создайте сервис (Администрирование — Подключения — Сервисы) конвертации и сжатия файлов с типом UniversalApi.

Создайте сервис UniversalApi .

В опции Сервис выберите созданный ранее сервис конвертации и сжатия. В опции Callback поток выберите поток video-convertation-callback, который был создан на шаге 1.

В опции Callback очередь выберите очередь событий video-convertation-callback-action, которая была создана на шаге 2.

Для отображения ответа от сервиса в таблицах БД MessageQueue (Очередь) и MessageQueueLog (Информация об очереди после выполнения) предназначены колонки: textResult -- Текст результата и boleanResult -- Признак результата (да/нет).

  1. Привязка кастомных действий

Создайте привязку действий к созданным очередям событий .

Для отправки файла в сервис к очереди video-convertation-action привяжите пакет со смарт-действием Вызов внешнего сервиса.

В параметре API Сервис укажите ID сервиса конвертации и сжатия, созданного на шаге 3. Запрос и Контекст запроса не задаются. В параметре Список файлов в формате: ключ -> fileId добавьте file и в качестве значения рассчитайте файл из контекста с помощью TSQL.

Пример TSQL:

select JSON_VALUE([data], '$.fileId') from MessageQueue with(nolock)
where id = @contextid

Далее для скачивания файла в задачу к очереди video-convertation-callback-action привяжите пакет со смарт-действием Выполнить смарт-скрипт.

Рассчитайте получение файла из сервиса с помощью Lua-скрипта.

Используем действие "Скачать файл" (DownloadFile). Контекстные параметры: \@contextid — nil, \@contextType — \'task\'. В имени файла (FileName) необходимо явно указать расширение ".mp4". В заголовке (HttpHeaders) передается { \'Authorization\'\ = \'Bearer {APIKey из сервиса UniversalApi}\'},

Пример Lua-скрипта:

local paramTable = SQL:query_one([[ 
   select JSON_VALUE('data', '$.CallBackUrl') callbackurl from MessageQueueLog with(nolock) 
   where id = @contextid 
]], {contextid = CONTEXT.Id}) 



SMART:execute_action('DownloadFile', nil, 'task', { 
 Task = 12345, 
 UploadingUserName = 3, 
 FileLink = paramTable.callbackurl, 
 FileName = 'Converted file.mp4', 
 HttpMethod = 'Post', 
 HttpHeaders = { ['Authorization'] = 'Bearer {APIKey}' } 
}, false) 
  1. Настройка категории

В категории, для которой должна быть реализована автоматическая конвертация и сжатие видеофайлов, создайте автоматизацию со смарт-действием Добавить новое событие в очередь с типом Custom, в котором выбран созданный на шаге 1 поток video-convertation. В параметре Кастомное действие указывается ID очереди события video-convertation-action, которая была создана на шаге 2.

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

В опции Параметры добавляется fileId, в котором рассчитывается FileID из ДП.