Mimir/docs/neighbor-sender-setup.md
2026-05-21 18:48:47 +01:00

129 lines
4.2 KiB
Markdown

# Neighbor Sender Setup
## Host
- Sender: `192.168.1.84` / `DESKTOP-M9FTRLL`
- SSH: `ssh "madman's lullaby@192.168.1.84"`
- Install root: `C:\Meta\Mimir`
- Receiver OBS workstation: `192.168.1.66`
## Installed State
- FFmpeg installed through winget as `Gyan.FFmpeg 8.1.1`.
- FFmpeg alias path observed:
- `C:\Users\Madman's Lullaby\AppData\Local\Microsoft\WinGet\Links\ffmpeg.exe`
- NVIDIA GPU observed:
- `NVIDIA GeForce RTX 4060 Ti`
- driver `591.86`
- FFmpeg reports:
- `srt` input/output protocol
- `h264_nvenc` encoder
- SoundVolumeView installed through winget as `NirSoft.SoundVolumeView`.
## Sender Config
Live local config on the sender:
```text
C:\Meta\Mimir\config\localcast.json
```
Current endpoints:
```text
video: srt://192.168.1.66:5100?mode=caller&latency=120000
focusrite srt://192.168.1.66:5101?mode=caller&latency=120000
system srt://192.168.1.66:5102?mode=caller&latency=120000
```
Current video capture size is `1920x1080` for the interactive desktop. Do not
trust the `1024x768` size reported from SSH; that is the remote session display,
and using it captures only a slice of the actual desktop.
OBS on the receiver should add listener-mode Media Sources:
```text
video: srt://0.0.0.0:5100?mode=listener&latency=120000&timeout=5000000
focusrite srt://0.0.0.0:5101?mode=listener&latency=120000&timeout=5000000
system srt://0.0.0.0:5102?mode=listener&latency=120000&timeout=5000000
```
As of `2026-05-18`, the receiver OBS scene collection at
`%APPDATA%\obs-studio\basic\scenes\Untitled.json` has these sources added to
the current scene:
```text
Neighbor PC - Video
Neighbor PC - Focusrite
Neighbor PC - System Audio
```
The pre-edit backup is next to the scene file with a
`Untitled.json.localcast-backup-*` suffix.
## Desktop Launchers
Madman's desktop has:
```text
C:\Users\Madman's Lullaby\Desktop\Start Mimir Sender.cmd
C:\Users\Madman's Lullaby\Desktop\Stop Mimir Sender.cmd
```
Start launcher:
- runs `scripts\start-localcast-desktop.ps1`
- uses `config\localcast.json`
- passes the winget FFmpeg alias path explicitly
- calls `SoundVolumeView.exe` by absolute path inside PowerShell because the
winget alias is not reliably available in interactive `cmd.exe`
- sets Windows default render to `Focusrite USB Audio\Device\Speakers\Render`
- sets Windows default capture to `Focusrite USB Audio\Device\Analogue 1 + 2\Capture`
- writes FFmpeg logs under `C:\Meta\Mimir\logs`
Stop launcher:
- runs `scripts\stop-localcast-desktop.ps1`
- stops FFmpeg processes whose command line contains `srt://`
- restores Windows default render to `Focusrite USB Audio\Device\Speakers\Render`
- restores Windows default render to `Focusrite USB Audio\Device\Speakers\Render`
## Audio Reality
FFmpeg DirectShow discovery originally exposed one hardware audio input:
```text
Analogue 1 + 2 (Focusrite USB Audio)
```
The sender FFmpeg build does not expose a native `wasapi` input device, so it
cannot directly capture primary playback by itself. `scripts\wasapi-loopback-capture.ps1`
is the direct Core Audio loopback path. It works when launched in the logged-in
console session and audio is actually rendering; SSH-only launches can open the
endpoint but receive no render packets. The native/co-streamer capture path
therefore schedules the WASAPI loopback leg into the interactive session and
pulls the resulting raw float PCM back for alignment.
Do not rename the loopback in config unless the replacement appears in:
```powershell
ffmpeg -hide_banner -f dshow -list_devices true -i dummy
```
If the loopback file is zero bytes, no app audio rendered during the capture
window. Do not widen OBS to unsynchronized raw audio as a workaround.
## SSH Testing Trap
Do not use an SSH-launched sender process as proof that video capture is broken.
When launched from SSH, `gdigrab` sees the remote Windows session desktop and
can fail with `Failed to capture image (error 5)`. The sender video process
must be launched from Madman's interactive desktop, normally through:
```text
C:\Users\Madman's Lullaby\Desktop\Start Mimir Sender.cmd
```
Attached SSH probes are still useful for audio devices and SRT reachability.
For example, an attached FFmpeg probe successfully transmitted audio to OBS on
ports `5101` and `5102`.