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:

C:\Meta\Mimir\config\localcast.json

Current endpoints:

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:

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:

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:

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:

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:

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:

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.