How biaogo/foundation-sunshine-linux works
Sunshine is a self-hosted Moonlight game-streaming host. The principal workflow is client pairing and configuration, application launch, capture and encoding of host audio/video, then delivery to Moonlight; client input returns to the host. The map also preserves platform capture/display capabilities, virtual displays, and network discovery. The README and tree establish these product areas, but the sampled source is partial, so uncertain internal call wiring is omitted.
Main entry points: stream.cpp Stream coordination · network.cpp Network transport · main.cpp Application entry · confighttp.cpp HTTP management
Components 22
Management
- Application entry
src/main.cpp - Configuration
src/config.cpp - HTTP management
src/confighttp.cpp - Web assets
src/file_handler.cpp - Client pairing
src/nvhttp.cpp - Runtime state
src/globals.cpp
Streaming session
- Application launch
src/process.cpp - RTSP sessions
src/rtsp.cpp - Stream coordination
src/stream.cpp
Media pipeline
- Video capture
src/video.cpp - NVENC encoding
src/nvenc/nvenc_base.cpp - Audio capture
src/audio.cpp - Microphone stream
src/mic_stream.cpp
Platform I/O
- Client input
src/input.cpp - Display management
src/display_device.cpp - Linux virtual display
src/platform/linux/virtual_display.cpp - Linux capture
src/platform/linux/kmsgrab.cpp
Networking
- Network transport
src/network.cpp - UPnP discovery
src/upnp.cpp
Other components
- Moonlight client
- Web browser
- Host display and devices
Connections 28
- Web browser → HTTP management: configures via
- HTTP management → Configuration: updates settings
- HTTP management → Web assets: serves UI
- Moonlight client → Client pairing: pairs with
- Client pairing → Runtime state: records client
- Application entry → Configuration: loads settings
- Application entry → Application launch: refreshes apps
- Moonlight client → RTSP sessions: requests session
- RTSP sessions → Stream coordination: coordinates session
- Stream coordination → Application launch: launches app
- Stream coordination → Video capture: requests frames
- Video capture → Linux capture: captures frames
- Linux capture → Host display and devices: reads display
- Video capture → NVENC encoding: encodes frames
- Stream coordination → Audio capture: requests audio
- Audio capture → Host display and devices: reads audio
- Stream coordination → Network transport: sends media
- Network transport → Moonlight client: delivers stream
- Moonlight client → Network transport: sends input
- Network transport → Client input: dispatches input
- Client input → Host display and devices: controls devices
- Moonlight client → Microphone stream: sends microphone audio
- Microphone stream → Host display and devices: outputs audio
- Display management → Host display and devices: manages displays
- Display management → Linux virtual display: offers virtual display
- Linux virtual display → Host display and devices: configures display
- Application entry → UPnP discovery: supports discovery
- Network transport → UPnP discovery: maps ports