Skip to content

Конференция и устройства

Подключение к конференции и публикация устройств разделены. Сначала клиент входит в конференцию, затем создаёт локальные устройства через device_params, а сервер рассылает device_connect.

sequenceDiagram
    participant Client
    participant Control as CommandLoop
    participant Processor
    participant Conference
    participant Other as Other clients

    Client->>Control: connect_to_conference_request(tag, has_camera, has_microphone)
    Control->>Processor: request
    Processor->>Conference: add member / update state
    Processor-->>Client: connect_to_conference_response
    Processor-->>Client: existing device_connect events
    Processor-->>Other: member/device updates

    Client->>Client: start local capture
    Client->>Control: device_params(type, resolution, ssrc, metadata)
    Control->>Processor: create device
    Processor-->>Client: device_connect(my=1, author_ssrc, port, secure_key)
    Processor-->>Other: device_connect(my=0, receiver_ssrc, port, secure_key)

Local publish flow

flowchart TB
    Toggle[User toggles mic/cam/screen on]
    Capture[Start local capture]
    Params[Send device_params]
    Created[Receive device_connect my=1]
    Attach[Register author_ssrc in media transport]
    Encode[Encode Opus/VP8]
    Send[Send WSM media frames]

    Toggle --> Capture --> Params --> Created --> Attach --> Encode --> Send

Remote receive flow

flowchart TB
    Event[device_connect my=0]
    Session[Create MediaChannel]
    Register[Register receiver_ssrc in mux]
    Init[Send RTP init]
    Keyframe[Video: send ForceKeyFrame RTCP]
    Receive[Receive RTP frames by SSRC]
    Decode[Decode and render/play]

    Event --> Session --> Register --> Init --> Keyframe --> Receive --> Decode
    Init --> Receive

Device disconnect

sequenceDiagram
    participant Client
    participant Control
    participant Processor
    participant MediaMux

    Client->>Control: disconnect_device(device_id)
    Client->>MediaMux: unregister ssrc
    Control->>Processor: delete device
    Processor-->>Client: device_disconnect
    Processor-->>OtherClients: device_disconnect
    Note over MediaMux: shared media transport remains open

Практические правила

  • device_id нужен для control lifecycle и UI.
  • author_ssrc используется для локальной отправки.
  • receiver_ssrc используется для remote receive и demux.
  • port указывает внутренний media endpoint на сервере/translator.
  • secure_key применяется на RTP payload level, а не на WebSocket session level.