Versions Compared

Key

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

...

Информация о потоках, опубликованных на наблюдаемых узлах, может быть получена от бэкенд-сервера по по Websocket API или REST API

Информация о потоках, опубликованных в данный момент

Информацию о потоках, опубликованных на наблюдаемых узлах в данный момент, можно получить при помощи REST API запроса /api/stream/list

APIRequestResponseResponse status

...

WS API
Code Block
themeRDark
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":""
 }
}
Code Block
themeRDark

...

MESSAGE
destination:/

...

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
themeRDark
POST: /api/stream/list "application/json; charset=utf-8"
{

...

 "node":"",

...

 "mediaId":"

...

f3ad4670-8e83-11e9-8386-dbc3d191a79a",
 "name":"",
 "publisher":"",
 "status":"",
 "showClosed":false,
 "nodeIp":"",
 "nodeHostName":"yourserver.com"
}
Code Block
themeRDark
{
    "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 - имя наблюдаемого сервера

Информация в ответ на запрос выбирается из кэша полученных метрик.

Ответ содержит следующие поля

...

languagejs
themeRDark

...

Текущие мгновенные значения метрик потока

Текущие мгновенные значения метрик потока, опубликованного на сервере в данный момент, можно получить при помощи запроса /api/stream/metrics

APIRequestResponseResponse status
WS API
Code Block
themeRDark
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
themeRDark
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": "

...

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": 26888,
            "seq": 14,
            "

...

AUDIO_LOST": 41
        }
    ]
}

200 OK

400 Object not found

500 Persist exception

REST API
Code Block
themeRDark
POST: /api/stream/metrics "application/json; charset=utf-8"
{
 "node":"3",
 "mediaId":"5d03b340-8e8c-11e9-92b7-23d635edebe6",
 "limit":10,
 "offset":0
}
Code Block
themeRDark
{
    "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": "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":

...

 26888,
            "seq": 14,
            "

...

AUDIO_

...

LOST": 

...

41
        }
    ]
}

200 OK

400 Object not found

500 Persist exception

Здесь:

  • name – имя потока
  • status – статус потока
  • node – идентификатор узла (обязательное поле)
  • mediaId – идентификатор медиасессии потока
  • age – возраст записи кэша для данного потока в миллисекундах
  • publisher - идентификатор публикатора (для воспроизводимых потоков)

...

  • на узле (обязательное поле)
  • limit - количество сообщений в выборке из кэша
  • offset - смещение от начала кэша
  • time - метка времени
  • seq - номер сообщения в последовательности

Кроме того, в ответе отображаются текущие значения метрик.

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

Статистику потоков, опубликованных на наблюдаемых узлах, можно получить при помощи REST API запроса /api/stream/history

...

APIRequestResponseResponse status
WS API
Code Block
themeRDark

...

SEND
destination:/app/api/stream/history
content-length:191

{
 "requestId":"4a700886-a559-42b7-b43d-82679d8573d6",
 "realm":"/api/stream/history",
 "payload":
 {

...

  "node":"3",

...

  "mediaId":"f3ad4670-8e83-11e9-8386-dbc3d191a79a",

...

  "name":"",
  "publisher":"",

...

  "status":""
  "limit":1,
  "offset":0
 }
}

Здесь:

  • node – идентификатор узла
  • mediaId – идентификатор медиасессии на узле
  • name – имя потока
  • publisher - идентификатор публикатора потока (для воспроизводимых потоков)
  • status – статус потока (PENDING, PUBLISHING, PLAYING, UNPUBLISHED, STOPPED, FAILED)

Если указан идентификатор узла, то ответ будет содержать информацию только о потоках на этом узле, в противном случае информацию о потоках на всех наблюдаемых узлах, соответствующих другим критериям запроса.

Ответ содержит следующие поля

...

languagejs
themeRDark

...

Code Block
themeRDark
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
themeRDark
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
themeRDark
{
    "status": 200,
    "reason": "SUCCESS",
    "payload": [
        {
            "id": 265,
            "name": "test",

...

            "status": "

...

UNPUBLISHED",

...

            "mediaId": "

...

f3ad4670-

...

8e83-11e9-

...

8386-

...

dbc3d191a79a",

...

            "createDate": 

...

1560503300560,

...

            "endDate": null,

...

            "publisher": 0,

...

            "duration": 598658,
            "subscribers": [],

...

            "node": 

...

3
        }
    ]
}

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, будет выбрана информация обо всех потоках в БД. При большом количестве потоков в БД такой запрос может завершиться по таймауту, поэтому запрос на выборку без ограничений не рекомендуется.