3.1 KiB
Network Display Synchronization
Raven can be a low-level synchronized producer when it controls both its display output and an audio timing signal routed into the Scarlett.
Authority map:
- Owner:
Mimir.Runtimeowns aligned rolling-buffer frames. - Inputs: camera buffers, Raven display frames, Scarlett ASIO audio buffers, and explicit timing corrections learned from audio evidence.
- Outputs:
MimirSynchronizedBufferFrameslices at one canonical presentation time for Fensalir/Faust/OBS publication. - Derived state: Raven display timing is derived from the Raven audio sync signal. The display feed is not a timing authority by itself.
- Forbidden writers: OBS, SRT bridge endpoints, frame-event probes, and network receive timestamps must not decide cross-stream alignment. CultMesh reliable UDP packet arrival is transport evidence only, not clock authority.
- Shared path: local cameras, network display frames, mic channels, loopback
channels, and Raven audio sync channels all enter
MimirRollingStreamBufferfirst, then the synchronized planner chooses slices. - Deletion line: any compositor path that directly consumes Raven pixels outside the runtime buffer/alignment path is diagnostic only.
Practical shape:
- Raven renders a visible timing marker or encoded frame identity on the captured display.
- Raven emits the matching audio timing signal through its audio output.
- That audio is physically or digitally routed into a Scarlett input beside the mic channels.
- Mimir decodes the Scarlett audio evidence, learns the Raven clock offset, and
applies that clock-domain correction to the
raven-displayvideo buffer. - Fensalir receives aligned buffer slices and still owns composition.
config/mimir-runtime.raven-eve.example.json is the active bridge setup shape
for the network producer pass:
raven-displaylistens for Raven screen capture on SRT port5200, decodes through FFmpeg, and emits BGRA video samples into the runtime buffer path.eve-cameralistens for EveCanvas camera frame-events on WebSocket port8793.eve-miclistens for EveCanvas microphone frame-events on WebSocket port8794.
The target Verse shape replaces those SRT/WebSocket bridge edges with CultMesh
reliable-UDP lanes: typed mimir.cultmesh_stream_frame.v1 envelopes for
per-frame media metadata and refs, plus bounded media body shards for payloads
too large to inline. Raven display frames remain media observations entering
the same rolling buffer; Raven sync still comes from audio evidence and
clock-domain correction, not packet arrival.
The older disabled frame-events example in
config/mimir-runtime.asio.example.json remains diagnostic only. It can witness
source timestamps and frame identity, but it does not carry pixels. The Scarlett
channel carrying Raven's sync audio is still the evidence path that earns the
raven-sync timing correction.
Smoke proof:
dotnet run --project .\src\Mimir.BufferSmoke\Mimir.BufferSmoke.csproj -- --synchronized-buffer-planner-smoke
dotnet run --project .\src\Mimir.BufferSmoke\Mimir.BufferSmoke.csproj -- --ffmpeg-rawvideo-source-smoke