Информация о потоках, опубликованных в данный момент на узле, в реальном времени может быть получена по протоколу STOMP поверх Websocket API.
Подключение к бэкенд-серверу по STOMP через Websocket
Для подключения к бэкенд-серверу для получения метрик в реальном времени необходимо:
1. Установить Secure Websocket соединение по адресу https://hostname:8090/ws, где hostname – имя бэкенд-сервера
2. Установить соединение по протоколу STOMP, отправив сообщение
CONNECT accept-version:1.2 host:hostname ^@
3. Подписаться на событие /stream/nodeId/mediaId, отправив сообщение
SUBSCRIBE id:sub-1 destination:/stream/15/010934f0-0766-11e9-a950-59983a9de3c8 ^@
Здесь
15 - идентификатор узла на бэкенде
010934f0-0766-11e9-a950-59983a9de3c8 - идентификатор медиасессии, в которой опубликован или проигрывается поток
4. Подписаться на событие /alarm для получения тревог (см ниже)
SUBSCRIBE id:sub-0 destination:/alarm ^@
После этого клиент начинает получать STOMP-сообщения вида
"MESSAGE\ndestination:/stream/15/010934f0-0766-11e9-a950-59983a9de3c8\ncontent-type:application/json;charset=UTF-8\nsubscription:sub-1\nmessage-id:oilwo0os-701\ncontent-length:1349\n\n[{\"VIDEO_SYNC\":3754637125197,\"VIDEO_CODEC\":120,\"VIDEO_NACK\":18,\"VIDEO_PLI\":0,\"VIDEO_RATE\":478104,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":30,\"timestamp\":1545648325506},{\"AUDIO_SYNC\":3754637125227,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":32616,\"timestamp\":1545648325558,\"AUDIO_LOST\":21},{\"AUDIO_SYNC\":3754637125347,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":32960,\"timestamp\":1545648325684,\"AUDIO_LOST\":21},{\"VIDEO_SYNC\":3754637125397,\"VIDEO_CODEC\":120,\"VIDEO_NACK\":18,\"VIDEO_PLI\":0,\"VIDEO_RATE\":504632,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":31,\"timestamp\":1545648325701},{\"AUDIO_SYNC\":3754637125467,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":33048,\"timestamp\":1545648325805,\"AUDIO_LOST\":21},{\"VIDEO_SYNC\":3754637125597,\"VIDEO_CODEC\":120,\"VIDEO_NACK\":18,\"VIDEO_PLI\":0,\"VIDEO_RATE\":495624,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":30,\"timestamp\":1545648325911},{\"AUDIO_SYNC\":3754637125587,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":33048,\"timestamp\":1545648325921,\"AUDIO_LOST\":21},{\"AUDIO_SYNC\":3754637125707,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":32400,\"timestamp\":1545648326049,\"AUDIO_LOST\":21},{\"VIDEO_SYNC\":3754637125796,\"VIDEO_CODEC\":120,\"VIDEO_NACK\":18,\"VIDEO_PLI\":0,\"VIDEO_RATE\":480224,\"VIDEO_WIDTH\":320,\"VIDEO_HEIGHT\":240,\"VIDEO_FPS\":32,\"timestamp\":1545648326104},{\"AUDIO_SYNC\":3754637125827,\"AUDIO_CODEC\":111,\"AUDIO_RATE\":33048,\"timestamp\":1545648326159,\"AUDIO_LOST\":21}]\u0000"
или, при использовании библиотеки STOMP.js
{ "command": "MESSAGE", "headers": { "content-length": "1282", "message-id": "oilwo0os-926", "subscription": "sub-1", "content-type": "application/json;charset=UTF-8", "destination": "/stream/15/010934f0-0766-11e9-a950-59983a9de3c8" }, "body": [ { "VIDEO_SYNC": 3754637299170, "VIDEO_CODEC": 120, "VIDEO_NACK": 20, "VIDEO_PLI": 0, "VIDEO_RATE": 617024, "VIDEO_WIDTH": 320, "VIDEO_HEIGHT": 240, "VIDEO_FPS": 24, "timestamp": 1545648499723 }, { "AUDIO_SYNC": 3754637299482, "AUDIO_CODEC": 111, "AUDIO_RATE": 30600, "timestamp": 1545648499799, "AUDIO_LOST": 23 }, ... ] }
Сообщения содержат значения метрик, получаемые от узла, на котором опубликован данный поток.
Для того, чтобы перестать получать метрики потока в реальном времени, необходимо отписаться от данных потока, отправив сообщение
UNSUBSCRIBE id:/stream/15/010934f0-0766-11e9-a950-59983a9de3c8 ^@
Настройка подключения
Максимальное количество метрик в одном сообщении настраивается при помощи параметра в файле wcsoam.properties
stomp_max_metrics=10
Метрики отправляются подписчику, когда число изменившихся метрик достигнет заданного значения. Таким образом, если метрики меняются редко, целесообразно уменьшить данный параметр.
Таймаут соединения настраивается при помощи параметра
stomp_max_timeout=1000