How ad1th/renderd works
Renderd streams a macOS desktop to a Windows viewer over a peer-to-peer QUIC connection. The host captures and encodes frames, then sends fragmented datagrams; the viewer discovers or connects to the host, reassembles and decodes frames, and presents them while returning control and timing feedback. Pairing, configuration, adaptive bitrate, clock synchronization, and reconnect behavior support that workflow. The README documents the broader feature set; sampled app and transport sources confirm orchestration and QUIC endpoint behavior, but many subsystem details are unsampled.
Main entry points: src/app.rs Viewer App · src/app.rs Host App · network/control.rs Control Dispatcher · network/control.rs Viewer Control
Components 31
macOS Host
- Host App
crates/renderd-host/src/app.rs - Capture Pipeline
crates/renderd-host/src/capture.rs - Encode Pipeline
crates/renderd-host/src/encode.rs - Host Session
crates/renderd-host/src/session/mod.rs - Control Dispatcher
crates/renderd-host/src/network/control.rs - Data Sender
crates/renderd-host/src/network/data.rs - ABR Manager
crates/renderd-host/src/abr.rs - Clock Controller
crates/renderd-host/src/clock.rs - Host UI
crates/renderd-host/src/ui/mod.rs
Windows Viewer
- Viewer App
crates/renderd-viewer/src/app.rs - Host Discovery
crates/renderd-viewer/src/discovery/mod.rs - Pairing
crates/renderd-viewer/src/pairing/mod.rs - Viewer Control
crates/renderd-viewer/src/network/control.rs - Datagram Receiver
crates/renderd-viewer/src/network/data.rs - Frame Queue
crates/renderd-viewer/src/frame_queue.rs - Video Decoder
crates/renderd-viewer/src/decoder.rs - Renderer
crates/renderd-viewer/src/renderer.rs - ABR Feedback
crates/renderd-viewer/src/abr/feedback.rs - Reconnect Watchdog
crates/renderd-viewer/src/reconnect/watchdog.rs
Peer Transport
- QUIC Server
crates/renderd-net/src/server.rs - QUIC Client
crates/renderd-net/src/client.rs
Shared Runtime
- Control Protocol
crates/renderd-proto/src/envelope.rs - Frame Reassembly
crates/renderd-frame/src/reassembly.rs - ABR Engine
crates/renderd-abr/src/engine.rs - Configuration
crates/renderd-config/src/lib.rs
Platform Integrations
- ScreenCaptureKit
crates/renderd-sc-sys/src/stream.rs - VideoToolbox
crates/renderd-vt-sys/src/session.rs - Windows Decoder
crates/renderd-viewer/src/decode/mf_decode.rs - D3D12 Renderer
crates/renderd-viewer/src/render/d3d12_renderer.rs
Other components
- Viewer User
- Peer Network
Connections 43
- Viewer User → Viewer App: starts viewer
- Viewer App → Configuration: loads settings
- Host App → Configuration: loads settings
- Host App → Capture Pipeline: starts capture
- Host App → Encode Pipeline: starts encoding
- Host App → Host Session: manages lifecycle
- Host App → Control Dispatcher: dispatches control
- Host App → Data Sender: starts sender
- Host App → QUIC Server: accepts connections
- Host App → Host UI: updates UI
- Capture Pipeline → ScreenCaptureKit: captures frames
- Encode Pipeline → VideoToolbox: encodes video
- Data Sender → Encode Pipeline: reads encoded frames
- Data Sender → Frame Reassembly: fragments frames
- Data Sender → QUIC Server: sends datagrams
- Viewer App → Host Discovery: finds hosts
- Viewer App → QUIC Client: connects to host
- Viewer App → Pairing: runs pairing
- Viewer App → Viewer Control: manages control
- Viewer App → Datagram Receiver: starts receiver
- Viewer App → Video Decoder: initializes decoder
- Viewer App → Renderer: initializes renderer
- Viewer App → Reconnect Watchdog: monitors connection
- Host Discovery → QUIC Client: provides host address
- QUIC Client → Peer Network: connects over QUIC
- QUIC Server → Peer Network: listens over QUIC
- Datagram Receiver → Frame Reassembly: reassembles fragments
- Datagram Receiver → Frame Queue: queues frames
- Datagram Receiver → Viewer Control: reports timing
- Viewer Control → Control Protocol: frames messages
- Control Dispatcher → Control Protocol: frames messages
- Viewer Control → Control Dispatcher: exchanges control
- Pairing → Control Dispatcher: exchanges pairing
- Frame Queue → Video Decoder: supplies frames
- Video Decoder → Windows Decoder: hardware decodes
- Video Decoder → Renderer: delivers decoded frames
- Renderer → D3D12 Renderer: presents frames
- ABR Feedback → Viewer Control: exports feedback
- Control Dispatcher → ABR Manager: provides feedback
- ABR Manager → ABR Engine: calculates bitrate
- ABR Manager → Encode Pipeline: adjusts bitrate
- Clock Controller → Control Dispatcher: reports timing
- Viewer App → ABR Feedback: collects statistics