...
Информация о потоках, опубликованных на наблюдаемых узлах, может быть получена от бэкенд-сервера по по Websocket API или REST API
Информация о потоках, опубликованных в данный момент
Информацию о потоках, опубликованных на наблюдаемых узлах в данный момент, можно получить при помощи REST API запроса /api/stream/list
API | Request | Response | Response status |
---|
...
WS API | Code Block |
---|
| SEND
destination:/app/api/stream/list
content-length:207
{
"requestId":"f2378c35-e7ca-4241-b382-29f696f0dddb",
"realm":"/api/stream/list",
"payload":
{
"node":"",
"mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"name":"",
"publisher":"",
"status":"",
"showClosed":false,
"nodeIp":"192.168.1.5",
"nodeHostName":""
}
} |
| |
...
...
user/service
content-type:application/json;charset=UTF-8
subscription:sub-1
message-id:3-35
content-length:210
{
"requestId":"f2378c35-e7ca-4241-b382-29f696f0dddb",
"status":200,
"reason":"SUCCESS",
"payload":[
{
"name":"test",
"publisher":null,
"mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"age":229,
"status":"PUBLISHING"
}
]
} |
| 200 OK 400 Object not found 500 Persist exception |
REST API | Code Block |
---|
| POST: /api/stream/list "application/json; charset=utf-8"
{
|
|
...
...
...
f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"name":"",
"publisher":"",
"status":"",
"showClosed":false,
"nodeIp":"",
"nodeHostName":"yourserver.com"
} |
| Code Block |
---|
| {
"status": 200,
"reason": "SUCCESS",
"payload": [
{
"name": "test",
"publisher": null,
"mediaId" |
|
...
: "f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"age": 152,
"status": "PUBLISHING"
}
]
} |
| 200 OK 400 Object not found 500 Persist exception |
Здесь:
- node – идентификатор узла (обязательное поле)
- media mediaId – идентификатор медиасессии на узле
- name – имя потока
- age – возраст записи кэша для данного потока в миллисекундах
- publisher - идентификатор публикатора потока (для воспроизводимых потоков)
- status – статус потока (PENDING, PUBLISHING, PLAYING, UNPUBLISHED, STOPPED, FAILED)
- showClosed - показывать из кэша потоки, которые были остановлены
- nodeIp - IP адрес наблюдаемого сервера
- nodeHostName - имя наблюдаемого сервера
Информация в ответ на запрос выбирается из кэша полученных метрик.
Ответ содержит следующие поля
...
...
Текущие мгновенные значения метрик потока
Текущие мгновенные значения метрик потока, опубликованного на сервере в данный момент, можно получить при помощи запроса /api/stream/metrics
API | Request | Response | Response status |
---|
WS API | Code Block |
---|
| SEND
destination:/app/api/stream/metrics
content-length:176
{
"requestId":"e6d022e5-b5ae-4b6e-ad6e-e1c188e324d7",
"realm":"/api/stream/metrics",
"payload":
{
"node":"3",
"mediaId":"5d03b340-8e8c-11e9-92b7-23d635edebe6",
"limit":10,
"offset":0
}
} |
| Code Block |
---|
| MESSAGE
destination:/user/service
content-type:application/json;charset=UTF-8
subscription:sub-1
message-id:2-18
content-length:1764
{
"requestId":"e6d022e5-b5ae-4b6e-ad6e-e1c188e324d7",
"status": 200,
"reason": "SUCCESS",
"payload": [
{
"AUDIO_SYNC": 3769496857356,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.644Z",
"AUDIO_RATE": 29816,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496857236,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.52Z",
"AUDIO_RATE": 31048,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": 3769496857221,
"VIDEO_CODEC": 119,
"VIDEO_NACK": 38,
"VIDEO_PLI": 0,
"VIDEO_RATE": 404488,
|
|
...
"VIDEO_WIDTH": 320,
"time": " |
|
...
...
06-14T10:27:37.494Z",
"VIDEO_FPS": 23,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496857116,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.397Z",
"AUDIO_RATE": 29304,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": 3769496857029,
"VIDEO_CODEC": 119,
" |
|
...
...
...
...
...
...
...
...
2019-06-14T10:27:37.301Z",
"VIDEO_FPS": 22,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496856996,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.285Z",
"AUDIO_RATE": 28112,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496856876,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.16Z",
"AUDIO_RATE": |
|
...
28248,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": |
|
...
3769496856806,
"VIDEO_CODEC": 119,
"VIDEO_NACK": |
|
...
...
...
PLI": 0,
"VIDEO_RATE": 430992,
"VIDEO_WIDTH": 320,
"time": "2019-06-14T10:27:37.124Z",
"VIDEO_FPS": 22,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496856756,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.039Z",
"AUDIO_RATE": |
|
...
27424,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496856636,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:36.923Z",
"AUDIO_RATE": 26888,
"seq": 14,
" |
|
...
| 200 OK 400 Object not found 500 Persist exception |
REST API | Code Block |
---|
| POST: /api/stream/metrics "application/json; charset=utf-8"
{
"node":"3",
"mediaId":"5d03b340-8e8c-11e9-92b7-23d635edebe6",
"limit":10,
"offset":0
} |
| Code Block |
---|
| {
"status": 200,
"reason": "SUCCESS",
"payload": [
{
"AUDIO_SYNC": 3769496857356,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.644Z",
"AUDIO_RATE": 29816,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496857236,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.52Z",
"AUDIO_RATE": 31048,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": |
|
...
3769496857221,
"VIDEO_CODEC": 119,
" |
|
...
...
...
...
...
404488,
"VIDEO_WIDTH": 320,
"time": "2019-06-14T10:27:37.494Z",
"VIDEO_FPS": 23,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496857116,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.397Z",
"AUDIO_RATE": 29304,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": 3769496857029,
"VIDEO_CODEC": 119,
"VIDEO_NACK": 38,
"VIDEO_PLI": 0,
"VIDEO_RATE": 409056,
"VIDEO_WIDTH": 320,
"time": "2019-06-14T10:27:37.301Z",
"VIDEO_FPS": 22,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496856996,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.285Z",
"AUDIO_RATE": 28112,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496856876,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.16Z",
"AUDIO_RATE": 28248,
"seq": 14,
"AUDIO_LOST": 41
},
{
"VIDEO_SYNC": 3769496856806,
"VIDEO_CODEC": 119,
"VIDEO_NACK": 37,
"VIDEO_PLI": 0,
"VIDEO_RATE": 430992,
"VIDEO_WIDTH": 320,
"time": "2019-06-14T10:27:37.124Z",
"VIDEO_FPS": 22,
"VIDEO_HEIGHT": 240,
"seq": 16
},
{
"AUDIO_SYNC": 3769496856756,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:37.039Z",
"AUDIO_RATE": 27424,
"seq": 14,
"AUDIO_LOST": 41
},
{
"AUDIO_SYNC": 3769496856636,
"AUDIO_CODEC": 111,
"time": "2019-06-14T10:27:36.923Z",
"AUDIO_RATE": |
|
...
...
...
...
| 200 OK 400 Object not found 500 Persist exception |
Здесь:
- name – имя потока
- status – статус потока
- node – идентификатор узла (обязательное поле)
- mediaId – идентификатор медиасессии потока
- age – возраст записи кэша для данного потока в миллисекундах
- publisher - идентификатор публикатора (для воспроизводимых потоков)
...
- на узле (обязательное поле)
- limit - количество сообщений в выборке из кэша
- offset - смещение от начала кэша
- time - метка времени
- seq - номер сообщения в последовательности
Кроме того, в ответе отображаются текущие значения метрик.
Статистика потоков
Статистику потоков, опубликованных на наблюдаемых узлах, можно получить при помощи REST API запроса /api/stream/history
...
API | Request | Response | Response status |
---|
WS API | |
...
SEND
destination:/app/api/stream/history
content-length:191
{
"requestId":"4a700886-a559-42b7-b43d-82679d8573d6",
"realm":"/api/stream/history",
"payload":
{
|
|
...
...
"mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",
|
|
...
"name":"",
"publisher":"",
|
|
...
"status":""
"limit":1,
"offset":0
}
} |
|
Здесь:
- node – идентификатор узла
- mediaId – идентификатор медиасессии на узле
- name – имя потока
- publisher - идентификатор публикатора потока (для воспроизводимых потоков)
- status – статус потока (PENDING, PUBLISHING, PLAYING, UNPUBLISHED, STOPPED, FAILED)
Если указан идентификатор узла, то ответ будет содержать информацию только о потоках на этом узле, в противном случае информацию о потоках на всех наблюдаемых узлах, соответствующих другим критериям запроса.
Ответ содержит следующие поля
...
...
Code Block |
---|
| MESSAGE
destination:/user/service
content-type:application/json;charset=UTF-8
subscription:sub-1
message-id:3-39
content-length:310
{
"requestId":"4a700886-a559-42b7-b43d-82679d8573d6",
"status":200,
"reason":"SUCCESS",
"payload":[
{
"id":265,
"name":"test",
"status":"UNPUBLISHED",
"mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"createDate":"2019-06-14T09:08:20.560+0000",
"endDate":null,
"publisher":0,
"duration":598658,
"subscribers":[],
"node":3
}
]
} |
| 200 OK 400 Object not found 500 Persist exception |
REST API | Code Block |
---|
| POST: /api/stream/history "application/json; charset=utf-8"
{
"node":"3",
"mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",
"name":"",
"publisher":"",
"status":""
"limit":1,
"offset":0
} |
| Code Block |
---|
| {
"status": 200,
"reason": "SUCCESS",
"payload": [
{
"id": 265,
"name": "test",
|
|
...
...
...
...
...
...
...
...
...
...
...
...
"duration": 598658,
"subscribers": [],
|
|
...
...
| 200 OK 400 Object not found 500 Persist exception |
Здесь
...
:
- node – идентификатор узла
- mediaId – идентификатор медиасессии на узле
- name – имя потока
- publisher - идентификатор публикатора потока (для воспроизводимых потоков)
- status – статус потока mediaId – идентификатор медиасессии потока(PENDING, PUBLISHING, PLAYING, UNPUBLISHED, STOPPED, FAILED)
- limit - максимальное количество потоков в выборке из БД
- offset - смещение от начала таблицы потоков
- id – идентификатор потока в БД бэкенда
- createDate – дата создания потока
- endDate – дата завершения публикации или воспроизведения потока
- publisher - идентификатор публикатора (для воспроизводимых потоков)duration - длительность потока
- subscribers - список идентификаторов подписчиков (для публикуемых потоков)node –
Если указан идентификатор узла, то ответ будет содержать информацию только о потоках на этом узле, в
...
противном случае информацию о потоках на всех наблюдаемых узлах, соответствующих другим критериям запроса.
Если максимальное количество потоков в выборке установлено в 0, будет выбрана информация обо всех потоках в БД. При большом количестве потоков в БД такой запрос может завершиться по таймауту, поэтому запрос на выборку без ограничений не рекомендуется.