remote desktop · 5 codecs · cross-platform

Oblireach

Cross-platform remote desktop agent.

Screen capture, 5 live-switchable codecs, WASAPI audio, multi-monitor, bidirectional chat and full input control — streamed to any browser over WebSocket. Windows, macOS and Linux.

Codecs ↓ Platforms ↓ Protocol ↓

Streaming pipeline

Capture
DXGI / SCKit / X11
frames
Encode
H.264 / H.265 / VP9
AV1 / JPEG
TCP pipe
WebSocket
Obliance relay
browser
Viewer
WebCodecs
5
Video codecs
3
Platforms
Live
Codec switching
0
Plugins required
Oblireach — Remote viewer
oblireach-viewer.png Browser viewer — codec selector, monitor layout, toolbar

Video codecs

5 codecs, switchable live

The viewer sends a set_codec message at any time — the agent switches encoder and resumes without reconnecting. Adaptive bitrate adjusts every 500 ms based on send time (1–100 Mbps range). DLLs loaded dynamically via LoadLibrary — bundled with the MSI.

H.264
OpenH264 (Cisco, BSD)
Software encoder. Works in all sessions including cross-session. Falls back to WMF if DLL missing, then JPEG after 30 frames with zero output.
Default
H.265 / HEVC
libx265-215.dll
Better compression at same bitrate. Requires WebCodecs HEVC support in the browser.
Live switch
VP9
libvpx-1.dll
Royalty-free, broad browser support via WebCodecs VP9 decoder.
Live switch
AV1
libSvtAv1Enc-2.dll
Best compression ratio. Higher CPU cost, hardware decode in modern browsers.
Live switch
JPEG
Built-in (quality 15)
Universal fallback. No WebCodecs required. Auto-triggers after 30 frames with zero decoder output.
Auto-fallback

Platforms

Windows, macOS, Linux

One Go codebase with platform-specific CGo backends for capture, input and audio. Each platform uses the native screen capture API.

Windows
CaptureDXGI Desktop Duplication (GDI fallback)
InputSendInput + VkKeyScanW (layout-aware)
AudioWASAPI loopback (PCM 16-bit mono)
SessionCross-session via SYSTEM token
ChatWebView2 popup window
InstallerMSI via WiX + 7 DLLs bundled
All 5 codecs available. Full feature set.
macOS
CaptureScreenCaptureKit (SCStream, Obj-C CGo)
InputCGEventPost
AudioNot yet implemented
Multi-monitorCGGetActiveDisplayList
Requires Screen Recording permission. ScreenCaptureKit replaces deprecated CGWindowListCreateImage (macOS 15+).
Linux
CaptureX11 XGetImage + XRandr
InputXTest extension
AudioNot yet implemented
Depslibx11-dev, libxrandr-dev, libxtst-dev
CGO_ENABLED=0 fallback (stubs only) if X11 unavailable.

Features

More than screen sharing

Full interactive remote session with audio, chat, multi-monitor and granular input control.

Multi-monitor

DXGI output enumeration (Windows), XRandr (Linux), CGGetActiveDisplayList (macOS). Viewer shows a mini monitor layout — click to switch live via set_monitor. Mouse coordinates remapped per monitor offset.

Audio streaming

WASAPI loopback on Windows captures all system audio. Sent as PCM 16-bit mono LE via frame type 0x06, decoded via browser AudioContext. Mute toggle in viewer toolbar.

Bidirectional chat

Separate helper process spawns a WebView2 window in the target user session. Operator avatar from Obliance profile. "Request Remote Control" with Accept/Deny buttons. i18n FR/EN. Auto-minimizes after 30s without unread messages.

Full input control

Keyboard via VkKeyScanW — layout-aware (AZERTY, QWERTZ…). Mouse with MOUSEEVENTF_VIRTUALDESK. Clipboard sync bidirectionnel. BlockInput to lock the remote keyboard/mouse during sensitive operations.

Cross-session relay

Helper spawned with SYSTEM token in the target user session — bypasses UIPI for admin windows. TCP pipe relays frames and audio to the session-0 service → Obliance WS → browser. 10 min inactivity timeout with 30s warning.

Session notifications

Custom Win32 borderless toast — slide-in bottom-right, auto-close. "REC" watermark overlay injected in the target session as a visible indicator during active recording.

Protocol

WebSocket frame types

Binary frames with a 1-byte type prefix. The viewer reads the first byte to route to the correct decoder. Codec switch: viewer sends JSON {"type":"set_codec","codec":"h265"} — agent switches encoder and resumes without reconnecting.

ByteTypeContent
0x01JPEGRaw JPEG at quality 15 — auto-fallback
0x02H.264Annex B NAL units (OpenH264 or WMF)
0x03VP9libvpx VP9 bitstream
0x04H.265 / HEVCx265 HEVC bitstream
0x05AV1SVT-AV1 bitstream
0x06AudioPCM 16-bit mono LE → browser AudioContext

Chat & consent

Session consent built-in

The operator opens a chat before or during the session. The end-user sees a WebView2 popup with the operator's avatar and a "Request Remote Control" prompt.

WebView2 popup Accept / Deny flow Operator avatar FR / EN i18n Auto-minimize Re-open on new message
Chat popup — target session
oblireach-chat.png

Tech stack

Native performance, zero plugins

Go (agent + client-app) CGo — Win32 / Obj-C / X11 DXGI / ScreenCaptureKit / XGetImage OpenH264 · x265 · libvpx · SVT-AV1 WASAPI audio WebView2 (chat + client) WebCodecs VideoDecoder WiX MSI