Мониторинг параметров потока при помощи REST API¶
Описание¶
WCS поддерживает мониторинг параметров публикации и воспроизведения потока в реальном времени при помощи REST API
Доступные метрики¶
Метрика | Описание |
---|---|
VIDEO_HEIGHT | Высота видео |
VIDEO_WIDTH | Ширина видео |
VIDEO_RATE | Битрейт видео |
VIDEO_SYNC | Синхронизация видео |
VIDEO_FPS | Частота кадров видео |
VIDEO_NACK | Количество NACK-запросов |
VIDEO_PLI | Количество PLI-пакетов |
VIDEO_CODEC | Видеокодек |
VIDEO_K_FRAMES | Количество ключевых кадров (I-frames) видео |
VIDEO_P_FRAMES | Количество P-кадров видео |
VIDEO_B_FRAMES | Количество B-кадров видео |
VIDEO_GOP_SIZE | Количество кадров в последней группе между ключевыми кадрами |
VIDEO_LOST | Количество потерянных пакетов видео |
AUDIO_SYNC | Синхронизация аудио |
AUDIO_RATE | Битрейт аудио |
AUDIO_LOST | Количество потерянных пакетов аудио |
AUDIO_CODEC | Аудиокодек |
Получение общей информации о потоке¶
Запрос /stream/find
позволяет найти поток по заданным условиям
фильтрации и получить общую информацию о нем. В
сборке 5.2.923 также
могут быть запрошены метрики потока.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP:
http://streaming.flashphoner.com:8081/rest-api/stream/find
- HTTPS:
https://streaming.flashphoner.com:8444/rest-api/stream/find
Здесь:
streaming.flashphoner.com
- адрес WCS-сервера8081
- стандартный REST / HTTP порт WCS-сервера8444
- стандартный HTTPS портrest-api
- обязательная часть URL/stream/find
- используемый REST-метод
REST-запросы и ответы¶
/stream/find¶
Найти поток и отобразить информацию о нем
Request example¶
POST /rest-api/stream/find HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"stream1",
"published":true,
"display":["metrics"]
}
Response example¶
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
[
{
"appKey": "flashStreamingApp",
"sessionId": "/192.168.23.83:51309/192.168.130.39:1935",
"mediaSessionId": "6af0baf1-f014-48d6-b285-c975951a402f",
"name": "stream1",
"published": true,
"hasVideo": true,
"hasAudio": true,
"status": "PUBLISHING",
"sdp": ...,
"audioCodec": "mpeg4-generic/48000/2",
"videoCodec": "H264",
"record": false,
"width": 640,
"height": 360,
"bitrate": 0,
"minBitrate": 0,
"maxBitrate": 0,
"quality": 0,
"history": false,
"gop": 0,
"fps": 0,
"audioBitrate": 0,
"codecImpl": "",
"transport": "UDP",
"cvoExtension": false,
"createDate": 1616730493789,
"mediaType": "publish",
"mediaProvider": "Flash",
"metrics": {
"VIDEO_SYNC": 43688,
"VIDEO_K_FRAMES": 22,
"AUDIO_SYNC": 43712,
"VIDEO_NACK": 0,
"AUDIO_RATE": 129408,
"AUDIO_LOST": 0,
"VIDEO_LOST": 0,
"VIDEO_CODEC": 119,
"VIDEO_B_FRAMES": 0,
"VIDEO_PLI": 0,
"AUDIO_CODEC": 96,
"VIDEO_RATE": 1187440,
"VIDEO_WIDTH": 640,
"VIDEO_GOP_SIZE": 48,
"VIDEO_HEIGHT": 360,
"VIDEO_FPS": 24,
"VIDEO_P_FRAMES": 1027
}
}
]
Return codes¶
Code | Reason |
---|---|
200 | OK |
404 | Not found |
500 | Internal server error |
Параметры¶
Имя параметра |
Описание |
Пример |
---|---|---|
display | Дополнительные параметры, которые должны быть отображены в ответе | ["metrics"] |
mediaSessionId |
Идентификатор медиасессии |
6af0baf1-f014-48d6-b285-c975951a402f |
name | Имя потока | stream1 |
published | Публикация или воспроизведение | true |
hasVideo | Есть ли видео в потоке? | true |
hasAudio | Есть ли аудио в потоке? | true |
status | Статус потока | PUBLISHING |
sdp | SDP потока | |
audioCodec | Аудио кодек | mpeg4-generic |
videoCodec | Видео кодек | H264 |
record | Ведется ли запись потока | false |
width | Ширина картинки, с которой опубликован поток | 640 |
height | Высота картинки, с которой опубликован поток | 360 |
transport | Используемый транспорт WebRTC или MPEG-TS потока | UDP |
cvoExtension | Используется ли WebRTC расширение для ориентации картинки | false |
createDate | Дата создания потока | 1616730493789 |
mediaType | Тип потока: публикация или воспроизведение | publish |
mediaProvider | Способ публикации или проигрывания (Flash для RTMP) | Flash |
minBitrate | Параметры транскодера, созданного по REST API | |
maxBitrate | ||
quality | ||
gop | ||
fps | ||
audioBitrate | ||
codecImpl |
Отображение параметров аудио кодека¶
В сборке 5.2.1619 добавлено отображение частоты дискретизации и количества каналов аудио дорожки:
Если аудио в потоке нет, audioCodec не отображается.
Отображение статистики восстановления аудио пакетов¶
В сборке 5.2.2066 добавлено отображение статистики восстановления аудио пакетов по запросу
POST /rest-api/stream/find HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name":"stream1",
"published":true,
"display":["red"]
}
Пример статистики для опубликованного потока
{
...,
"name": "stream1",
...,
"red": {
"output": {
"totalRedundantBytes": 0,
"totalRedundantPackets": 0
},
"input": {
"totalRedundantBytes": 862151,
"usedRedundantBytes": 24115,
"totalRedundantPackets": 24633,
"usedRedundantPackets": 689
}
}
}
Здесь:
totalRedundantBytes
- количество байтов избыточной информации для восстановления аудиоданныхusedRedundantBytes
- количество использованных байтов избыточной информацииtotalRedundantPackets
- количество пакетов избыточной информации для восстановления аудиоданныхusedRedundantPackets
- количество использованных пакетов избыточной информации
Статистика будет ненулевой только в том случае, если включена поддержка избыточности для восстановления потерянного аудио (RED)
Получение метрик потока¶
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP:
http://streaming.flashphoner.com:8081/rest-api/stream/metrics
- HTTPS:
https://streaming.flashphoner.com:8444/rest-api/stream/metrics
Здесь:
streaming.flashphoner.com
- адрес WCS-сервера8081
- стандартный REST / HTTP порт WCS-сервера8444
- стандартный HTTPS портrest-api
- обязательная часть URL/stream/metrics
- используемый REST-метод
REST-запросы и ответы¶
/stream/metrics¶
Получить текущие метрики потока
Request example¶
POST /rest-api/stream/metrics HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"mediaSessionId" : "72b76eb8-3c01-47f3-b308-a0516d51249b"
}
POST /rest-api/stream/metrics HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"name" : "testStream"
}
Response example¶
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
{
"VIDEO_B_FRAMES": 0,
"VIDEO_WIDTH": 1920,
"VIDEO_SYNC": 1583463093448,
"AUDIO_RATE": 31832,
"VIDEO_PLI": 0,
"VIDEO_HEIGHT": 1080,
"AUDIO_SYNC": 1583463093415,
"VIDEO_FPS": 36,
"AUDIO_CODEC": 111,
"VIDEO_P_FRAMES": 3989,
"VIDEO_RATE": 684352,
"VIDEO_CODEC": 119,
"VIDEO_K_FRAMES": 173,
"VIDEO_NACK": 1,
"VIDEO_LOST": 1,
"AUDIO_LOST": 130
}
Return codes¶
Code | Reason |
---|---|
200 | OK |
404 | Not found |
500 | Internal server error |
Параметры¶
Имя параметра | Описание | Пример |
---|---|---|
mediaSessionId | Идентификатор медиасессии | 72b76eb8-3c01-47f3-b308-a0516d51249b |
name | Имя потока | testStream |