Skip to content

Транспорты и каналы

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.