# Architecture ## Objective Make one local Windows computer available as OBS sources on another computer, with sender-side NVENC video encoding and independently mixable audio sources. ## Current Mechanism The repo owns configuration and scripts. FFmpeg owns capture, encoding, and SRT transport. OBS owns scene composition. Inputs become outputs like this: 1. `config/localcast.json` declares the receiver IP, SRT ports, video capture shape, and named audio devices. 2. `scripts/sender-discover.ps1` asks FFmpeg what Windows capture devices and encoders exist. 3. `scripts/sender-start.ps1` validates the config and launches one FFmpeg process per source. 4. The video process captures the desktop and encodes H.264 using `h264_nvenc`. 5. Each audio process captures one DirectShow audio device and encodes Opus. 6. Each process sends MPEG-TS over SRT to a stable receiver URL. 7. OBS adds each URL as a Media Source. ## Invariants - Video encoding happens on the sender. - OBS receives ordinary media-source URLs; it does not need a plugin for v1. - Audio remains separately mixable in OBS. - Ports are stable and derived from one base port plus explicit offsets. - Secrets, if used, stay in local config and are not committed. ## Intended Change The first implementation creates the repeatable operating spine. Future native code is only justified if the SRT Media Source path fails one of the invariants above. ## Cut Line The following do not currently earn their keep: - OBS fork - OBS plugin - custom receiver daemon - synchronized multi-track container that hides audio sources from OBS mixing - homegrown capture stack over Windows APIs ## Source Notes - OBS SRT guide: `https://obsproject.com/kb/srt-protocol-streaming-guide` - FFmpeg devices docs: `https://www.ffmpeg.org/ffmpeg-devices.html` - FFmpeg protocols docs: `https://ffmpeg.org/ffmpeg-protocols.html`