Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

В сборке 5.2.2017 добавлен сбор данных о событиях, связанных с изменением RTP синхронизации аудио и видео в опубликованном потоке

ПолеТипОписание
timestampUInt64Метка времени
mediaSessionIdStringИдентификатор медиасессии
componentIdStringИдентификатор составляющей (аудио или видео)
eventTypeUInt32Тип события
payloadStringОписание события

Данные о потерях пакетов, отправленных зрителю (таблица PlayerPacketEvent)

В сборке 5.2.2024 добавлен сбор данных о потерях пакетов, отправленных зрителю

ПолеТипОписание
timestampUInt64Метка времени
mediaSessionIdStringИдентификатор медиасессии
midUInt32Тип пакета:
1 - аудио
2 - видео
typeUInt32

Тип события:
0 - потерян
1 - принят
2 - пакет задержался
3 - изменение порядка пакетов
4 - получение пакета не подтверждено

seqUInt32Порядковый номер пакета

Настройка

Установка и настройка ClickHouse

...

ТипОписание
CONNECTIONСобытия клиенсткой сессии
STREAMСобытия потока
CDNСобытия CDN
MEDIA_SESSIONСобытия медиа сессии
HLS_SEGMENTERДанные о нарезке HLS потоков
HLS_STREAMСобытия HLS  потоков
HLS_CLIENTСтатистика HLS клиентов
MIXERСобытия микшера
AUDIO_RECOVERYСтатистика потерь и восстановления аудиопакетов
RTMP_IN_BUFFERСтатистика буфера входящих RTMP потоков
REST_HOOKSСтатистика отправленных REST хуков
REST_HOOKS_BODYСтатистика отправленных REST хуков, включая тело запроса и тело ответа
RTP_SYNCHRONIZATIONСтатистика изменений RTP синхронизации аудио и видео
PLAYER_PACKET_EVENTСтатистика отправки пакетов зрителю

Настройка подключения к ClickHouse до сборки WCS 5.2.1999

...

ПараметрОписаниеПример
mediaSessionОбъект описания сбора данных MEDIA_SESSION"mediaSession": {"frequency":100, "ids":["12345678-0000-1111"]} 
frequencyЧастота сбора данных в миллисекундах100
idsСписок идентификаторов медиасессий потоков, для которых собираются данные["12345678-0000-1111","12345678-3333-4444"]
hlsSegmenterОбъект описания сбора данных HLS_SEGMENTER"hlsSegmenter": {"ids":["stream1"]}
hlsClientОбъект описания сбора данных HLS_CLIENT"hlsClient": {"ids":["stream1"]}
mixerОбъект описания сбора данных MIXER"mixer": {"ids":["12345678-5555-6666"]}
audioRecoveryОбъект описания сбора данных AUDIO_RECOVERY"audioRecovery": {"ids":["12345678-7777-8888"]}
rtmpInBufferОбъект описания сбора данных RTMP_IN_BUFFER"rtmpInBuffer": {"ids":["12345678-9999-AAAA"]}

rtpSynchronization

Объект описания сбора данных RTP_SYNCHRONIZATION"rtpSynchronization": {"ids":["12345678-9999-BBBB"]}
playerPacketОбъект описания сбора данных PLAYER_PACKET_EVENT"playerPacket": {"ids":["12345678-9999-CCCC"]}

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

...

  • MEDIA_SESSION
  • MIXER
  • HLS_SEGMENTER

...

  • HLS_CLIENT (начиная со сборки 5.2.2091)

  • RTMP_IN_BUFFER (начиная со сборки 5.2.2091)
  • RTP_SYNCHRONIZATION (начиная со сборки 5.2.2091)

Условия задаются в виде фильтров в файле /usr/local/FlashphonerWebCallServer/conf/rels_trap.json 

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        {
            "ips": ["127.0.0.1"],
            "frequency": "1000ms"
        },
        {
            "ips": ["192.168.0.0/24", "192.168.2.0/24"],
            "streamName": ".*\\-screen"
        },
        {
            "ips": ["192.168.0.101/32"],
            "streamName": "test.*",
            "frequency": "100th"
        }
    ],

    "mixer":
    [
        {
                "name   "streamName": "conference\\-test.*",
            "mediaType": ["publish", "play"]
        }
    ],

    "mixer":
    [
        {
            "name": "conference\\-.*",
            "streamName": "user.*",
            "frequency": "1000ms"
        }
    ],

    "hlsSegmenter":
    [
        {
            "streamId": "test.*"
        }
    ]
}

Здесь:

...

,

    "hlsClient":[
        {
            "streamId": "test.*"
        }
    ],
    
    "rtpSynchronization":[
        {
            "ips":["192.168.0.0/24"],
            "streamName": "test.*"
        }
    ],

    "rtmpInBuffer":[
        {
            "ips":["192.168.0.0/24"],
            "streamName": "test.*"
        }
    ]
}

Здесь:

  • mediaSession - блок фильтров для отправки данных MEDIA_SESSION
    • ips - список IP адресов клиентов
    • streamName - маска имени в виде регулярного выражения
    • type - тип сессии: "publish", "play"
    • frequency - частота сбора данных для потока, подпадающего под фильтр
  • mixer - блок фильтров для отправки данных MIXER
    • name - маска имени микшера в виде регулярного выражения
    • streamName - маска имени входящего потока микшера в виде регулярного выражения
    • frequency - частота сбора данных для микшера, подпадающего под фильтр
  • hlsSegmenter - блок фильтров для отправки данных HLS_SEGMENTER
    • streamId - маска имени HLS потока в виде регулярного выражения
  • hlsClient - блок фильтров для отправки данных HLS_CLIENT
    • streamId - маска имени HLS потока в виде регулярного выражения
  • rtpSynchronization - блок фильтров для отправки данных RTP_SYNCHRONIZATION
    • ips - список IP адресов публикующих клиентов
    • streamName - маска имени публикуемого потока в виде регулярного выражения
  • rtmpInBuffer - блок фильтров для отправки данных MEDIARTMP_IN_SESSIONBUFFER
    • ips - список IP адресов публикующих клиентов
    • streamName - маска имени публикуемого потока в виде регулярного выражения

В списке IP адресов для фильтрации публикующих клиентов

...

  • name - маска имени микшера в виде регулярного выражения
  • streamName - маска имени входящего потока микшера в виде регулярного выражения
  • frequency - частота сбора данных для микшера, подпадающего под фильтр

...

  • streamId - маска имени HLS потока в виде регулярного выражения

В списке IP адресов для фильтрации публикующих клиентов могут быть указаны как точные IP адреса, так и маски адресов в CIDR форматемогут быть указаны как точные IP адреса, так и маски адресов в CIDR формате

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        {
            "ips": ["127.0.0.1", "192.168.0.0/24"],
            ...
        },
        ...
    ],
    ...
}

Если в условиях фильтрации указаны и список адресов, и имя потока, то данные будут собираться только для потока, имя которого и адрес публикующего клиента подпадают под заданные условия

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        ...,
        {
            "ips": ["127192.168.02.0.1/24"],
        "192.168.0.0/24"]    "streamName": ".*\\-screen",
            ...
        },
        ...
    ],
    ...
}

Если в условиях фильтрации типа данных MEDIA_SESSION MIXER указаны и список адресовимя микшера, и имя публикуемого входящего потока микшера, то данные будут собираться только для сбор данных для этого микшера начнется только после добавления в него потока, имя которого и адрес публикующего клиента подпадают под заданные условиясоответствует заданному условию

Code Block
languagejs
themeRDark
{
    "mediaSession":...,

    ["mixer":
        ...,[
        {
            "ipsname": ["192.168.2.0/24"]conference\\-.*",
            "streamName": "user.*\\-screen",
            ...
        },"frequency": "1000ms"
        ...}
    ],

    ...
}

...

Параметр frequency определяет частоту сбора данных для этого типа:

  • "frequency": "100ms" - данные собираются каждые 100 мс
  • "frequency": "100th" - данные собираются каждые 100 полученных пакетов

Изменения в файле rels_trap.json не требуют перезапуска сервера, но применяются к новым публикациям, микшерам и HLS потокам.

Выборки информации из БД

Выборки информации из БД производятся при помощи SQL запросов в клиенте ClickHouse

Примеры запросов для сборок WCS до 5.2.1999

Code Block
languagejssql
themeRDark
{
    ...,

    "mixer":
    [
        {
            "name": "conference\\-.*",
            "streamName": "user.*",
            "frequency": "1000ms"
        }
    ],

    ...
}

Параметр frequency определяет частоту сбора данных для этого типа:

  • "frequency": "100ms" - данные собираются каждые 100 мс
  • "frequency": "100th" - данные собираются каждые 100 полученных пакетов

Изменения в файле rels_trap.json не требуют перезапуска сервера, но применяются к новым публикациям, микшерам и HLS потокам.

Выборки иформации из БД

Выборки информации из БД производятся при помощи SQL запросов в клиенте ClickHouse

Примеры запросов для сборок WCS до 5.2.1999

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from wcs.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent

Примеры запросов для сборок WCS 5.2.1999 и новее

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEventselect timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from wcs.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent

Примеры запросов для сборок WCS 5.2.1999 и новее

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEvent

Запись данных в файлы

Не всегда имеется возможность развернуть сервер ClickHouse для мониторинга в уже работающей инфраструктуре. В связи с этим, в сборке 5.2.2058 добавлена возможность записи данных в текстовые файлы, которые затем могут быть импортированы в БД ClickHouse для дальнейшего анализа.

Запись файлов включена по умолчанию настройкой

Code Block
themeRDark
rels_client_type=FILE

Данные записываются в каталог /usr/local/FlashphonerWebCallServer/logs/rels. В этом каталоге создается подкаталог с именем БД, сформированным из имени хоста, IP адреса сервера и версии WCS. В свою очередь, в этот каталог помещаются текстовые файлы для каждой таблицы данных

Code Block
themeRDark
/usr/local/FlashphonerWebCallServer/logs/rels/
└── testflashphonercom_192168039_522060
    ├── ConnectionEvent.csv
    ├── ConnectionEvent.json
    ├── StreamEvent.csv
    └── StreamEvent.json

Каждая таблица состоит из двух файлов:

  • json файл содержит описание типов данных таблицы, которое требуется для импорта в ClickHouse
  • csv файл содержит сами данные, колонки данных разделяются запятыми

Импорт данных из файлов в БД ClickHouse

Для импорта данных в БД ClickHouse требуется установленный WCS сервер (например, в тестовой среде). В состав сервера входит инструмент для импорта, запускаемый следующим образом

Code Block
languagebash
themeRDark
/usr/local/FlashphonerWebCallServer/tools/rels_import.sh --dbpath=/usr/local/FlashphonerWebCallServer/logs/rels/testflashphonercom_192168039_522060

Здесь

  • dbpath - путь до каталога с файлами таблиц, которые нужно импортировать

Инструмент создаст БД с именем, соответствующим имени каталога с файлами таблиц, в данном примере testflashphonercom_192168039_522060.

Инструмент использует настройки подключения к БД ClickHouse из файла /usr/local/FlashphonerWebCallServer/conf/flashphoner.properties, например

Code Block
themeRDark
rels_client_type=HTTP
rels_database_address=database.flashphoner.com:8123
rels_database_properties=user=wcs&password=wcs

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