Versions Compared

Key

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

Table of Contents

Описание

При управлении большим количеством WCS серверов, необходим сбор статистики медиа потоков для оценки качества вещания. Если серверы объединены в CDN, сбор информации о событиях в CDN также может быть полезен для последующей отладки.

В связи с этим, в сборке 5.2.749 добавлена возможность централизованного сбора статистики медиа потоков и событий в CDN.

Архитектура

Функцию сервера сбора статистики можно назначить одному из WCS серверов, при этом он продолжает выполнять основные задачи (публикация и воспроизведение медиа потоков). Остальные серверы при этом передают ему данные статистики при помощи специального протокола FREP, основанного на TCP. Полученные данные сервер статистики помещает в БД MySQL.

...

Рекомендуется назначать роль сервера статистики на Controller сервер в CDN

Описание таблиц данных

Данные собираются в следующие таблицы

Статистика клиентский сессий

ПолеТипОписание
serverIpvarchar(15)IP адрес WCS
startdatetimeВремя установки соединения
sessionIdvarchar(300)Идентификатор сессии
statusvarchar(30)Статус сессии
infovarchar(300)Причина, для статуса FAILED
durationint(11)Длительность сессии

Данные статистики клиентских сессий высылаются в начале и в конце сессии.

Статистика потоков

ПолеТипОписание
serverIpvarchar(15)IP адрес WCS
startdatetimeВремя начала медиасессии
sessionIdvarchar(300)Идентификатор сессии
mediaProvidervarchar(30)Медиапровайдер
namevarchar(300)Имя потока
mediaSessionIdvarchar(300)Идентификатор медиасессии
durationint(32)Длительность медиасессии
statusvarchar(30)Статус медиасессии
infovarchar(300)Причина, для статуса FAILED
typevarchar(100)Тип медиасессии (PUBLISH или SUBSCRIBE)
subscribersint(16)Количество подписчиков
audioLostint(2)Количество потерянных аудиопакетов
audioRateint(4)Битрейт аудио
audioCodecvarchar(13)Аудио кодек
videoWidthint(2)Ширина картинки
videoHeightint(2)Высота картинки
videoPLIint(2)Количество PLI запросов
videoNackint(2)Количество NACK
videoRateint(4)Битрейт видео
videoFPSint(2)Частота кадров видео
videoBframesint(2)Количество B-фреймов
videoCodecvarchar(4)Видео кодек
localSdpvarbinary(1500)SDP на стороне сервера
remoteSdpvarbinary(1500)SDP на стороне браузера

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

Статистика событий CDN

ПолеТипОписание
serverIpvarchar(15)IP адрес WCS
datedatetimeДата и время фиксации события
tsvarchar(30)Метка времени CDN сигналинга
srcNodevarchar(30)Источник CDN сигналинга
dstNodevarchar(30)Приемник CDN сигналинга
eventvarchar(60)Тип события CDN
payloadvarbinary(1500)Содержимое сообщения CDN сигналинга

Данные событий CDN  высылаются непосредственно при возникновении события. В связи с этим, по умолчанию сбор статистки CDN  отключен, и не рекомендуется его длительное использование в промышленной эксплуатации, только для целей отладки.

Настройка

Настройка MySQL сервера

Установка

Приведем пример установки MySQL на Centos 7

...

Code Block
languagebash
themeRDark
sudo systemctl start mysqld

Настройка

1. Создайте базу данных и пользователя для записи статистики

...

Code Block
languagesql
themeRDark
titleDatabase schema file wcs.sql
collapsetrue
-- 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
themeRDark
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
languagesql
themeRDark
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

...