Table of Contents |
---|
Описание
При управлении большим количеством WCS серверов, необходим сбор статистики медиа потоков для оценки качества вещания. Если серверы объединены в CDN, сбор информации о событиях в CDN также может быть полезен для последующей отладки.
В связи с этим, в сборке 5.2.749 добавлена возможность централизованного сбора статистики медиа потоков и событий в CDN.
Архитектура
Функцию сервера сбора статистики можно назначить одному из WCS серверов, при этом он продолжает выполнять основные задачи (публикация и воспроизведение медиа потоков). Остальные серверы при этом передают ему данные статистики при помощи специального протокола FREP, основанного на TCP. Полученные данные сервер статистики помещает в БД 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
...
Code Block | ||||
---|---|---|---|---|
| ||||
sudo systemctl start mysqld |
Настройка
1. Создайте базу данных и пользователя для записи статистики
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
-- MySQL dump 10.13 Distrib 8.0.20, for Linux (x86_64) -- -- Host: 172.17.0.2 Database: wcs -- ------------------------------------------------------ -- Server version 5.7.31 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `cdn` -- DROP TABLE IF EXISTS `cdn`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `cdn` ( `serverIp` varchar(15) NOT NULL, `date` datetime NOT NULL, `ts` varchar(30) NOT NULL, `srcNode` varchar(30) NOT NULL, `dstNode` varchar(30) NOT NULL, `event` varchar(60) NOT NULL, `payload` varbinary(1500) NOT NULL, PRIMARY KEY (`ts`,`srcNode`,`event`,`dstNode`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Table structure for table `conndr` -- DROP TABLE IF EXISTS `conndr`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `conndr` ( `serverIp` varchar(15) NOT NULL, `start` datetime NOT NULL, `sessionId` varchar(300) NOT NULL, `status` varchar(30) NOT NULL, `info` varchar(300) DEFAULT NULL, `duration` int(11) DEFAULT NULL, PRIMARY KEY (`sessionId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Table structure for table `sdr` -- DROP TABLE IF EXISTS `sdr`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `sdr` ( `serverIp` varchar(15) NOT NULL, `start` datetime NOT NULL, `sessionId` varchar(300) NOT NULL, `mediaProvider` varchar(30) NOT NULL, `name` varchar(300) NOT NULL, `mediaSessionId` varchar(300) NOT NULL, `duration` int(32) DEFAULT NULL, `status` varchar(30) NOT NULL, `info` varchar(300) DEFAULT NULL, `type` varchar(100) DEFAULT NULL, `subscribers` int(16) DEFAULT NULL, `audioLost` int(2) DEFAULT NULL, `audioRate` int(4) DEFAULT NULL, `audioCodec` varchar(13) DEFAULT NULL, `videoWidth` int(2) DEFAULT NULL, `videoHeight` int(2) DEFAULT NULL, `videoPLI` int(2) DEFAULT NULL, `videoNack` int(2) DEFAULT NULL, `videoRate` int(4) DEFAULT NULL, `videoFPS` int(2) DEFAULT NULL, `videoBframes` int(2) DEFAULT NULL, `videoCodec` varchar(4) DEFAULT NULL, `localSdp` varbinary(1500) DEFAULT NULL, `remoteSdp` varbinary(1500) DEFAULT NULL, PRIMARY KEY (`sessionId`,`mediaSessionId`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2020-08-26 11:30:24 |
Настройка WCS
Поддержка сбора статистики включается настройкой
...
Эта настройка должна быть указана одинаково на клиентах и сервере.
Применение настроек
Все настройки могут быть применены без перезапуска сервера с использованием команды интерфейса командной строки
...
Code Block | ||
---|---|---|
| ||
reload node-settings |
Фильтрация сбора данных
Высылаемые данные могут быть отфильтрованы при помощи настройки
...
Значение | Описание |
---|---|
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 запросов
Code Block | ||||
---|---|---|---|---|
| ||||
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
...