sdrplay-fm-radio/docs/architecture.md

69 lines
2.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Microservice architecture
A bit of an oxymoron isn't it? If it needs an architecture diagram to explain it then how _micro_ can it be? The reality is that this microservice is actually several smaller services in a trenchcoat pretending to be one thing. I suppose that makes it just a service.
```mermaid
flowchart TB
subgraph microservice["✌ 'Microservice' ✌"]
subgraph rest[REST Interface]
flask[Flask]
swag[flasgger]
swaggerui[Swagger UI]
swag-->swaggerui
flask-->swag
end
subgraph hw[Hardware Interface]
soapy[SoapySDR]
subgraph plugins[Vendor Plugins]
soapysdrplay[SoapySDRPlay]
soapyrtlsdr[SoapyRTLSDR]
end
soapy<-->plugins
end
%%soapy<-->flask
rest-->hw
hw-->rest
subgraph radio["DSP Chain          `"]
demod["FM Demodulator\n(fm_demod.py)"]
ffmpeg
end
mediamtx["RTSP Relay\n(MediaMTX)"]
plugins-->|IQ samples|demod
demod-->|PCM audio|ffmpeg
ffmpeg-->|RTP stream|mediamtx
subgraph proxy[Reverse Proxy]
caddy[Caddy]
l4[Caddy Layer 4 Plugin]
%%le[Let's Encrypt]
style l4 stroke-dasharray: 3 3,opacity: 0.5
caddy-.->l4
%%le-->caddy
end
flask<-->|HTTP:5000|caddy
swaggerui<-->|HTTP:5000|caddy
mediamtx-.->|RTSP:8554|l4
end
style microservice opacity: 0.5
%%rtlsdr[RTL-SDR Driver]-->soapyrtlsdr
%%sdrplay[SDRPlay Driver]-->soapysdrplay
subgraph client["Client"]
control["REST Client\n(Browser)"]
rtsp["RTSP Renderer\n(VLC)"]
rtp["RTP Sink\n(VLC/ffplay)"]
style rtp stroke-dasharray: 3 3,opacity: 0.5
end
style client opacity: 0.5
caddy<-->|HTTPS:443|control
l4-.->|RTSPS|rtsp
mediamtx-->|RTSP|rtsp
ffmpeg-.->|RTP|rtp
```