Events API для управления событиями¶
События Flussonic¶
Во Flussonic Media Server есть удобная и гибкая система внутренних событий с маршрутизацией, обработчиками и возможностями настройки. Данная статья описывает, как настроить Flussonic для фильтрации и отправки событий. Список и описание возможных событий см. в схеме API.
Подробнее прочитать про работу сессий стриминга можно в отдельной статье.
События инициируются в разных частях системы и могут использоваться для разных сценариев.
Задать настройки, связанные с событиями, можно на странице Config -> Events или в файле конфигурации Flussonic с помощью директивы event_sink.

Опция Sink (в конфигурационном файле — url) определяет получателя событий:
- Чтобы использовать кастомный обработчик, в
urlнужно указать путь до него. - Чтобы записывать события в журнал событий (лог), в
urlуказывают путь к файлу журнала.
Далее укажите различные опции, чтобы отфильтровать события до того, как они попадут в лог или в обработчик.
Содержание:
- Настройка логирования событий
- Настройка обработчиков событий
- Фильтрация событий
- Гарантированная доставка уведомлений
Настройка логирования событий¶
В дополнение к основному журналу, Flussonic позволяет создавать столько лог-файлов, сколько может потребоваться, и записывать в них события, выбранные по разным критериям. Все настройки можно задать на странице Config -> Events.
Настройку можно выполнить и через конфигурационный файл, добавив директиву event_sink и указав путь к файлу журнала в опции url log://:
event_sink log_name {
url log:///var/log/flussonic/crash.log;
level debug;
}
Основные настройки:
- Name (
log_name) — просто название настройки. Для удобства можно давать содержательные названия. - Sink (
url) — получатель событий. В случае логов это файл, в который нужно записывать информацию о событиях. См. также Настройка обработчиков событий - Level (
level) — уровень логирования по степени важности событий.debug(самое подробное логирование),info, илиalert(логирование только важных событий),notice,warning,error,critical.
Настройка обработчиков событий¶
Flussonic может отправлять события любому получателю, которого вы укажете в параметре Sink (url). Это может быть путь к файлу скрипта, URL удаленного обработчика и т.п. Пример:
event_sink handler_name {
url http://IP-ADDRESS:PORT/SCRIPT_NAME.php;
}
Такое объявление создаст обработчик событий с именем handler_name и он будет отсылать все события на HTTP URL http://backend.local/notify.php.
В этой конфигурации все события Flussonic Media Server будут отправляться в JSON-формате как список объектов.
В высоконагруженной системе может генерироваться огромное количество событий, большая часть которых не требуется. Используйте фильтрацию, чтобы уменьшить поток событий.
Вызовы обработчика происходят синхронно: событие не будет отправлено в обработчик, пока он не завершит обработку предыдущей порции событий.
В конфигурации обработчика событий можно указать следующие опции:
| Опция | Описание |
|---|---|
url |
HTTP URL вашего вебхука: http://URL, https://URL |
only |
Белый список ограничений. Можно указать несколько key=value или key=value1,value2 опций для каждой строки only. Вы можете фильтровать события по их типу event, по media или любому другому полю, такому как country или ip. Обычно это event и media. Ниже есть более полное описание поведения only. |
except |
Черный список ограничений. События, совпавшие с одним из полей в except не будут переданы обработчику. |
buffer |
Не рекомендуется к использованию. |
sign_key |
(Указывается в разделе Extended (extra)) Вы можете указать ключ подписи для HTTP-приёмника событий. Когда Flussonic будет готовить HTTP POST запрос с данными в формате JSON, он добавит этот ключ к телу запроса, вычислит SHA1 хэш и добавит его в hex-виде в HTTP header X-Signature. Это может использоваться для проверки, что событие отправил именно Flussonic. |
Все остальные опции в этом блоке будут переданы указанному приёмнику событий. Список доступных опций см. в описании метода API: Flussonic-API: PUT /streamer/api/v3/event_sinks/{name}/.
В LUA-скрипте они доступны в таблице args.
По HTTP они передаются вместе с другими параметрами.
Фильтрация событий¶
Вы можете фильтровать события перед тем, как они попадают в обработчик или файл, с помощью опций Except (except) и Only (only). Этот механизм уменьшает нагрузку на обработчик событий. Каждое событие проходит через фильтр непосредственно в треде, создавшем это событие, перед тем, как попасть в обработчик.
Правила фильтрации:
- если любая
exceptдиректива полностью совпала с событием, событие выкидывается и не передаётся в обработчик; - если в объявлении обработчика нет
onlyдиректив, события передаются в обработчик; - если директивы
onlyесть, то событие передается в обработчик, если оно полностью совпало хотя бы с одной директивойonly.
Полное совпадение директивы с событием означает, что все пары "ключ=значение" в директиве равны значениям в событии. Если в директиве указано "ключ=значение1,значение2,значение3", то это означает, что поле "ключ" в событии должно быть равным какому-то одному значению из заданного списка.
Примеры:
only event=stream_opened;совпадает с{event: "stream_opened", media: "cbc"}only event=stream_opened,stream_closed;совпадает с{event: "stream_opened", media: "cbc"}only event=stream_opened,stream_closed media=tnt;не совпадает с{event: "stream_opened", media: "cbc"}only event=stream_opened media=cbc group=news;не совпадает с{event: "stream_opened", media: "cbc"}
Простой пример конфигурации, чтобы игнорировать события, касающиеся потоков (но передавать другие события, такие как события сервера Flussonic):
event_sink log_name {
url log:///var/log/flussonic/events.log;
except media=*;
level debug;
}
Пример конфигурации, которая пропускает только некоторые события:
event_sink handler_name {
url http://IP-ADDRESS:PORT/SCRIPT_NAME.php;
only event=stream_opened,stream_closed,source_opened,source_closed;
}
Гарантированная доставка уведомлений¶
Чтобы не терять неотправленные уведомления, можно настроить Flussonic на отложенную повторную отправку. Если принимающий HTTP сервер или скрипт не отвечает, Flussonic накапливает события в специальном буфере и периодически повторяет попытки отослать нотификации. Когда принимающий сервер начнёт отвечать, Flussonic дошлёт накопленные нотификации.
Для этого нужно указать две опции:
- Resend limit
resend_limit— количество последних событий, которое будет храниться с целью повторных попыток отослать их. Не может превышать 2000. - Resend timeout
resend_timeout— интервал времени в секундах, через который Flussonic будет пытаться отослать события.
В файле конфигурации это будет выглядеть так:
event_sink watcher {
url http://IP-ADDRESS:PORT/SCRIPT_NAME.php;
resend_limit 10;
resend_timeout 10;
}
Сбор данных о рекламе¶
Вы можете использовать событие ad_injected для сбора информации о вставке и проигрывании рекламы в потоках. Каждый раз, когда в проигрываемый поток вставляется реклама, Flussonic генерирует это событие с такими параметрами как DTS первого кадра рекламы, путь к рекламным файлам, тип рекламного ролика и его продолжительность. Более подробную информацию смотрите в схеме API (выберите ad_injected в параметре events ответа).
Это событие записывается в лог Flussonic, позволяя отследить, сколько рекламы показал Flussonic и кому.