Include Page |
---|
WCS5RU:Raw WebSocket API | WCS5RU:Raw WebSocket API Table of Contents |
---|
Описание
Все SDK, предоставляемые WCS: WebSDK, AndroidSDK, iOS SDK используют для взаимодействия с сервером на транспортном уровне протокол WebSocket. Поверх WebSocket реализован набор команд для обмена SDP между клиентом и сервером и установки WebRTC медиасессии.
Обмен командами по WebSocket можно наблюдать во время работы примеров приложений WebSDK, например, Two Way Streaming в браузере Chrome. Для этого откройте инструменты разработчика нажав на клавишу F12, раздел Network, выберите имя сервера и перейдите на вкладку Frames
Image Added
Наборы команд для публикации и воспроизведении видеопотоков
connect
При установке соединения с сервером и создании сессии обмен командами производится следующим образом:
Image Added
1. Клиент отправляет сообщение connection
Code Block |
---|
|
{
"message":"connection",
"data":
[
{
"appKey":"defaultApp",
"mediaProviders":["WebRTC","MSE","WSPlayer"],
"clientVersion":"0.5.28",
"clientOSVersion":"5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
"clientBrowserVersion":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
appKey | Идентификатор серверного приложения, которое должно взаимодействовать с бэкенд-сервером во время сеанса |
mediaProviders | Список поддерживаемых клиентом технологий публикации или воспроизведения потока |
clientVersion | Версия SDK клиента |
clientOSVersion | Версия операционной системы клиента |
clientBrowserVersion | Версия браузера клиента |
2. Сервер отправляет сообщение getUserData
Code Block |
---|
|
{
"message":"getUserData",
"data":
[
{
"useWsTunnel":false,
"useWsTunnelPacketization2":false,
"useBase64BinaryEncoding":false,
"mediaProviders":["WebRTC","MSE","WSPlayer"],
"authToken":"/5.129.23.83:50066/188.40.244.249:8443",
"status":"ESTABLISHED",
"clientVersion":"0.5.28",
"clientOSVersion":"5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
"clientBrowserVersion":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
"forceLogger":false,
"keepAlive":false
}
]
} |
Это сообщение подтверждает установку WebSocket соединения и успешное получение данных от клиента
Параметры сообщения
Параметр | Описание |
---|
useWSTunnel | Используется ли WS-туннель |
useWsTunnelPacketization2 | Используется ли пакетизация при использовании WS-туннеля |
useBase64BinaryEncoding | Используется ли Base64 кодировка |
mediaProviders | Список поддерживаемых клиентом технологий публикации или воспроизведения потока |
authToken | Токен авторизации, он же идентификатор сессии, сформированный из IP адреса и порта клиента и сервера |
status | Статус WebSocket сессии |
clientVersion | Версия SDK клиента |
clientOSVersion | Версия операционной системы клиента |
clientBrowserVersion | Версия браузера клиента |
forceLogger | Включено ли принудительное логирование |
keepAlive | Используются ли Keep Alive |
3. Сервер отправляет сообщение getVersion
Code Block |
---|
|
{
"message":"getVersion",
"data":
[
"5.1.3674-9b5b684ac81a1c7e62d7a38e0c3a2c2433faacf9"
]
} |
В сообщении указывается версия WCS
4. При отсутствии других сообщений со стороны клиента, сервер периодически отправляет сообщение ping
Code Block |
---|
|
{
"message":"ping",
"data":[]
} |
на которое клиент должен ответить сообщением pong
Code Block |
---|
|
{
"message":"pong",
"data":[null]
} |
publish
При публикации потока обмен командами производится следующим образом:
Image Added
1. Клиент отправляет сообщение publishStream
Code Block |
---|
|
{
"message":"publishStream",
"data":
[
{
"mediaSessionId":"90e14ad0-fdb2-11e8-bce2-a3f72476fb49",
"name":"test",
"published":true,
"hasVideo":true,
"hasAudio":true,
"status":"PENDING",
"record":false,
"mediaProvider":"WebRTC",
"sdp":"v=0\r\no=- 1712288193115840199 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:qgOt\r\na=ice-pwd:KEfomSLSL4Pxj78N6T3/HAMY\r\na=ice-options:trickle\r\na=fingerprint:sha-256 EE:BC:55:18:45:6C:B4:5C:28:6F:5D:F9:42:63:1B:A2:99:8D:7A:0B:19:C3:F5:62:12:63:82:B6:F0:2C:36:E2\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:3498121776 cname:Ft3gt16szZ3kAllO\r\na=ssrc:3498121776 msid:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH 55944815-d49b-4ab2-bc19-3ecdca00b4a2\r\na=ssrc:3498121776 mslabel:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH\r\na=ssrc:3498121776 label:55944815-d49b-4ab2-bc19-3ecdca00b4a2\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 123 127 122 125 107 108 109 124\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:qgOt\r\na=ice-pwd:KEfomSLSL4Pxj78N6T3/HAMY\r\na=ice-options:trickle\r\na=fingerprint:sha-256 EE:BC:55:18:45:6C:B4:5C:28:6F:5D:F9:42:63:1B:A2:99:8D:7A:0B:19:C3:F5:62:12:63:82:B6:F0:2C:36:E2\r\na=setup:actpass\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:124 ulpfec/90000\r\na=ssrc-group:FID 3064307282 2143201641\r\na=ssrc:3064307282 cname:Ft3gt16szZ3kAllO\r\na=ssrc:3064307282 msid:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH 77c7bd16-9a65-4f62-9d01-6ecdd3e58f8a\r\na=ssrc:3064307282 mslabel:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH\r\na=ssrc:3064307282 label:77c7bd16-9a65-4f62-9d01-6ecdd3e58f8a\r\na=ssrc:2143201641 cname:Ft3gt16szZ3kAllO\r\na=ssrc:2143201641 msid:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH 77c7bd16-9a65-4f62-9d01-6ecdd3e58f8a\r\na=ssrc:2143201641 mslabel:EZ5Uy6UkPtEoScWkyAcP5rabBY6buERZjQpH\r\na=ssrc:2143201641 label:77c7bd16-9a65-4f62-9d01-6ecdd3e58f8a\r\n",
"bitrate":0,
"minBitrate":0,
"maxBitrate":0
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя публикуемого потока |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
record | Записывать ли поток на сервере |
mediaProvider | Технология, используемая для публикации |
sdp | SDP, предлагаемое клиентом |
bitrate | Битрейт потока (если 0, то устанавливается в ходе публикации) |
minBitrate | Минимальный битрейт потока (если 0, то не ограничивается) |
maxBitrate | Максимальный битрейт потока (если 0, то не ограничивается) |
2. Сервер отправляет сообщение setRemoteSDP
Code Block |
---|
|
{
"message":"setRemoteSDP",
"data":
[
"90e14ad0-fdb2-11e8-bce2-a3f72476fb49",
"v=0\r\no=Flashphoner 0 1544579813187 IN IP4 188.40.244.249\r\ns=Flashphoner/1.0\r\nc=IN IP4 188.40.244.249\r\nt=0 0\r\nm=audio 31686 RTP/SAVPF 111 8 9\r\nc=IN IP4 188.40.244.249\r\na=mid:audio\r\na=rtpmap:111 opus/48000/2\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:9 G722/8000\r\na=ptime:20\r\na=ice-pwd:40u9aoieitv0u62tol3pr1g3h4\r\na=ice-ufrag:90e14ad0-fdb2-11e8-bce2-a3f72476fb49cfmkh1cug233q2\r\na=fingerprint:SHA-256 33:7A:40:CF:1C:42:03:20:EE:E9:F9:95:24:2A:95:85:D6:25:A9:68:C6:CF:40:09:82:74:B4:C3:F9:97:E6:EE\r\na=candidate:1 1 udp 2130706431 188.40.244.249 31686 typ host\r\na=candidate:1 2 udp 2130706431 188.40.244.249 31686 typ host\r\na=end-of-candidates\r\na=rtcp-mux\r\na=rtcp:31686 IN IP4 188.40.244.249\r\na=recvonly\r\nm=video 31920 RTP/SAVPF 100 127 102 125 96\r\nc=IN IP4 188.40.244.249\r\na=mid:video\r\na=rtpmap:100 H264/90000\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:127 H264/90000\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:102 H264/90000\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:125 H264/90000\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:* ccm fir\r\na=rtcp-fb:* nack\r\na=rtcp-fb:* nack pli\r\na=rtcp-fb:* goog-remb\r\na=ice-pwd:40u9aoieitv0u62tol3pr1g3h4\r\na=ice-ufrag:90e14ad0-fdb2-11e8-bce2-a3f72476fb49cfmkh1cug233q2\r\na=fingerprint:SHA-256 33:7A:40:CF:1C:42:03:20:EE:E9:F9:95:24:2A:95:85:D6:25:A9:68:C6:CF:40:09:82:74:B4:C3:F9:97:E6:EE\r\na=candidate:1 1 udp 2130706431 188.40.244.249 31920 typ host\r\na=candidate:1 2 udp 2130706431 188.40.244.249 31920 typ host\r\na=end-of-candidates\r\na=rtcp-mux\r\na=rtcp:31920 IN IP4 188.40.244.249\r\na=recvonly\r\n",
true
]
} |
В сообщении содержатся:
- идентификатор медиасессии
- SDP, предложенное сервером
3. После того, как поток успешно опубликован на сервере, сервер отправляет сообщение notifyStreamStatusEvent
Code Block |
---|
|
{
"message":"notifyStreamStatusEvent",
"data":
[
{
"mediaSessionId":"90e14ad0-fdb2-11e8-bce2-a3f72476fb49",
"name":"test",
"published":true,
"hasVideo":true,
"hasAudio":true,
"status":"PUBLISHING",
"audioCodec":"opus",
"videoCodec":"H264",
"record":false,
"width":0,
"height":0,
"bitrate":0,
"minBitrate":0,
"maxBitrate":0,
"quality":0,
"createDate":1544579813186,
"streamInfo":
{
"nodeId":null,
"appKey":null,
"sessionId":null,
"mediaSessionId":"90e14ad0-fdb2-11e8-bce2-a3f72476fb49",
"name":"test",
"samplingTime":null,
"recordTimestamp":null,
"recordStarted":false
},
"mediaProvider":"WebRTC"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя публикуемого потока |
published | Поток опубликован на сервере |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
audioCodec | Аудиокодек |
videoCodec | Видеокодек |
record | Записывается ли поток на сервере |
width | Ширина кадра (если 0, то устанавливается в ходе публикации) |
height | Высота кадра (если 0, то устанавливается в ходе публикации) |
bitrate | Битрейт потока (если 0, то устанавливается в ходе публикации) |
minBitrate | Минимальный битрейт потока (если 0, то не ограничивается) |
maxBitrate | Максимальный битрейт потока (если 0, то не ограничивается) |
quality | Показатель качества потока |
createDate | Дата создания в виде целого числа |
streamInfo | Дополнительная информация о потоке на сервере |
mediaProvider | Технология, используемая для публикации |
unpublish
При остановке публикации потока обмен командами производится следующим образом:
Image Added
1. Клиент отправляет сообщение unPublishStream
Code Block |
---|
|
{
"message":"unPublishStream",
"data":
[
{
"mediaSessionId":"1d91ae20-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":true,
"hasVideo":true,
"hasAudio":true,
"status":"PUBLISHING",
"record":false
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя публикуемого потока |
published | Поток опубликован на сервере |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
record | Записывается ли поток на сервере |
2. Сервер останавливает публикацию и отправляет сообщение notifyStreamStatusEvent
Code Block |
---|
|
{
"message":"notifyStreamStatusEvent",
"data":
[
{
"mediaSessionId":"1d91ae20-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":true,
"hasVideo":true,
"hasAudio":true,
"status":"UNPUBLISHED",
"audioCodec":"opus",
"videoCodec":"H264",
"info":"Stopped by publisher stop",
"record":false,
"width":320,
"height":240,
"bitrate":0,
"minBitrate":0,
"maxBitrate":0,
"quality":0,
"createDate":1544580045898,
"streamInfo":
{
"nodeId":null,
"appKey":null,
"sessionId":null,
"mediaSessionId":"1d91ae20-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"samplingTime":null,
"recordTimestamp":null,
"recordStarted":false
},
"mediaProvider":"WebRTC"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя публикуемого потока |
published | Поток опубликован на сервере |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
audioCodec | Аудиокодек |
videoCodec | Видеокодек |
record | Записывается ли поток на сервере |
width | Ширина кадра (если 0, то устанавливается в ходе публикации) |
height | Высота кадра (если 0, то устанавливается в ходе публикации) |
bitrate | Битрейт потока (если 0, то устанавливается в ходе публикации) |
minBitrate | Минимальный битрейт потока (если 0, то не ограничивается) |
maxBitrate | Максимальный битрейт потока (если 0, то не ограничивается) |
quality | Показатель качества потока |
createDate | Дата создания в виде целого числа |
streamInfo | Дополнительная информация о потоке на сервере |
mediaProvider | Технология, используемая для публикации |
play
При воспроизведении потока обмен командами производится следующим образом:
Image Added
1. Клиент отправляет сообщение playStream
Code Block |
---|
|
{
"message":"playStream",
"data":
[
{
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":false,
"hasVideo":true,
"hasAudio":true,
"status":"PENDING",
"record":false,
"width":0,
"height":0,
"mediaProvider":"WebRTC",
"sdp":"v=0\r\no=- 6636414462219466101 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:33IG\r\na=ice-pwd:R78vJJetyP2WeWpU6QWKGbJA\r\na=ice-options:trickle\r\na=fingerprint:sha-256 72:67:0A:92:8B:C2:CB:13:4E:7F:66:BB:AF:99:4A:0C:D9:C3:C1:3E:B9:B8:24:EB:2E:64:39:B2:19:76:85:09\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 123 127 122 125 107 108 109 124\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:33IG\r\na=ice-pwd:R78vJJetyP2WeWpU6QWKGbJA\r\na=ice-options:trickle\r\na=fingerprint:sha-256 72:67:0A:92:8B:C2:CB:13:4E:7F:66:BB:AF:99:4A:0C:D9:C3:C1:3E:B9:B8:24:EB:2E:64:39:B2:19:76:85:09\r\na=setup:actpass\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:124 ulpfec/90000\r\n",
"bitrate":0,
"minBitrate":0,
"maxBitrate":0,
"quality":0
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя потока для воспроизведения |
published | Поток опубликован на сервере (игнорируется) |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока (всегда "PENDING") |
record | Записывать ли поток на сервере (игнорируется) |
width | Ширина кадра (если 0, то воспроизвести, как опубликовано) |
height | Высота кадра (если 0, то воспроизвести, как опубликовано) |
mediaProvider | Технология, используемая для воспроизведения |
sdp | SDP, предлагаемое клиентом |
bitrate | Битрейт потока (если 0, то устанавливается в ходе воспроизведения) |
minBitrate | Минимальный битрейт потока (если 0, то не ограничивается) |
maxBitrate | Максимальный битрейт потока (если 0, то не ограничивается) |
quality | Показатель качества потока (если 0, то воспроизвести, как опубликовано) |
2. Сервер отправляет сообщение notifyAudioCodec
Code Block |
---|
|
{
"message":"notifyAudioCodec",
"data":
[
"22588500-fdb3-11e8-bddf-9b115426f01b",
{
"name":"opus"
}
]
} |
Сообщение содержит:
- Идентификатор WebRTC медиасессии
- Имя аудиокодека, используемого для публикации потока
3. Сервер отправляет сообщение setRemoteSDP
Code Block |
---|
|
{
"message":"setRemoteSDP",
"data":
[
"22588500-fdb3-11e8-bddf-9b115426f01b",
"v=0\r\no=Flashphoner 0 1544580053583 IN IP4 188.40.244.249\r\ns=Flashphoner/1.0\r\nc=IN IP4 188.40.244.249\r\nt=0 0\r\nm=audio 31354 RTP/SAVPF 111 8 9\r\nc=IN IP4 188.40.244.249\r\na=mid:audio\r\na=rtpmap:111 opus/48000/2\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:9 G722/8000\r\na=ptime:20\r\na=ice-pwd:1lbmj56an4qr2airc0adreiede\r\na=ice-ufrag:22588500-fdb3-11e8-bddf-9b115426f01bvu7m1cug2aei5\r\na=fingerprint:SHA-256 33:7A:40:CF:1C:42:03:20:EE:E9:F9:95:24:2A:95:85:D6:25:A9:68:C6:CF:40:09:82:74:B4:C3:F9:97:E6:EE\r\na=candidate:1 1 udp 2130706431 188.40.244.249 31354 typ host\r\na=candidate:1 2 udp 2130706431 188.40.244.249 31354 typ host\r\na=end-of-candidates\r\na=rtcp-mux\r\na=rtcp:31354 IN IP4 188.40.244.249\r\na=sendonly\r\na=ssrc:1734923542 cname:rtp/audio/22588500-fdb3-11e8-bddf-9b115426f01b\r\nm=video 31248 RTP/SAVPF 100 127 102 125 96\r\nc=IN IP4 188.40.244.249\r\na=mid:video\r\na=rtpmap:100 H264/90000\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:127 H264/90000\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:102 H264/90000\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:125 H264/90000\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:* ccm fir\r\na=rtcp-fb:* nack\r\na=rtcp-fb:* nack pli\r\na=rtcp-fb:* goog-remb\r\na=ice-pwd:1lbmj56an4qr2airc0adreiede\r\na=ice-ufrag:22588500-fdb3-11e8-bddf-9b115426f01bvu7m1cug2aei5\r\na=fingerprint:SHA-256 33:7A:40:CF:1C:42:03:20:EE:E9:F9:95:24:2A:95:85:D6:25:A9:68:C6:CF:40:09:82:74:B4:C3:F9:97:E6:EE\r\na=candidate:1 1 udp 2130706431 188.40.244.249 31248 typ host\r\na=candidate:1 2 udp 2130706431 188.40.244.249 31248 typ host\r\na=end-of-candidates\r\na=rtcp-mux\r\na=rtcp:31248 IN IP4 188.40.244.249\r\na=sendonly\r\na=ssrc:1329233369 cname:rtp/video/22588500-fdb3-11e8-bddf-9b115426f01b\r\n",
true
]
} |
Сообщение содержит:
- Идентификатор WebRTC медиасессии
- SDP, предлагаемое сервером
3. После того, как началась передача медиаданных, сервер отправляет сообщение notifyStreamStatusEvent
Code Block |
---|
|
{
"message":"notifyStreamStatusEvent",
"data":
[
{
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":false,
"hasVideo":true,
"hasAudio":true,
"status":"PLAYING",
"audioCodec":"opus",
"videoCodec":"H264",
"record":false,
"width":0,
"height":0,
"bitrate":0,
"minBitrate":0,
"maxBitrate":0,
"quality":0,
"createDate":1544580053573,
"streamInfo":
{
"nodeId":null,
"appKey":null,
"sessionId":null,
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"samplingTime":null,
"recordTimestamp":null,
"recordStarted":false
},
"mediaProvider":"WebRTC"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя воспроизводимого потока |
published | Поток опубликован на сервере (игнорируется) |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
audioCodec | Аудиокодек |
videoCodec | Видеокодек |
record | Записывается ли поток на сервере |
width | Ширина кадра (если 0, то устанавливается в ходе воспроизведения) |
height | Высота кадра (если 0, то устанавливается в ходе воспроизведения) |
bitrate | Битрейт потока (если 0, то устанавливается в ходе воспроизведения) |
minBitrate | Минимальный битрейт потока (если 0, то не ограничивается) |
maxBitrate | Максимальный битрейт потока (если 0, то не ограничивается) |
quality | Показатель качества потока |
createDate | Дата создания в виде целого числа |
streamInfo | Дополнительная информация о потоке на сервере |
mediaProvider | Технология, используемая для воспроизведения |
4. Сервер отправляет сообщение notifyVideoFormat
Code Block |
---|
|
{
"message":"notifyVideoFormat",
"data":
[
{
"streamerVideoWidth":320,
"streamerVideoHeight":240,
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"status":"RESIZE"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
streamerVideoWidth | Ширина публикуемого кадра |
streamerVideoHeight | Высота публикуемого кадра |
mediaSessionId | Идентификатор WebRTC медиасессии |
status | Статус видеодорожки потока |
stop
При остановке воспроизведения потока обмен командами производится следующим образом:
Image Added
1. Клиент отправляет сообщение stopStream
Code Block |
---|
|
{
"message":"stopStream",
"data":
[
{
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":false,
"hasVideo":true,
"hasAudio":true,
"status":"PLAYING",
"record":false
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя воспроизводимого потока |
published | Поток опубликован на сервере (игнорируется) |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
record | Записывается ли поток на сервере |
2. Сервер останавливает воспроизведение и отправляет сообщение notifyStreamStatusEvent
Code Block |
---|
|
{
"message":"notifyStreamStatusEvent",
"data":
[
{
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"published":false,
"hasVideo":true,
"hasAudio":true,
"status":"STOPPED",
"audioCodec":"opus",
"videoCodec":"H264",
"info":"Stopped by user",
"record":false,
"width":320,
"height":240,
"bitrate":0,
"minBitrate":0,
"maxBitrate":0,
"quality":0,
"createDate":1544580053573,
"streamInfo":
{
"nodeId":null,
"appKey":null,
"sessionId":null,
"mediaSessionId":"22588500-fdb3-11e8-bddf-9b115426f01b",
"name":"test",
"samplingTime":null,
"recordTimestamp":null,
"recordStarted":false
},
"mediaProvider":"WebRTC"
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
name | Имя воспроизводимого потока |
published | Поток опубликован на сервере (игнорируется) |
hasVideo | Присутствует ли видео в потоке |
hasAudio | Присутствует ли аудио в потоке |
status | Статус потока |
audioCodec | Аудиокодек |
videoCodec | Видеокодек |
info | Текстовое описание статуса |
record | Записывается ли поток на сервере |
width | Ширина кадра |
height | Высота кадра |
bitrate | Битрейт потока |
minBitrate | Минимальный битрейт потока |
maxBitrate | Максимальный битрейт потока |
quality | Показатель качества потока |
createDate | Дата создания в виде целого числа |
streamInfo | Дополнительная информация о потоке на сервере |
mediaProvider | Технология, используемая для воспроизведения |
Метрики публикации/воспроизведения
В сборке 5.2.576 к сообщениям inboundVideoRate, outboundVideoRate, предназначенным для мониторинга качества канала публикации/воспроизведения, добавлены основные метрики потока, для контроля их на стороне клиента:
Code Block |
---|
|
{
"message":"inboundVideoRate",
"data":
[
{
"mediaSessionId":"a12145d0-7eee-11ea-9833-9da59e0cc100",
"videoRate":704856,
"fps":31,
"nack":0,
"pli":0,
"lostPackets":0,
"width":640,
"height":360
}
]
}
{
"message":"outboundVideoRate",
"data":
[
{
"mediaSessionId":"0040ed40-7eef-11ea-9833-9da59e0cc100",
"videoRate":685256,
"fps":30,
"nack":0,
"pli":13,
"lostPackets":0,
"width":640,
"height":360
}
]
} |
Параметры сообщения
Параметр | Описание |
---|
mediaSessionId | Идентификатор WebRTC медиасессии |
videoRate | Битрейт видео, бит/с |
fps | Частота кадров |
nack | Количество NACK пакетов |
pli | Количество PLI запросов |
lostPackets | Количество потерянных пакетов |
width | Ширина картинки |
height | Высота картинки |