Відеострімінг

Вебхуки у відеоробочих процесах: автоматизація вашого конвеєра

Вебхуки для автоматизації відео: як вони працюють, загальні payload і приклади на Node.js. Пояснюємо, що публічний кабінет автора dcast.tv не має універсального сценарію налаштування вебхуків, — спирайтеся на реальну документацію вендорів і матеріали Partner API.

dcast Team
8 хв читання
Поділитися:
Вебхуки у відеоробочих процесах: автоматизація вашого конвеєра на dcast.tv
On this page

Вступ до вебхуків

Вебхуки дозволяють одній системі повідомити іншу, що щось сталося, надіславши HTTP-запит на URL-адресу, яку ви контролюєте. Замість того щоб ваш застосунок постійно опитував API запитанням «відео вже готове?», провайдер надсилає повідомлення в ту ж мить, коли подія відбувається. У відеоробочих процесах це основа автоматизації: завершення транскодування, події життєвого циклу трансляції, поява запису й фіналізація завантаження можуть запускати наступний крок вашого конвеєра без того, щоб хтось стежив за панеллю керування.

Механіка проста й однакова в усіх провайдерів. Сервер-отримувач перевіряє запит (в ідеалі — криптографічний підпис), швидко відповідає статусом 2xx і ставить важку роботу в чергу для фонової обробки. Усе інше — назви подій, структура payload, поведінка повторних спроб — залежить від вендора, тому розуміти патерн важливіше, ніж запам'ятовувати поля будь-якого окремого провайдера.

Де налаштовуються URL-адреси вебхуків

Налаштування завжди залежить від провайдера. Ви реєструєте свою публічну HTTPS-точку в панелі керування або API саме того вендора — сервісу кодування, live-платформи, платіжного провайдера тощо. Типовий порядок такий: вставити свою callback-адресу, обрати типи подій, які хочете отримувати, і надійно зберегти секрет для підпису, який вам видадуть. Універсального «екрана вебхуків», що охоплював би всіх вендорів, не існує; ви дотримуєтеся документації того продукту, з яким справді інтегруєтеся, бо точне розташування й термінологія щоразу різні.

DCAST і продукти для розробників

Публічний кабінет автора на dcast.tv не містить універсальної сторінки налаштувань «Вебхуки», де можна додавати довільні URL-адреси для подій на кшталт «транскодування завершено» чи «трансляцію запущено».

Інтеграції Partner і API — документація та інструменти для розробників або поверхні Pro/partner — це місце, де належать зворотні виклики, підписані події та пов'язані пункти дорожньої карти; їх описано в офіційній документації Partner API та для розробників, а не в вигаданому споживчому сценарії панелі керування. Якщо сумніваєтеся, довіряйте офіційній документації більше, ніж будь-якому туторіалу, зокрема цьому.

Поширені події вебхуків у відеоробочих процесах

Точні назви різняться залежно від провайдера, але категорії подій напрочуд однакові по всій індустрії:

  • Транскодування або кодування завершено — ресурс готовий до відтворення чи до наступного кроку конвеєра (мініатюри, субтитри, публікація).
  • Трансляцію розпочато / завершено — життєвий цикл прямого ефіру, корисний для аналітики, сповіщень і запуску запису.
  • Запис готовий — доступна версія для повтору або VOD прямої трансляції.
  • Завантаження завершено — прийом даних завершено, вихідний файл надійно збережено.

Добре спроєктований конвеєр з'єднує їх у ланцюжок: upload completed запускає транскодування, transcoding finished ініціює створення мініатюр і позначає ресурс як готовий до публікації, а recording ready сповіщає підписників, що повтор доступний. Кожна подія виконує одне завдання й передає естафету наступній.

Розуміння payload вебхуків

Payload майже завжди у форматі JSON. Завжди читайте реальну схему свого провайдера, бо назви полів і вкладеність різняться — наведений нижче приклад загальний і лише ілюстративний:

{
  "event": "transcoding_finished",
  "video_id": "12345",
  "status": "success",
  "filename": "example_video.mp4",
  "timestamp": "2023-10-05T12:00:00Z"
}

Дві звички збережуть вам чимало нервів. По-перше, ніколи не припускайте, що поле існує — перед використанням обережно перевіряйте його наявність, адже провайдери з часом додають і перейменовують поля. По-друге, сприймайте payload як сповіщення, а не як джерело істини. Для всього важливого за ID із payload отримуйте авторитетний запис з API провайдера, а не довіряйте тілу вебхука наосліп, адже payload можна підробити або відтворити повторно.

Обробка вебхуків у Node.js

Налаштування простого слухача

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;

app.use(bodyParser.json());

app.post('/webhook', (req, res) => {
  const payload = req.body;
  console.log('Received webhook event: ' + payload.event);
  res.status(200).send('Webhook received');
});

app.listen(port, () => {
  console.log('Webhook server listening on port ' + port);
});

Приклад: розгалуження за типом події

app.post('/webhook', (req, res) => {
  const payload = req.body;
  if (payload.event === 'transcoding_finished') {
    console.log('Transcoding finished for video ' + payload.video_id);
  }
  res.status(200).send('Webhook received');
});

Перевірка підписів

Найважливіший крок безпеки — переконатися, що запит справді надійшов від вашого провайдера й не є підробкою. Більшість вендорів підписують кожен запит за допомогою HMAC від сирого тіла запиту з вашим спільним секретом і передають результат у заголовку. Ваше завдання — заново обчислити цей підпис і порівняти його за сталий час:

const crypto = require('crypto');

function verifySignature(rawBody, signatureHeader, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  // constant-time compare avoids leaking timing information
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}

Зверніть увагу: для перевірки підпису зазвичай потрібне сире тіло запиту — рівно в тому вигляді, в якому воно надійшло. Якщо ваш JSON-парсер уже повторно серіалізував тіло, байти можуть відрізнятися, і підпис ніколи не збігатиметься, тож якщо провайдер цього вимагає, зберігайте сире тіло до парсингу.

Обробка помилок і повторні спроби

Реалізуйте ідемпотентність: зберігайте ID кожної опрацьованої події й пропускайте дублікати, бо провайдери будуть доставляти одну й ту саму подію більше ніж один раз під час збоїв у мережі. Повертайте статус 2xx лише після того, як надійно прийняли подію — зазвичай після запису в довготривалу чергу, а не після завершення самої роботи. Потім обробляйте довготривалі завдання асинхронно, щоб відправник не отримав тайм-аут. Якщо виконувати важку роботу всередині обробника й відповідати надто довго, провайдер вирішить, що сталася помилка, повторить запит, і ви в кінці кінців оброблятимете одну й ту саму подію знову і знову.

Найкращі практики

  1. Безпека: завжди використовуйте HTTPS, перевіряйте підписи кожного запиту й відхиляйте все, що не пройшло перевірку, відповіддю 401 або 403.
  2. Ідемпотентність: виходьте з того, що доставка може дублюватися, і дедуплікуйте за ID події, щоб повторна доставка ніколи не призводила до подвійного списання, подвійної публікації чи подвійного сповіщення.
  3. Швидке підтвердження: відповідайте швидко статусом 2xx, а справжню роботу виконуйте у фоновій черзі.
  4. Моніторинг: логуйте кожну доставку й збій, налаштуйте сповіщення про сплески відповідей не 2xx і ведіть чергу невдалих повідомлень (dead-letter queue) для подій, які не вдалося обробити.

Локальне тестування вебхуків

Оскільки вебхуку потрібна публічно доступна URL-адреса, для тестування на ноутбуці потрібен тунель. Інструменти на кшталт ngrok відкривають ваш локальний сервер на тимчасовій публічній HTTPS-адресі, щоб провайдер міг звернутися до http://localhost:3000 під час розробки. Багато провайдерів також пропонують кнопку «надіслати тестову подію» та журнал доставок із кожною спробою й кодом відповіді, який ви повернули — користуйтеся обома, щоб переконатися, що ваша точка перевіряє підписи, швидко повертає 2xx і правильно обробляє payload, перш ніж покладатися на неї в продакшені.

Висновок

Вебхуки — стандартний, надійний спосіб автоматизувати відеоконвеєри, але лише тоді, коли платформа, якою ви користуєтеся, справді їх надає, і лише тоді, коли ви обробляєте їх безпечно та ідемпотентно. Звіряйте поведінку з актуальною документацією продукту й перевіряйте підписи кожного запиту. Один раз вибудуйте патерн правильно — і така сама дисципліна працюватиме з кожним провайдером, з яким ви колись інтегруватиметеся.

Наступні кроки та ресурси

  • Для типів подій, формату payload і особливостей перевірки підпису користуйтеся офіційною документацією вашого вендора кодування чи стримінгу.
  • Щоб зрозуміти обсяг інтеграції DCAST, спирайтеся на опубліковані матеріали Partner API / для розробників; не припускайте, що на dcast.tv є споживчий інтерфейс вебхуків у панелі керування.

Поширені запитання

Що таке вебхуки і як вони працюють у відеоробочих процесах?

Вебхуки — це HTTP-зворотні виклики, які провайдер надсилає на контрольовану вами URL-адресу, коли відбувається певна подія. У відеоробочих процесах вони в реальному часі повідомляють ваш застосунок про такі речі, як завершення транскодування, початок і кінець трансляції, фіналізація завантаження та поява запису, — і ви можете запустити наступний автоматичний крок без опитування.

Як налаштувати вебхуки для відеопровайдера?

Процес завжди залежить від провайдера. Ви реєструєте свою публічну HTTPS-точку в панелі керування або API цього вендора, обираєте типи подій, що вас цікавлять, і зберігаєте секрет для підпису, який вам видають. Універсального порядку немає, тож дотримуйтеся документації того продукту, з яким інтегруєтеся. Щодо dcast.tv, покладайтеся на офіційні матеріали Partner API та для розробників, а не припускайте, що в споживчій панелі керування є екран вебхуків.

Які типові події запускають вебхуки у відеоробочих процесах?

Поширені події — «транскодування завершено», «трансляцію розпочато», «трансляцію завершено», «запис готовий» і «завантаження завершено». Точні назви різняться залежно від провайдера, але ці категорії охоплюють більшість потреб автоматизації.

Як захистити й перевірити payload вебхуків?

Обслуговуйте свою точку через HTTPS і перевіряйте криптографічний підпис, який провайдер надсилає з кожним запитом, використовуючи ваш спільний секрет і порівняння за сталий час. Сприймайте payload як сповіщення, а не джерело істини: за ID із нього отримуйте авторитетний запис з API провайдера, перш ніж виконувати будь-які значущі дії.

Як обробляти дубльовані або невдалі доставки вебхуків?

Зробіть свій обробник ідемпотентним: записуйте ID кожної опрацьованої події й пропускайте повтори, оскільки провайдери повторюють запит у відповідь на будь-який статус не 2xx або тайм-аут. Швидко підтверджуйте статусом 2xx після надійної постановки події в чергу, обробляйте важку роботу асинхронно й ведіть чергу невдалих повідомлень та моніторинг, щоб невдалі доставки були видимі й відновлювані.

стримінгпряма трансляціявідеовебхукиробочі процесиавтоматизація відео
d

dcast Team

Фахівці з відеостримінгу, які допомагають авторам досягати успіху.

Розпочніть свій відеобізнес сьогодні

Завантажуйте, транслюйте та продавайте відео. Почніть на безкоштовному тарифі — без картки.

Почати безкоштовно