Транспорты и каналы
VideoGrace сознательно разделяет разные классы трафика. Это упрощает отладку, уменьшает влияние больших blob-передач на media и позволяет держать разные политики reconnect.
flowchart LR
Client[Client]
subgraph Channels[Transport channels]
C[CommandLoop<br/>JSON commands]
B[BlobChannel<br/>binary blobs]
M[WSMedia<br/>binary RTP/RTCP]
U[UDP media<br/>native primary]
end
Server[Server]
Client <-->|auth, commands, state| C
Client <-->|files, images, speed-test| B
Client <-->|browser media mux| M
Client <-->|native media primary| U
C --> Server
B --> Server
M --> Server
U --> Server
Основные каналы
| Канал | Формат | Назначение | Lifecycle |
|---|---|---|---|
CommandLoop |
JSON | Control plane: auth, contacts, conferences, devices, calls, messages. | Один основной канал клиента. |
BlobChannel |
WSM binary blob frames | Файлы, картинки, voice blobs, speed-test. | Отдельный канал, не должен смешиваться с media. |
WSMedia |
WSM binary media frames | RTP/RTCP media. | Browser primary; native fallback. |
| UDP | RTP/RTCP | Нативный основной media path. | Несколько sockets допустимы, зависит от native transport. |
Browser media rule
В браузере WSMedia — основной media path. Он должен быть один на access token/conference и не должен плодиться на каждое устройство.
flowchart TB
Browser[Browser web-client]
Mux[MediaMuxSocket<br/>one WSMedia WebSocket]
Mic[Local mic SSRC]
Cam[Local cam SSRC]
Screen[Local screen SSRC]
RA[Remote audio SSRCs]
RV[Remote video SSRCs]
Mic --> Mux
Cam --> Mux
Screen --> Mux
Mux --> RA
Mux --> RV
Native media rule
В native UDP остаётся primary path. WSS нужен как fallback для сетей, где UDP недоступен или нестабилен. Fallback должен использовать тот же mux-инвариант, что web: одна WSS media session, много ssrc.