Документация на Flussonic Media Server

  1. Быстрый старт
  2. How To
  3. Потоковое вещание
    1. Публикация
    2. Прием мультикаста
    3. Варианты источников
    4. Переключение источников
    5. Плейлисты
    6. Наложение логотипа
    7. Миксер
    8. WebRTC публикация
    9. SDI
    10. Отправка на другие сервера
    11. Распознавание DVB субтитров
  4. Транскодер
    1. Логотип
    2. Hardware
    3. Скриншоты
    4. Мозаика
  5. DRM
    1. Simple CAS
    2. Conax DRM
    3. BuyDRM (KeyOS)
  6. Авторизация
    1. Конструктор бэкендов
    2. Сервис сбора статистики
    3. Domain lock
    4. Middleware
    5. Secure links
    6. Ограничение сессий
    7. Мультиавторизация
    8. Бан IP адресов
    9. DVR
    10. Aliaser
  7. API
    1. HTTP API
    2. Events API
    3. MySQL API
    4. SQL API для кластеров
    5. SNMP
  8. Кластер
    1. Ретрансляция
    2. Кластерный захват
    3. Балансировщик нагрузки
    4. Пиринг
    5. Организация CDN
  9. VOD
    1. Кэш
    2. Облако
    3. Транскодирование файлов
  10. DVR
    1. Настройка
    2. Timeshift
    3. Catchup
    4. Проигрывание
    5. Экспорт в MP4
    6. Доступ по протоколам
    7. Timelapse
    8. API
    9. Кластеризация DVR
    10. Репликация
    11. Облако
  11. Воспроизведение
    1. HLS
    2. embed.html
    3. HTML5 с низкой задержкой
    4. Плеер HTML5 с низкой задержкой
    5. MPEG-TS
    6. RTMP
    7. DASH
    8. HDS
    9. RTSP
    10. multicast, CBR UDP
    11. WebRTC проигрывание
    12. H.265
  12. Администрирование
    1. Установка
    2. Обновление

    3. Конфигурация
    4. Мониторинг
    5. Производительность
    6. Лицензия
    7. LUA скрипты
    8. Безопасность
    9. Let's Encrypt
    10. Миграция
  13. IPTV
    1. Захват спутникового видео
    2. Транскодирование
    3. Middleware в IPTV OTT
    4. Экспорт EPG со спутника
    5. Группы каналов

Events API

Cобытия Flussonic Anchor Anchor x2

В Flussonic Media Server есть удобная и гибкая система внутренних событий, с маршрутизацией и обработчиками, и возможностями настройки.

События инициируются в разных частях системы и могут использоваться для разных сценариев.

Чтобы задать настройки, связанные с событиями, в файл конфигурации Flussonic добавьте директиву notify и опцию sink (получатель события):

Далее укажите различные опции, чтобы отфильтровать события до того, как они попадут в лог или в обработчик.

Содержание:

Настройка логирования событий Anchor Anchor x2

В дополнение к основному журналу, Flussonic позволяет создавать столько лог-файлов, сколько может потребоваться, и записывать в них события, выбранные по разным критериям. Все это вы можете указать в настройках.

Чтобы вести свой файл с журналом событий, добавьте директиву notify и укажите путь к файлу журнала в опции sink log://:

notify log_name {
    sink log://log/crash.log;
    verbose debug;
}

Здесь:

  • log_name — просто название настройки. Для удобства можно давать содержательные названия.
  • sink — получатель событий. В случае логов это файл, в который нужно записывать информацию о событиях.
  • verbose — уровень логирования по степени важности событий. debug (самое подробное логирование), info, или alert (логирование только важных событий).

Исключение событий из лога

Чтобы не записывать определенные события в данный файл, перечислите их в опции except.

Например, следующая конфигурация игнорирует события, касающиеся потоков (но пишет другие события, такие как события сервера Flussonic):

notify log_name {
    sink log://log/crash.log;
    except media=*;
    verbose debug;
}

Настройка обработчиков событий Anchor Anchor x2

Каждый обработчик должен быть объявлен в конфигурации:

notify handler_name {
    sink http://backend.local/notify.php;
}

Такое объявление создаст обработчик событий с именем handler_name и он будет отсылать ВСЕ события на HTTP URL http://backend.local/notify.php.

В этой конфигурации все события Flussonic Media Server будут отправляться в JSON формате как список объектов.

В высоконагруженной системе может генерироваться огромное количество событий, большая часть которых не требуется.

Мы можем уменьшить поток событий улучшив конфигурацию:

notify handler_name {
    sink http://backend.local/notify.php;
    only event=stream_started,stream_stopped,source_ready,source_lost;
}

С такой конфигурацией на этот обработчик будут отправляться только определённые события.

Вызовы обработчика происходят синхронно: событие не будет отправлено в обработчик, пока не он не завершит обработку предыдущей порции событий.

В конфигурации обработчика событий можно указать следующие опции:

sink
Получатель событий. Может быть задан HTTP URL: http://URL, https://URL или путь к LUA скрипту: path_to_lua_script.lua
only
Белый список ограничений. Можно указать несколько key=value или key=value1,value2 опций для каждой строки only. Вы можете фильтровать события по их типу event, по media или любому другому полю, такому как country или ip. Обычно это event и media. Ниже есть более полное описание поведения only.
except
Черный список ограничений. События, совпавшие с одним из полей в except не будут переданы обработчику.
buffer
Можно установить в false для имитации поведения до версии 4.6.14. Лучше не использовать этот параметр.

Все остальные опции в этом блоке будут переданы указанному приёмнику событий. В при LUA скрипте они доступны в таблице args. По HTTP они передаются вместе с другими параметрами.

Некоторые дополнительные опции:

sign_key
Вы можете указать ключ подписи для HTTP приёмника событий. Когда Flussonic будет готовить HTTP POST запрос с данными в формате JSON, он добавит этот ключ к телу запроса, вычислит SHA1 хэш и добавит его его в hex виде в http header `X-Signature`. Это может использоваться для проверки, что событие отправил именно Flussonic.

Фильтрация событий Anchor Anchor x2

Вы можете фильтровать события перед тем, как они попадают в обработчик. Это очень важный механизм, попробуйте его использовать, потому что он уменьшает нагрузку на ваш обработчик событий. Каждое событие проходит через через фильтр непосредственно в треде, создавшем это событие, перед тем, как попасть в обработчик.

Правила фильтрации:

  • если любая except директива полностью совпала с событием, событие выкидывается и не передаётся в обработчик;
  • если в объявлении обработчика нет only директив, события передаются в обработчик;
  • если директивы only есть, то событие передается в обработчик, если оно полностью совпало хотя бы с одной директивой only.

Полнное совпадение директивы с событием означает, что все пары ключ=значение в директиве равны значениям в событии. Если в директиве указано ключ=значение1,значение2,значение3, то это означает, что поле ключ в событии должно быть равным какому-то одному значению из заданного списка.

Примеры:

  • only event=stream_started; совпадает с {event: "stream_started", media: "cbc"}
  • only event=stream_started,stream_stopped; совпадает с {event: "stream_started", media: "cbc"}
  • only event=stream_started,stream_stopped media=tnt; НЕ совпадает с {event: "stream_started", media: "cbc"}
  • only event=stream_started media=cbc group=news; НЕ совпадает с {event: "stream_started", media: "cbc"}

Список доступных событий Anchor Anchor x2

server_started
посылается после старта сервера
listener_start
Flussonic открыл какой-то порт на приём подключений
listener_failure
Ошибка открытия порта для приёма подключений
config_reloaded
Конфиг был перечитан
session_opened
открытие сессии
session_closed
закрытие сессии
file_opened
открытие файла
file_closed
закрытие файла
stream_started
запуск потока
stream_stop
поток получил команду на закрытие через API
stream_stopped
остановка потока
stream_reconfigured
обновление конфигурации потока
stream_motion_started
На IP камере было отмечено движение
stream_motion_stopped
На IP камере было окончено движение
source_ready
поток принял первые кадры
stream_media_info
media_info потока изменилось
source_lost
Источник потока потерян и требует перезапуска
source_switch
Поток переключился на другой источник
frames_timed_out
Источник потока перестал слать кадры (но ещё не перезапущен)
frames_restored
Источник потока возобновил отсылку кадров после перерыва
stream_backup
начал проигрываться backup файл в связи с потерей источника
publish_started
началась публикация в поток
publish_stopped
публикация в поток окончилась (вы можете получить много значимой информации из этого события)
push_started
поток начал отправку (push) на другой источник
stream_jpeg
новый jpeg превью было сгенеровано
dvr_new_fragment
новый DVR фрагмент был записан на диск
dvr_deleted_fragments
старые фрагменты были удалены из архива
dvr_new_blob
новый часовой болб был открыт для записи архива
stream_force_close_gop
ошибка поток: получена неправильная временная отметка или слишком малое количество кадров в секунду
stream_rt_sync
в потоке произошла пересинхронизация аудио и видео. Может быть признаком ошибок в потоке, если происходить слишком часто.
stream_broken_source
поток не может быть прочитан из текущего источника и было решено перезапустить поток
dvr_replication_started
началась репликация
dvr_hour_replication_started
началась репликация часового архива
dvr_hour_replication_done
репликация часового архива закончилась
dvr_replication_progress
отображение процесса репликации
dvr_replication_done
процесс репликации закончен

Пример настройки email нотификаций Anchor Anchor x2

Давайте узнаем, что вы можете делать с помощью системы событий. Например, вы хотите получать письма, если поток остановился.

Простейшая конфигурация будет выглядеть так:

notify no_video {
    only event=stream_stopped,source_lost;
    sink /etc/flussonic/no_video.lua;
    from flussonic@streamer1.my.cdn;
    to admin@my.cdn;
    via smtp://127.0.0.1:587;
}

Этого конфига достаточно, если вы не хотите фильтровать события определённым по потокам.

Скрипт no_video.lua:

body = "Source lost on following streams: \n"

for _, event in pairs(events) do
    body = body.."  "..event.media.."\n"
end

mail.send({from = args.from, to = args.to, subject = "Source lost", body = body})

Для корректной отправки почты необходимо установить утилиту sendmail:

apt-get install sendmail

Дополнительно необходимо убедиться, что что sendmail слушает порт, указанный в файле конфигурации:

netstat -lntp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name          
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN      3507/sendmail 

В качеcтве hostname сервера необходимо указывать РЕАЛЬНОЕ доменное имя:

hostname
streamer1.my.cdn