Описание
При управлении большим количеством WCS серверов, необходим сбор статистики медиа потоков для оценки качества вещания. Если серверы объединены в CDN, сбор информации о событиях в CDN также может быть полезен для последующей отладки.
В связи с этим, в сборке 5.2.749 добавлена возможность централизованного сбора статистики медиа потоков и событий в CDN.
Архитектура
Функцию сервера сбора статистики можно назначить одному из WCS серверов, при этом он продолжает выполнять основные задачи (публикация и воспроизведение медиа потоков). Остальные серверы при этом передают ему данные статистики при помощи специального протокола FREP, основанного на TCP. Полученные данные сервер статистики помещает в БД MySQL.
Роль сервера статистики может быть назначена любому WCS серверу. Теоретически, каждый из WCS серверов в сети может быть сервером сбора статистики, и собирать данные непосредственно на общий MySQL сервер, но в этом случае нагрузка на сеть может сильно возрасти.
Рекомендуется назначать роль сервера статистики на Controller сервер в CDN
Описание таблиц данных
Данные собираются в следующие таблицы
Статистика клиентский сессий
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
start | datetime | Время установки соединения |
sessionId | varchar(300) | Идентификатор сессии |
status | varchar(30) | Статус сессии |
info | varchar(300) | Причина, для статуса FAILED |
duration | int(11) | Длительность сессии |
Данные статистики клиентских сессий высылаются в начале и в конце сессии.
Статистика потоков
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
start | datetime | Время начала медиасессии |
sessionId | varchar(300) | Идентификатор сессии |
mediaProvider | varchar(30) | Медиапровайдер |
name | varchar(300) | Имя потока |
mediaSessionId | varchar(300) | Идентификатор медиасессии |
duration | int(32) | Длительность медиасессии |
status | varchar(30) | Статус медиасессии |
info | varchar(300) | Причина, для статуса FAILED |
type | varchar(100) | Тип медиасессии (PUBLISH или SUBSCRIBE) |
subscribers | int(16) | Количество подписчиков |
audioLost | int(2) | Количество потерянных аудиопакетов |
audioRate | int(4) | Битрейт аудио |
audioCodec | varchar(13) | Аудио кодек |
videoWidth | int(2) | Ширина картинки |
videoHeight | int(2) | Высота картинки |
videoPLI | int(2) | Количество PLI запросов |
videoNack | int(2) | Количество NACK |
videoRate | int(4) | Битрейт видео |
videoFPS | int(2) | Частота кадров видео |
videoBframes | int(2) | Количество B-фреймов |
videoCodec | varchar(4) | Видео кодек |
localSdp | varbinary(1500) | SDP на стороне сервера |
remoteSdp | varbinary(1500) | SDP на стороне браузера |
Данные статистики потоков высылаются в начале публикации или воспроизведения потока и по его окончании.
Статистика событий CDN
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
date | datetime | Дата и время фиксации события |
ts | varchar(30) | Метка времени CDN сигналинга |
srcNode | varchar(30) | Источник CDN сигналинга |
dstNode | varchar(30) | Приемник CDN сигналинга |
event | varchar(60) | Тип события CDN |
payload | varbinary(1500) | Содержимое сообщения CDN сигналинга |
Данные событий CDN высылаются непосредственно при возникновении события. В связи с этим, по умолчанию сбор статистки CDN отключен, и не рекомендуется его длительное использование в промышленной эксплуатации, только для целей отладки.
Настройка
Настройка MySQL сервера
Установка
Приведем пример установки MySQL на Centos 7
1. Скачайте необходимый репозиторий
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
2. Установите репозиторий
sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm
3. Установите MySQL
sudo yum install mysql-server
4. Запустите MySQL
sudo systemctl start mysqld
Настройка
1. Создайте базу данных и пользователя для записи статистики
CREATE DATABASE wcs; CREATE USER 'wcs'@'localhost' IDENTIFIED BY 'wcs'; GRANT ALL PRIVILEGES ON wcs.* TO 'wcs'@'localhost'; FLUSH PRIVILEGES;
2. Импортируйте схему базы данных
mysql -u wcs -p wcs < wcs.sql
Настройка WCS
Поддержка сбора статистики включается настройкой
frep_enabled=true
Роль (клиент или сервер) задается настройкой (по умолчанию CLIENT)
frep_role=CLIENT
Адрес сервера статистики задается настройкой
frep_controller_ip=192.168.1.64
Эта настройка должна быть указана на клиенте.
URI базы данных задается настройкой
frep_database_address=jdbc:mysql://localhost/wcs?user=wcs&password=wcs
Эта настройка должна быть указана на сервере статистики.
Порт для передачи статистики задается настройкой (по умолчанию 8085)
frep_port=8085
Ключ авторизации на сервере статистики задается настройкой
frep_secret_key=dsjfoiewqhriywqtrfewfiuewqiufh
Эта настройка должна быть указана одинаково на клиентах и сервере.
Применение настроек
Все настройки могут быть применены без перезапуска сервера с использованием команды интерфейса командной строки
reload node-settings
В этом случае, рекомендуется изменять эти настройки следующим образом:
1. Отключите сбор статистики на данном сервере
frep_enabled=false
2. Перезагрузите настройки
reload node-settings
3. Установите необходимые значения настроек и включите сбор статистики
frep_enabled=true
4. Перезагрузите настройки
reload node-settings
Фильтрация сбора данных
Высылаемые данные могут быть отфильтрованы при помощи настройки
frep_filter_events=CONNECT,CONNECTION_STATUS_EVENT,STREAM,STREAM_STATUS_EVENT
Возможные значения фильтров
Значение | Описание |
---|---|
CONNECT | Данные об установке соединений |
CONNECTION_STATUS_EVENT | Данные статуса сессии |
STREAM | Данные о захвате/воспроизведении потока |
STREAM_STATUS_EVENT | Данные статуса потока |
В целях отладки, можно включить отправку всех событий CDN
frep_filter_events=CONNECT,CONNECTION_STATUS_EVENT,STREAM,STREAM_STATUS_EVENT,CDN_EVENT
либо отфильтровать события
Значение | Описание |
---|---|
ROLE_REFRESH | Роль узла CDN |
NODE_REFRESH | Информация об узле CDN |
ROUTE_REFRESH | Информация о маршрутах воспроизведения потоков |
ROUTE_UPDATE | Обновление маршрутов воспроизведения потоков |
EXTENDED_ROUTE_UPDATE | Расширенная информация об обновлении маршрутов |
EXTENDED_ROUTE_REFRESH | Расширенная информация о маршрутах |
VERSION_REFRESH | Информация о версии CDN |
STATE_REFRESH | Информация о статусе узла CDN |
GROUP_REFRESH | Информация о группе CDN |
PROFILE_UPDATE | Обновление профилей транскодирования |
STREAM_ACCESS_LIST_REFRESH | Обновление списка ключей доступа к потоку |
STREAM_ACCESS_LIST_NODE_ID_UPDATE | Обновление идентификатора узла для сопоставления ключей доступа к потоку |
Выборки информации из БД
Выборки данных из таблиц MySQL производятся при помощи SQL запросов
SELECT serverIP, start, name, status, audioCodec, videoCodec FROM wcs.sdr WHERE name = 'test'; +---------------+---------------------+-------------+------------+------------+------------+ | serverIP | start | name | status | audioCodec | videoCodec | +---------------+---------------------+-------------+------------+------------+------------+ | 95.191.131.64 | 2020-08-10 13:44:00 | test | PUBLISHING | opus | H264 | | 95.191.131.64 | 2020-08-10 13:44:10 | test | PLAYING | opus | H264 | +---------------+---------------------+-------------+------------+------------+------------+ 2 rows in set (0.00 sec)
Выборка данных SDP
Из-за большого объема текста, SDP хранятся в БД в сжатом виде. Для того, чтобы распаковать данные при выборке, используются утилиты xxd и zlib-flate
mysql -u wcs -p -B --disable-column-names -e 'select hex(localSdp) from wcs.sdr where name = "test"' | xxd -r -p | zlib-flate -uncompress