Конвертация и сжатие видеофайлов¶
В системе доступна возможность автоматической обработки видеофайлов, которые вкладываются в задачи, параметры, ленту сообщений и социальную сеть. При загрузке пользователем видеофайлов в форматах MP4, WMV, MOV или AVI даже большого размера (до нескольких гигабайт) файлы автоматически конвертируются и сжимаются в фоновом режиме.
Все видео приводятся к единому формату MP4 для корректного воспроизведения в веб-плеере без необходимости скачивания файла. Для обработки используется отдельный микросервис конвертации. Файлы передаются ему напрямую по ссылке через защищенное соединение с использованием API-ключа. После завершения конвертации и сжатия сервис возвращает готовый файл, который становится доступен по ранее сгенерированной ссылке. Все операции по конвертации выполняются через систему очередей. Ниже описан процесс настройки сервиса.
Процесс настройки¶
- Создание потоков
Создайте два потока (Администрирование — Общая бизнес-логика — Потоки) для конвертации и ответа: video-convertation и video-convertation-callback. Названия могут быть произвольные. Неудачных попыток до прекращения обработки события — 1, Поведение в случае ошибки — Пропустить.
- Создание очередей
Создайте две очереди событий (Администрирование — Общая бизнес-логика — Очереди событий): video-convertation-action и video-convertation-callback-action. Названия могут быть произвольные.
- Создание сервиса
Создайте сервис (Администрирование — Подключения — Сервисы) конвертации и сжатия файлов с типом UniversalApi.
Создайте сервис UniversalApi .
В опции Сервис выберите созданный ранее сервис конвертации и сжатия. В опции Callback поток выберите поток video-convertation-callback, который был создан на шаге 1.
В опции Callback очередь выберите очередь событий video-convertation-callback-action, которая была создана на шаге 2.
Для отображения ответа от сервиса в таблицах БД MessageQueue (Очередь) и MessageQueueLog (Информация об очереди после выполнения) предназначены колонки: textResult -- Текст результата и boleanResult -- Признак результата (да/нет).
- Привязка кастомных действий
Создайте привязку действий к созданным очередям событий .
Для отправки файла в сервис к очереди 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)
- Настройка категории
В категории, для которой должна быть реализована автоматическая конвертация и сжатие видеофайлов, создайте автоматизацию со смарт-действием Добавить новое событие в очередь с типом Custom, в котором выбран созданный на шаге 1 поток video-convertation. В параметре Кастомное действие указывается ID очереди события video-convertation-action, которая была создана на шаге 2.
Если сжатие осуществляется для файла из ДП, в настройках этого параметра должна быть отключена опция Мультифайл и не должен быть выбран файловый провайдер. В таком случае автоматизация создается на событии После смены ДП.
В опции Параметры добавляется fileId, в котором рассчитывается FileID из ДП.