Versions Compared

Key

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

...

Информация о потоках, опубликованных в данный момент на узле, в реальном времени может быть получена по протоколу STOMP поверх при помощи Websocket API.

Подключение к бэкенд-серверу по STOMP через Websocket

...

Получение метрик потока

Для получения метрик определенного потока в реальном времени необходимо:

1.  Установить Secure Websocket соединение по адресу https://hostname:8090/ws, где hostname – имя бэкенд-сервера

2. Установить соединение по протоколу STOMP, отправив сообщение

Code Block
themeRDark
CONNECT
accept-version:1.2
host:hostname

^@

3.Подключиться к бэкенд-серверу при помощи Websocket API

2. Подписаться на событие /stream/nodeId/mediaId, отправив сообщение

Code Block
themeRDark
SUBSCRIBE
id:sub-12
destination:/stream/153/010934f0ca77c700-07668e86-11e9-a9508386-59983a9de3c8dbc3d191a79a

^@

Здесь:15

  • 3 - идентификатор узла на бэкенде

...

  • ca77c700-

...

  • 8e86-11e9-

...

  • 8386-

...

  • dbc3d191a79a - идентификатор медиасессии, в которой опубликован или проигрывается поток

4. Подписаться на событие /alarm для получения тревог (см ниже)

Code Block
themeRDark
SUBSCRIBE
id:sub-0
destination:/alarm

^@

После этого клиент начинает получать STOMP-сообщения вида

Code Block
themeRDark
"MESSAGE\ndestination
destination:/stream/153/010934f0ca77c700-07668e86-11e9-a950-59983a9de3c8\ncontent8386-dbc3d191a79a
content-type:application/json;charset=UTF-8\nsubscription
subscription:sub-1\nmessage2
message-id:oilwo0os-701\ncontent3-50
content-length:1349\n\n1339

[{\"VIDEO_SYNC\":37546371251971560504547907,\"VIDEO_CODEC\":120119,\"VIDEO_NACK\":180,\"VIDEO_PLI\":0,\"VIDEO_RATE\":478104571616,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":30,\"timestamp\":15456483255061560504547917},{\"AUDIO_SYNC\":37546371252271560504547890,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":3261626664,\"timestamp\":15456483255581560504547923,\"AUDIO_LOST\":210},{\"AUDIO_SYNC\":37546371253471560504548010,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":3296027040,\"timestamp\":15456483256841560504548040,\"AUDIO_LOST\":210},{\"VIDEO_SYNC\":37546371253971560504548099,\"VIDEO_CODEC\":120119,\"VIDEO_NACK\":180,\"VIDEO_PLI\":0,\"VIDEO_RATE\":504632577416,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":3130,\"timestamp\":15456483257011560504548119},{\"AUDIO_SYNC\":37546371254671560504548130,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":3304826624,\"timestamp\":15456483258051560504548167,\"AUDIO_LOST\":210},{\"VIDEOAUDIO_SYNC\":37546371255971560504548250,\"VIDEOAUDIO_CODEC\":120111,\"VIDEO_NACK\AUDIO_RATE":27976,"timestamp":181560504548282,\"VIDEOAUDIO_PLI\LOST":0},\{"VIDEO_RATE\SYNC":4956241560504548307,\"VIDEO_WIDTH\CODEC":320119,\"VIDEO_HEIGHT\NACK":2400,\"VIDEO_FPS\PLI":300,\"timestamp\VIDEO_RATE":1545648325911}581968,{\"AUDIOVIDEO_SYNC\WIDTH":3754637125587320,\"AUDIOVIDEO_CODEC\HEIGHT":111240,\"AUDIOVIDEO_RATE\FPS":3304831,\"timestamp\":1545648325921,\"AUDIO_LOST\":211560504548318},{\"AUDIO_SYNC\":37546371257071560504548370,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":3240028128,\"timestamp\":15456483260491560504548404,\"AUDIO_LOST\":210},{\"VIDEO_SYNC\":37546371257961560504548499,\"VIDEO_CODEC\":120119,\"VIDEO_NACK\":180,\"VIDEO_PLI\":0,\"VIDEO_RATE\":480224583032,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":3231,\"timestamp\":15456483261041560504548506},{\"AUDIO_SYNC\":37546371258271560504548490,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":3304829568,\"timestamp\":15456483261591560504548522,\"AUDIO_LOST\":210}]\u0000"

или, при использовании библиотеки STOMP.js

Code Block
languagejs
themeRDark
{
       "command": "MESSAGE",
       "headers": {
               "content-length": "12821339",
               "message-id": "oilwo0os3-92650",
               "subscription": "sub-12",
               "content-type": "application/json;charset=UTF-8",
               "destination": "/stream/153/010934f0ca77c700-07668e86-11e9-a9508386-59983a9de3c8dbc3d191a79a"
       },
       "body": [
        {
           
        {
            "VIDEO_SYNC": 1560504547907,
            "VIDEO_CODEC": 119,
            "VIDEO_NACK": 0,
            "VIDEO_PLI": 0,
            "VIDEO_RATE": 571616,
            "VIDEO_WIDTH": 320,
            "VIDEO_HEIGHT": 240,
            "VIDEO_FPS": 30,
            "timestamp": 1560504547917
        },
        {
            "AUDIO_SYNC": 1560504547890,
            "AUDIO_CODEC": 111,
            "AUDIO_RATE": 26664,
            "timestamp": 1560504547923,
            "AUDIO_LOST": 0
        },
        {
            "AUDIO_SYNC": 1560504548010,
            "AUDIO_CODEC": 111,
            "AUDIO_RATE": 27040,
            "timestamp": 1560504548040,
            "AUDIO_LOST": 0
        },
        {
            "VIDEO_SYNC": 1560504548099,
            "VIDEO_CODEC": 119,
            "VIDEO_NACK": 0,
            "VIDEO_PLI": 0,
            "VIDEO_RATE": 577416,
            "VIDEO_WIDTH": 320,
            "VIDEO_HEIGHT": 240,
            "VIDEO_FPS": 30,
            "timestamp": 1560504548119
        },
        {
            "AUDIO_SYNC": 1560504548130,
            "AUDIO_CODEC": 111,
            "AUDIO_RATE": 26624,
            "timestamp": 1560504548167,
            "AUDIO_LOST": 0
        },
        {
            "AUDIO_SYNC": 1560504548250,
            "AUDIO_CODEC": 111,
            "AUDIO_RATE": 27976,
            "timestamp": 1560504548282,
            "AUDIO_LOST": 0
        },
        {
            "VIDEO_SYNC": 37546372991701560504548307,
                       "VIDEO_CODEC": 120119,
                       "VIDEO_NACK": 200,
                       "VIDEO_PLI": 0,
                       "VIDEO_RATE": 617024581968,
                       "VIDEO_WIDTH": 320,
                       "VIDEO_HEIGHT": 240,
                       "VIDEO_FPS": 2431,
                       "timestamp": 1545648499723
       1560504548318
        },
               {
                       "AUDIO_SYNC": 37546372994821560504548370,
                       "AUDIO_CODEC": 111,
                       "AUDIO_RATE": 3060028128,
                       "timestamp": 15456484997991560504548404,
                       "AUDIO_LOST": 0
        },
        {
            "VIDEO_SYNC": 23
        },
        ...
    1560504548499,
            "VIDEO_CODEC": 119,
            "VIDEO_NACK": 0,
            "VIDEO_PLI": 0,
            "VIDEO_RATE": 583032,
            "VIDEO_WIDTH": 320,
            "VIDEO_HEIGHT": 240,
            "VIDEO_FPS": 31,
            "timestamp": 1560504548506
        },
        {
            "AUDIO_SYNC": 1560504548490,
            "AUDIO_CODEC": 111,
            "AUDIO_RATE": 29568,
            "timestamp": 1560504548522,
            "AUDIO_LOST": 0
        }
    ]
}

Сообщения содержат значения метрик, получаемые от узла, на котором опубликован данный поток.

...

Code Block
themeRDark
UNSUBSCRIBE
id:/stream/15/010934f0-0766-11e9-a950-59983a9de3c8sub-2

^@

Настройка подключения

Максимальное количество метрик в одном сообщении настраивается при помощи параметра в файле wcsoam.properties

Code Block
themeRDark
stomp_max_metrics=10

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

...

Таймаут соединения настраивается при помощи параметра

Code Block
themeRDark
stomp_max_timeout=1000

Влияние частоты сбора метрик на частоту получения сообщений

Различные наборы метрик могут собираться на бэкенд-сервере с разной частотой, задаваемой в профиле. Если значение метрики, например, VIDEO_HEIGHT, не изменяется в течение публикации потока, сообщения, содержащие эту метрику, будут приходить подписчику не реже заданной частоты сбора. Если значение метрики меняется (VIDEO_RATE), сообщения, содержащие эту метрику, могут приходить подписчику по факту изменения, но не реже заданной частоты сбора.

Например, если собирать данные потока по профилю, включающему одну статичную метрику VIDEO_WIDTH, с частотой 30

Code Block
languagejs
themeRDark
https://hostname:8090/api/profile/create
{
  "name": "profile1",
  "rate": "30",
  "metrics": ["2"],
  "rules": ["1"]
}

при максимальном количестве метрик в одном сообщении 1

Code Block
themeRDark
stomp_max_metrics=1

сообщения будут приходить подписчику приблизительно 1 раз в секунду.

Если указать частоту 600

Code Block
languagejs
themeRDark
https://hostname:8090/api/profile/update
{
  "id": "2",
  "name": "profile1",
  "rate": "600",
  "metrics": ["2"],
  "rules": ["1"]
}

сообщения будут приходить подписчику приблизительно 1 раз в 20 секунд.

Если теперь расширить набор метрик до 4 статических VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_CODEC, AUDIO_CODEC

Code Block
languagejs
themeRDark
https://hostname:8090/api/profile/update
{
  "id": "2",
  "name": "profile1",
  "rate": "600",
  "metrics": ["2","3","9","13"],
  "rules": ["1"]
}

сообщения будут приходить подписчику приблизительно 1 раз в 5 секунд.

Если собирать данные по профилю, включающему две метрики VIDEO_RATE, AUDIO_RATE, с частотой 30

Code Block
languagejs
themeRDark
https://hostname:8090/api/profile/create
{
  "name": "profile2",
  "rate": "30",
  "metrics": ["4","11"],
  "rules": ["1"]
}

при максимальном количестве метрик в одном сообщении 1

Code Block
themeRDark
stomp_max_timeout=1000metrics=1

для потока, опубликованного на WCS сервер по RTMP, сообщения будут приходить подписчику приблизительно 1-2 раза в секунду.