# flylive302/mediasoup-socket-io-audio-broadcasting-server architecture

> Architecture diagram of the GitHub repository flylive302/mediasoup-socket-io-audio-broadcasting-server, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/flylive302/mediasoup-socket-io-audio-broadcasting-server
- Repository: https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server

## Overview

FlyLive is a horizontally scalable, audio-only conferencing backend. Clients authenticate over Socket.IO, join rooms, and use mediasoup WebRTC transports to publish and consume audio; room state and coordination use Redis, while Laravel supplies authentication and business operations. Major documented capabilities also include chat, gifts, presence, room-mode scaling to HLS broadcast, and cross-instance media cascading. The README documents the broad workflow; sampled source supports selected room, media, broadcast, and integration relationships, so uncertain wiring is omitted.

Main entry points: [`src/socket/index.ts`](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/socket/index.ts) (Socket event dispatch), [`src/domains/room/roomManager.ts`](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/roomManager.ts) (Room lifecycle), [`src/domains/media/roomMediaCluster.ts`](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/roomMediaCluster.ts) (Room media cluster), [`src/domains/room/room.handler.ts`](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/room.handler.ts) (Room handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Connection and auth"]
  node_server["HTTP and Socket.IO<br/>[server.ts]"]
  node_socket["Socket event dispatch<br/>[index.ts]"]
  node_auth["Socket authentication<br/>[middleware.ts]"]
  node_jwt["JWT validation<br/>[jwtValidator.ts]"]
  node_clients["Connected clients<br/>[clientManager.ts]"]
end

subgraph group_rooms["Rooms and interaction"]
  node_roomhandlers["Room handlers<br/>[room.handler.ts]"]
  node_roommanager["Room lifecycle<br/>[roomManager.ts]"]
  node_seat["Speaker seats<br/>[seat.handler.ts]"]
  node_chat["Room chat<br/>[chat.handler.ts]"]
  node_gift["Gift transactions<br/>[giftHandler.ts]"]
  node_presence["Presence tracking"]
end

subgraph group_media["Media and broadcast"]
  node_mode["Room mode decisions"]
  node_mediahandler["WebRTC signaling<br/>[media.handler.ts]"]
  node_cluster["Room media cluster"]
  node_router["SFU router<br/>[routerManager.ts]"]
  node_broadcast["Broadcast controller"]
  node_mixer["Speaker mixer<br/>[speaker-mixer.ts]"]
  node_hls["HLS publisher<br/>[hls-publisher.ts]"]
  node_cascade["Cross-region cascade"]
end

subgraph group_platform["State and scaling"]
  node_workers["Mediasoup workers<br/>[worker.manager.ts]"]
  node_redis[("Redis state<br/>[redis.ts]")]
  node_quality["Audio quality metrics<br/>[qualitySampler.ts]"]
end

subgraph group_integrations["External services"]
  node_laravel["Laravel backend"]
  node_ffmpeg["FFmpeg"]
  node_objectstore[("HLS object storage")]
  node_laravelintegration["Laravel integration<br/>[laravelClient.ts]"]
end

node_client(("Conference client"))

node_client -->|"connects via WebSocket"| node_server
node_client -->|"signals via WebRTC"| node_mediahandler
node_server -->|"dispatches events"| node_socket
node_socket -->|"authenticates sockets"| node_auth
node_auth -->|"validates token"| node_jwt
node_jwt -->|"checks credentials"| node_laravelintegration
node_laravelintegration -->|"calls internal API"| node_laravel
node_auth -->|"registers clients"| node_clients
node_socket -->|"dispatches room events"| node_roomhandlers
node_roomhandlers -->|"manages room lifecycle"| node_roommanager
node_roomhandlers -->|"tracks membership"| node_clients
node_roomhandlers -->|"handles seat actions"| node_seat
node_socket -->|"dispatches chat events"| node_chat
node_socket -->|"dispatches gift events"| node_gift
node_roommanager -->|"reconciles presence"| node_presence
node_roommanager -->|"evaluates room mode"| node_mode
node_roommanager -->|"updates room status"| node_laravelintegration
node_mediahandler -->|"manages room media"| node_cluster
node_cluster -->|"uses room router"| node_router
node_workers -->|"creates workers for"| node_router
node_mediahandler -->|"tracks media resources"| node_clients
node_mode -->|"signals mode transition"| node_broadcast
node_broadcast -->|"reads active producers"| node_cluster
node_broadcast -->|"synchronizes speakers"| node_mixer
node_broadcast -->|"starts and stops publishing"| node_hls
node_mixer -->|"mixes producer RTP"| node_cluster
node_hls -->|"runs HLS encoding"| node_ffmpeg
node_hls -->|"uploads HLS output"| node_objectstore
node_cascade -->|"relays room media"| node_cluster
node_roommanager -->|"stores room state"| node_redis
node_seat -->|"stores seat state"| node_redis
node_chat -->|"uses shared state"| node_redis
node_gift -->|"records gift ledger"| node_redis
node_laravelintegration -->|"syncs business data"| node_laravel
node_quality -->|"samples media quality"| node_router

click node_server "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/server.ts"
click node_socket "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/socket/index.ts"
click node_auth "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/auth/middleware.ts"
click node_jwt "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/auth/jwtValidator.ts"
click node_clients "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/client/clientManager.ts"
click node_roomhandlers "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/room.handler.ts"
click node_roommanager "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/roomManager.ts"
click node_seat "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/seat/seat.handler.ts"
click node_chat "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/chat/chat.handler.ts"
click node_gift "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/gift/giftHandler.ts"
click node_presence "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/presence/presence.service.ts"
click node_mode "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/mode/room-mode-controller.ts"
click node_mediahandler "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/media.handler.ts"
click node_cluster "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/roomMediaCluster.ts"
click node_router "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/routerManager.ts"
click node_workers "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/worker.manager.ts"
click node_broadcast "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/broadcast-publish-controller.ts"
click node_mixer "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/speaker-mixer.ts"
click node_hls "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/hls-publisher.ts"
click node_cascade "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/cascade/cascade-coordinator.ts"
click node_redis "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/redis.ts"
click node_laravelintegration "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/integrations/laravelClient.ts"
click node_quality "https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/quality/qualitySampler.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_socket,node_auth,node_jwt,node_clients,node_client toneBlue
class node_roomhandlers,node_roommanager,node_seat,node_chat,node_gift,node_presence toneAmber
class node_mode,node_mediahandler,node_cluster,node_router,node_broadcast,node_mixer,node_hls,node_cascade toneMint
class node_workers,node_redis,node_quality toneRose
class node_laravel,node_ffmpeg,node_objectstore,node_laravelintegration toneIndigo
```

## Components

### Connection and auth

- [HTTP and Socket.IO](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/server.ts): `src/infrastructure/server.ts`
- [Socket event dispatch](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/socket/index.ts): `src/socket/index.ts`
- [Socket authentication](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/auth/middleware.ts): `src/auth/middleware.ts`
- [JWT validation](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/auth/jwtValidator.ts): `src/auth/jwtValidator.ts`
- [Connected clients](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/client/clientManager.ts): `src/client/clientManager.ts`

### Rooms and interaction

- [Room handlers](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/room.handler.ts): `src/domains/room/room.handler.ts`
- [Room lifecycle](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/roomManager.ts): `src/domains/room/roomManager.ts`
- [Speaker seats](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/seat/seat.handler.ts): `src/domains/seat/seat.handler.ts`
- [Room chat](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/chat/chat.handler.ts): `src/domains/chat/chat.handler.ts`
- [Gift transactions](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/gift/giftHandler.ts): `src/domains/gift/giftHandler.ts`
- [Presence tracking](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/presence/presence.service.ts): `src/domains/presence/presence.service.ts`

### Media and broadcast

- [Room mode decisions](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/room/mode/room-mode-controller.ts): `src/domains/room/mode/room-mode-controller.ts`
- [WebRTC signaling](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/media.handler.ts): `src/domains/media/media.handler.ts`
- [Room media cluster](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/roomMediaCluster.ts): `src/domains/media/roomMediaCluster.ts`
- [SFU router](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/routerManager.ts): `src/domains/media/routerManager.ts`
- [Broadcast controller](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/broadcast-publish-controller.ts): `src/domains/broadcast/broadcast-publish-controller.ts`
- [Speaker mixer](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/speaker-mixer.ts): `src/domains/broadcast/speaker-mixer.ts`
- [HLS publisher](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/broadcast/hls-publisher.ts): `src/domains/broadcast/hls-publisher.ts`
- [Cross-region cascade](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/cascade/cascade-coordinator.ts): `src/domains/cascade/cascade-coordinator.ts`

### State and scaling

- [Mediasoup workers](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/worker.manager.ts): `src/infrastructure/worker.manager.ts`
- [Redis state](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/infrastructure/redis.ts): `src/infrastructure/redis.ts`
- [Audio quality metrics](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/domains/media/quality/qualitySampler.ts): `src/domains/media/quality/qualitySampler.ts`

### External services

- **Laravel backend**
- **FFmpeg**
- **HLS object storage**
- [Laravel integration](https://github.com/flylive302/mediasoup-socket-io-audio-broadcasting-server/blob/master/src/integrations/laravelClient.ts): `src/integrations/laravelClient.ts`

### Other components

- **Conference client**

## Connections

- Conference client → HTTP and Socket.IO: connects via WebSocket
- Conference client → WebRTC signaling: signals via WebRTC
- HTTP and Socket.IO → Socket event dispatch: dispatches events
- Socket event dispatch → Socket authentication: authenticates sockets
- Socket authentication → JWT validation: validates token
- JWT validation → Laravel integration: checks credentials
- Laravel integration → Laravel backend: calls internal API
- Socket authentication → Connected clients: registers clients
- Socket event dispatch → Room handlers: dispatches room events
- Room handlers → Room lifecycle: manages room lifecycle
- Room handlers → Connected clients: tracks membership
- Room handlers → Speaker seats: handles seat actions
- Socket event dispatch → Room chat: dispatches chat events
- Socket event dispatch → Gift transactions: dispatches gift events
- Room lifecycle → Presence tracking: reconciles presence
- Room lifecycle → Room mode decisions: evaluates room mode
- Room lifecycle → Laravel integration: updates room status
- WebRTC signaling → Room media cluster: manages room media
- Room media cluster → SFU router: uses room router
- Mediasoup workers → SFU router: creates workers for
- WebRTC signaling → Connected clients: tracks media resources
- Room mode decisions → Broadcast controller: signals mode transition
- Broadcast controller → Room media cluster: reads active producers
- Broadcast controller → Speaker mixer: synchronizes speakers
- Broadcast controller → HLS publisher: starts and stops publishing
- Speaker mixer → Room media cluster: mixes producer RTP
- HLS publisher → FFmpeg: runs HLS encoding
- HLS publisher → HLS object storage: uploads HLS output
- Cross-region cascade → Room media cluster: relays room media
- Room lifecycle → Redis state: stores room state
- Speaker seats → Redis state: stores seat state
- Room chat → Redis state: uses shared state
- Gift transactions → Redis state: records gift ledger
- Laravel integration → Laravel backend: syncs business data
- Audio quality metrics → SFU router: samples media quality
