How flylive302/mediasoup-socket-io-audio-broadcasting-server works
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: index.ts Socket event dispatch · roomManager.ts Room lifecycle · roomMediaCluster.ts Room media cluster · room.handler.ts Room handlers
Components 27
Connection and auth
- HTTP and Socket.IO
src/infrastructure/server.ts - Socket event dispatch
src/socket/index.ts - Socket authentication
src/auth/middleware.ts - JWT validation
src/auth/jwtValidator.ts - Connected clients
src/client/clientManager.ts
Rooms and interaction
- Room handlers
src/domains/room/room.handler.ts - Room lifecycle
src/domains/room/roomManager.ts - Speaker seats
src/domains/seat/seat.handler.ts - Room chat
src/domains/chat/chat.handler.ts - Gift transactions
src/domains/gift/giftHandler.ts - Presence tracking
src/domains/presence/presence.service.ts
Media and broadcast
- Room mode decisions
src/domains/room/mode/room-mode-controller.ts - WebRTC signaling
src/domains/media/media.handler.ts - Room media cluster
src/domains/media/roomMediaCluster.ts - SFU router
src/domains/media/routerManager.ts - Broadcast controller
src/domains/broadcast/broadcast-publish-controller.ts - Speaker mixer
src/domains/broadcast/speaker-mixer.ts - HLS publisher
src/domains/broadcast/hls-publisher.ts - Cross-region cascade
src/domains/cascade/cascade-coordinator.ts
State and scaling
- Mediasoup workers
src/infrastructure/worker.manager.ts - Redis state
src/infrastructure/redis.ts - Audio quality metrics
src/domains/media/quality/qualitySampler.ts
External services
- Laravel backend
- FFmpeg
- HLS object storage
- Laravel integration
src/integrations/laravelClient.ts
Other components
- Conference client
Connections 35
- 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