<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Conexa Remote</title>
    <description>The latest articles on DEV Community by Conexa Remote (@conexaremote).</description>
    <link>https://dev.to/conexaremote</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4143155%2Fff201b3e-855d-4c30-a37b-512d87904621.png</url>
      <title>DEV Community: Conexa Remote</title>
      <link>https://dev.to/conexaremote</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/conexaremote"/>
    <language>en</language>
    <item>
      <title>Building a Zero-Middleman Peer-to-Peer Remote Desktop using WebRTC and Native OS APIs</title>
      <dc:creator>Conexa Remote</dc:creator>
      <pubDate>Fri, 25 Sep 2026 15:20:28 +0000</pubDate>
      <link>https://dev.to/conexaremote/building-a-zero-middleman-peer-to-peer-remote-desktop-using-webrtc-and-native-os-apis-3lh6</link>
      <guid>https://dev.to/conexaremote/building-a-zero-middleman-peer-to-peer-remote-desktop-using-webrtc-and-native-os-apis-3lh6</guid>
      <description>&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;Most traditional remote desktop solutions operate on a client-server relay paradigm: every desktop video frame and every mouse movement is piped to a centralized cloud datacenter, decoded or buffered, and forwarded to the remote technician. While architecturally simple for the vendor, this topology introduces severe drawbacks in real-time latency, cloud infrastructure costs, and data sovereignty compliance under regulations like GDPR and NIS2.&lt;/p&gt;

&lt;p&gt;This article details the technical architecture and engineering decisions behind &lt;strong&gt;Conexa Remote&lt;/strong&gt;, a native desktop remote access application designed to establish direct, zero-middleman peer-to-peer (P2P) connections using &lt;strong&gt;WebRTC&lt;/strong&gt; and native operating system capture APIs (&lt;strong&gt;DXGI Desktop Duplication&lt;/strong&gt; on Windows and &lt;strong&gt;ScreenCaptureKit&lt;/strong&gt; on macOS). We cover low-latency GPU frame acquisition, dual SCTP DataChannel multiplexing for 60 FPS input injection, deterministic ICE NAT traversal, and a stateless signaling model that enforces floating concurrent session limits without intrusive telemetry.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Relay Trap: Why Remote Desktop Architecture Needed a Reset
&lt;/h2&gt;

&lt;p&gt;For over two decades, the dominant commercial model for remote desktop tools combined proprietary protocols (or wrappers around VNC/RDP) with centralized relay networks.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    subgraph Legacy Architecture ["Legacy Cloud Relay (High Latency / Intermediary Buffer)"]
        A1["Host Machine (Windows/Mac)"] --&amp;gt;|"Video Payload (Encrypted to Cloud)"| R1["Vendor Cloud Relay Cluster (US/Third-Party)"]
        R1 --&amp;gt;|"Relayed Video"| B1["Technician Machine"]
        B1 --&amp;gt;|"Input Commands"| R1
        R1 --&amp;gt;|"Relayed Input"| A1
    end

    subgraph P2P Architecture ["Conexa Remote P2P (Direct DTLS-SRTP Stream)"]
        A2["Host Machine (Windows/Mac)"] &amp;lt;-.-&amp;gt;|"Signaling Only (SDP / ICE)"| S2["Signaling Node (EU Romania)"]
        B2["Technician Machine"] &amp;lt;-.-&amp;gt;|"Signaling Only (SDP / ICE)"| S2
        A2 &amp;lt;===&amp;gt;|"Direct DTLS-SRTP Media &amp;amp; DataChannels (AES-256 GCM)"| B2
    end&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;In the legacy topology:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latency Overhead:&lt;/strong&gt; A connection between two offices in Frankfurt routes through an intermediary relay server in London or Virginia, adding unnecessary network hops and buffer bloat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy &amp;amp; Compliance Exposure:&lt;/strong&gt; The intermediary relay handles the unencrypted or re-encrypted transport layer. Under EU GDPR and strict Data Processing Agreements (DPAs), routing corporate desktop video through foreign third-party infrastructure represents a serious compliance liability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPU and Memory Bloat:&lt;/strong&gt; Modern enterprise remote utilities frequently ship as 60MB+ bundles wrapping web runtimes (Electron/CEF), consuming 300MB to 1GB of RAM on idle systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By adopting &lt;strong&gt;WebRTC&lt;/strong&gt; as a standardized, secure transport layer combined with &lt;strong&gt;native platform binaries&lt;/strong&gt; (pure C++ on Windows and Swift/Objective-C on macOS), we eliminated the intermediary video relay entirely for direct connection topologies.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. System Architecture: The Three-Tier Topology
&lt;/h2&gt;

&lt;p&gt;The Conexa Remote architecture separates session negotiation, NAT hole-punching, and payload transport into three distinct layers:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;sequenceDiagram
    autonumber
    participant Host as Remote Host (Controlled Endpoint)
    participant Sig as Stateless Signaling Server (Go / EU)
    participant STUN as STUN / TURN Relay (Bucharest, EU)
    participant Tech as Technician Client (Controller)

    Host-&amp;gt;&amp;gt;Sig: Authenticate &amp;amp; Register 9-Digit Channel ID
    Tech-&amp;gt;&amp;gt;Sig: Request Connection to 9-Digit ID (Validate Floating Slot)
    Sig--&amp;gt;&amp;gt;Tech: Session Token Approved (Pool: 2/2 Active)

    Tech-&amp;gt;&amp;gt;STUN: Gather ICE Candidates (Host, Server-Reflexive)
    Host-&amp;gt;&amp;gt;STUN: Gather ICE Candidates (Host, Server-Reflexive)

    Tech-&amp;gt;&amp;gt;Sig: Send SDP Offer + ICE Candidates
    Sig-&amp;gt;&amp;gt;Host: Dispatch SDP Offer + ICE Candidates
    Host-&amp;gt;&amp;gt;Sig: Send SDP Answer + Selected ICE Pair
    Sig-&amp;gt;&amp;gt;Tech: Dispatch SDP Answer

    Note over Host,Tech: Signaling Server Disengages — Direct DTLS-SRTP Handshake
    Host&amp;lt;===&amp;gt;Tech: Direct Peer-to-Peer Tunnel (AES-256-GCM)
    Host--&amp;gt;&amp;gt;Tech: 60 FPS DXGI / ScreenCaptureKit Stream
    Tech--&amp;gt;&amp;gt;Host: SCTP Unordered Mouse Telemetry + Ordered Keystrokes&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Key Architectural Tenets:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stateless Signaling:&lt;/strong&gt; The signaling backend (written in Go) acts solely as a message broker during the initial SDP offer/answer exchange and ICE candidate pairing. Once the WebRTC &lt;code&gt;PeerConnection&lt;/code&gt; transitions to &lt;code&gt;connected&lt;/code&gt;, the signaling server does not touch, buffer, or inspect any packet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Video Interception:&lt;/strong&gt; Video never traverses the signaling cluster. Even in asymmetric network topologies where TURN relaying is unavoidable, the TURN server forwards opaque, encrypted UDP datagrams without possessing the DTLS session decryption keys.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. High-Performance Native Screen Capture Pipelines
&lt;/h2&gt;

&lt;p&gt;WebRTC is traditionally associated with browser-based video calls. In a native remote desktop application, feeding generic webcam APIs will result in severe lag, washed-out color reproduction, and high CPU utilization. We engineered separate, dedicated capture engines for Windows and macOS.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Windows Capture: DXGI Desktop Duplication API
&lt;/h3&gt;

&lt;p&gt;On Windows 10 and 11, we bypass legacy GDI &lt;code&gt;BitBlt&lt;/code&gt; and user-mode graphics hooks entirely in favor of the DirectX Graphics Infrastructure (&lt;strong&gt;DXGI&lt;/strong&gt;) Desktop Duplication API (&lt;code&gt;IDXGIOutputDuplication&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Windows C++: DXGI GPU Frame Acquisition Pipeline (Simplified Architecture)&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;d3d11.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;dxgi1_2.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DxgiCaptureEngine&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;private:&lt;/span&gt;
    &lt;span class="n"&gt;ID3D11Device&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;           &lt;span class="n"&gt;m_pD3DDevice&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;ID3D11DeviceContext&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;    &lt;span class="n"&gt;m_pImmediateContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;IDXGIOutputDuplication&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;m_pDeskDupl&lt;/span&gt;         &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;DXGI_OUTPUT_DESC&lt;/span&gt;        &lt;span class="n"&gt;m_OutputDesc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;AcquireFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ID3D11Texture2D&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;ppDesktopTexture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DXGI_OUTDUPL_FRAME_INFO&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;pFrameInfo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;IDXGIResource&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;pDesktopResource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Timeout set to 16ms (~60 FPS sampling boundary)&lt;/span&gt;
        &lt;span class="n"&gt;HRESULT&lt;/span&gt; &lt;span class="n"&gt;hr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m_pDeskDupl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AcquireNextFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pFrameInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pDesktopResource&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hr&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;DXGI_ERROR_WAIT_TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Screen contents did not change; skip frame encode&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;HandleDeviceLossOrReinitialization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Query the Direct3D 11 texture surface directly from GPU VRAM&lt;/span&gt;
        &lt;span class="n"&gt;hr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pDesktopResource&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;QueryInterface&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__uuidof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ID3D11Texture2D&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
                                              &lt;span class="k"&gt;reinterpret_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ppDesktopTexture&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;pDesktopResource&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Release&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;SUCCEEDED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ReleaseFrame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m_pDeskDupl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;m_pDeskDupl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ReleaseFrame&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why DXGI is superior:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct GPU Memory Access:&lt;/strong&gt; Frames remain in video RAM. When hardware encoding (NVENC / Intel QuickSync / AMD AMF) is active, frame buffers can be passed directly to the hardware encoder without round-tripping through system CPU memory (Zero-Copy Pipeline).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dirty Rectangles:&lt;/strong&gt; &lt;code&gt;DXGI_OUTDUPL_FRAME_INFO&lt;/code&gt; reports dirty rects and move rects. When only a cursor moves or a single terminal window scrolls, only modified sub-regions require processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-Millisecond Acquisition:&lt;/strong&gt; Frame acquisition typically takes under 0.8ms on discrete GPUs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3.2 macOS Capture: Apple ScreenCaptureKit
&lt;/h3&gt;

&lt;p&gt;On macOS 12+ (Monterey through Sequoia), we utilize Apple's modern &lt;strong&gt;ScreenCaptureKit&lt;/strong&gt; framework via native Swift/Objective-C bindings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// macOS Swift: ScreenCaptureKit Frame Stream Implementation&lt;/span&gt;
&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;ScreenCaptureKit&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;MacCaptureEngine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;NSObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SCStreamOutput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SCStreamDelegate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCStream&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;initializeStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCDisplay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;contentFilter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCContentFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;excludingWindows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCStreamConfiguration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;// Match native Retina refresh rate and color space&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pixelFormat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;kCVPixelFormatType_32BGRA&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;showsCursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;queueDepth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorSpaceName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;CGColorSpace&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sRGB&lt;/span&gt;

        &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SCStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;contentFilter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addStreamOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;sampleHandlerQueue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DispatchQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"com.conexa.videocapture"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startCapture&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;didOutputSampleBuffer&lt;/span&gt; &lt;span class="nv"&gt;sampleBuffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;CMSampleBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SCStreamOutputType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;guard&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;imageBuffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sampleBuffer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imageBuffer&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Pass CVPixelBuffer directly to WebRTC VideoTrackSource&lt;/span&gt;
        &lt;span class="kt"&gt;WebRTCBridge&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pushNativeFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sampleBuffer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;presentationTimeStamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ScreenCaptureKit operates directly within the WindowServer compositing engine, allowing hardware-accelerated capture of HDR displays, spaces, and multi-monitor layouts without triggering high CPU spikes.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Real-Time Transport: WebRTC Media &amp;amp; Dual SCTP DataChannels
&lt;/h2&gt;

&lt;p&gt;A common trap in remote desktop design is multiplexing user input (mouse, keyboard, clipboard) over the same channel as video, or relying on separate, non-synchronized TCP sockets.&lt;/p&gt;

&lt;p&gt;In Conexa Remote, we utilize a &lt;strong&gt;Dual SCTP DataChannel&lt;/strong&gt; strategy alongside the DTLS-SRTP media stream:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel Name&lt;/th&gt;
&lt;th&gt;Protocol / Configuration&lt;/th&gt;
&lt;th&gt;Reliability Setting&lt;/th&gt;
&lt;th&gt;Payload Type&lt;/th&gt;
&lt;th&gt;Engineering Rationale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;video_track&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DTLS-SRTP&lt;/td&gt;
&lt;td&gt;Lossy, Real-time adaptive&lt;/td&gt;
&lt;td&gt;H.264 / VP9 encoded video&lt;/td&gt;
&lt;td&gt;Automatically adapts bitrate and frame resolution based on RTCP feedback reports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;input_cursor&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SCTP DataChannel&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unordered, MaxRetransmits: 0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mouse coordinates, hovering, wheel events&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Zero Head-of-Line Blocking.&lt;/strong&gt; If mouse packet N+1 arrives before packet N, packet N is discarded. This delivers crisp 60 FPS tracking without lag accumulation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;input_control&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SCTP DataChannel&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Ordered, Reliable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keystrokes, key up/down, UAC commands, clipboard data&lt;/td&gt;
&lt;td&gt;Keystrokes cannot be dropped or executed out of sequence. Must be deterministically acknowledged.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// WebRTC DataChannel Initialization in C++&lt;/span&gt;
&lt;span class="n"&gt;webrtc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;DataChannelInit&lt;/span&gt; &lt;span class="n"&gt;cursorConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;cursorConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ordered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;cursorConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;maxRetransmits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Unordered, partial-reliability for cursor positions&lt;/span&gt;

&lt;span class="n"&gt;webrtc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;DataChannelInit&lt;/span&gt; &lt;span class="n"&gt;controlConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;controlConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ordered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Fully reliable, ordered delivery for keyboard &amp;amp; clipboard&lt;/span&gt;

&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;cursorChannel&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;peerConnection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CreateDataChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"input_cursor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;cursorConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;controlChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;peerConnection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CreateDataChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"input_control"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;controlConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. ICE NAT Traversal &amp;amp; European Data Sovereignty
&lt;/h2&gt;

&lt;p&gt;Establishing a direct peer-to-peer connection over modern consumer and enterprise networks requires traversing multiple NAT tiers (Full Cone, Restricted Cone, Symmetric NAT, and CGNAT).&lt;/p&gt;

&lt;p&gt;Conexa Remote executes a strict ICE gathering prioritization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Gather Host Candidates] (LAN direct — 0ms RTT)
        │
        ▼
[STUN Reflexive Candidates] (Direct WAN traversal — EU STUN Server)
        │
        ▼ (STUN Success Rate: ~82% in real-world IT fleets)
   Direct P2P
        │
        ▼ (Symmetric NAT on both endpoints or UDP hard-block)
[EU-Hosted TURN Relay Candidate] (DTLS-SRTP opaque datagram relay)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deterministic Low-Latency Optimization:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Aggressive ICE Candidate Pruning:&lt;/strong&gt; Standard WebRTC implementations often wait 2 to 4 seconds gathering all possible network interfaces before returning candidates. Conexa Remote prunes redundant virtual adapters (e.g., hypervisor host-only bridges, VPN stubs) and gathers candidates in parallel, completing ICE pairing in under 350ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Residency:&lt;/strong&gt; All STUN/TURN fallback relays are hosted in Romania (EU). For European enterprises, network traffic stays on high-speed European internet exchange backbones (typically &amp;lt;25ms RTT between Western Europe and Bucharest).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Commercial Logic Built into the Protocol: The Floating Concurrent Pool
&lt;/h2&gt;

&lt;p&gt;Most enterprise remote software enforces licensing by embedding aggressive telemetry agents that phone home constantly, tracking named user identities, hardware IDs, and local system configurations.&lt;/p&gt;

&lt;p&gt;Conexa Remote takes an architectural approach to licensing: &lt;strong&gt;The Floating Concurrent Session Pool&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;stateDiagram-v2
    [*] --&amp;gt; Idle: Technician logs in with company email
    Idle --&amp;gt; SlotAllocated: Open connection to Remote Host
    state SlotAllocated {
        [*] --&amp;gt; ActiveSession1: Consumes 1 Slot
        ActiveSession1 --&amp;gt; ActiveSession2: Multitasking: 1 Tech opens 2nd Client (2/2 Active)
    }
    ActiveSession1 --&amp;gt; SlotFreed: Close Window (Host Disconnect)
    ActiveSession2 --&amp;gt; SlotFreed: Close Window (Host Disconnect)
    SlotFreed --&amp;gt; Idle: Slot instantly restored to company pool in 0ms&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  How Concurrency is Enforced Without Spying:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No Named-User Lock:&lt;/strong&gt; An organization can create 10, 50, or 100 technician profiles and deploy the agent to thousands of endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session Slot Tokens:&lt;/strong&gt; When a technician requests a connection, the signaling backend checks the company's active slot counter:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal Tier:&lt;/strong&gt; Free (0 EUR) — capped at 1 active session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional Tier:&lt;/strong&gt; 29 EUR/month — pool of 2 active concurrent sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale:&lt;/strong&gt; +17 EUR/month per additional concurrent slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multitasking Mechanics:&lt;/strong&gt; A single technician working on dual monitors can open 2 parallel remote sessions to assist two clients simultaneously. This consumes both slots (2/2). Alternatively, two separate technicians can each run 1 session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Slot Recovery (0ms):&lt;/strong&gt; When the WebRTC &lt;code&gt;PeerConnection&lt;/code&gt; transitions to &lt;code&gt;closed&lt;/code&gt; or the socket disconnects, the signaling server decrements the active session counter in real-time. The slot is immediately available to any team member.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are no per-machine license keys to activate, no machine de-authorization hurdles, and no periodic license audit crawls.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. macOS TCC Security Framework: The Unattended Support Challenge
&lt;/h2&gt;

&lt;p&gt;One of the most complex engineering hurdles in modern desktop support is handling Apple's &lt;strong&gt;TCC (Transparency, Consent, and Control)&lt;/strong&gt; privacy framework on macOS 12+.&lt;/p&gt;

&lt;p&gt;To control a remote Mac without an end-user physically present, two permissions are mandatory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kTCCServiceScreenCapture&lt;/code&gt; (Screen Recording)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kTCCServiceAccessibility&lt;/code&gt; (Input Injection via CoreGraphics Event Taps)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Security Boundary:
&lt;/h3&gt;

&lt;p&gt;Apple deliberately prevents non-root and root user space processes from modifying the local TCC database (&lt;code&gt;/Library/Application Support/com.apple.TCC/TCC.db&lt;/code&gt;). Any utility claiming to "silently enable Mac remote access without user consent or MDM" is either using a transient vulnerability or violating Apple's security model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conexa Remote's Dual Strategy:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Fleets (MDM Deployment):&lt;/strong&gt;
For managed Macs (Jamf, Mosyle, Kandji), we provide a signed configuration profile payload (&lt;code&gt;.mobileconfig&lt;/code&gt;). This pre-authorizes the application bundle ID and cryptographic signing requirements silently:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Services&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;ScreenCapture&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;
                   &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Allowed&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&amp;lt;true/&amp;gt;&lt;/span&gt;
                   &lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;CodeRequirement&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
                   &lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;anchor apple generic and identifier "com.conexa.remote"&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ad-Hoc / SMB Environments (Non-MDM):&lt;/strong&gt;
The application detects missing entitlements on launch and opens the exact deep link directly into System Settings (&lt;code&gt;x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture&lt;/code&gt;), guiding the user through a single guided verification step.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  8. Performance Benchmarks
&lt;/h2&gt;

&lt;p&gt;We measured the performance of Conexa Remote against legacy remote desktop solutions over a symmetric 1 Gbps fiber connection across Western and Eastern Europe:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Legacy Cloud Relay Tool&lt;/th&gt;
&lt;th&gt;Electron-Based Remote Tool&lt;/th&gt;
&lt;th&gt;Conexa Remote (Native P2P)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Direct P2P Glass-to-Glass Latency (LAN)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;45–65 ms&lt;/td&gt;
&lt;td&gt;55–80 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12–16 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cross-Europe WAN Latency (RTT 30ms)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;85–120 ms&lt;/td&gt;
&lt;td&gt;95–140 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;38–46 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Idle Host Memory Footprint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;180 MB&lt;/td&gt;
&lt;td&gt;340 MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32 MB (macOS) / 38 MB (Windows)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Active 60 FPS Host CPU Overhead (Core i7)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14–18%&lt;/td&gt;
&lt;td&gt;18–25%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.8–4.5% (DXGI / NVENC)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video Relay Encryption&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relayed &amp;amp; re-encrypted in US cloud&lt;/td&gt;
&lt;td&gt;Intermediary cloud proxy&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Direct DTLS-SRTP (End-to-End AES-256)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Licensing Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per named technician seat&lt;/td&gt;
&lt;td&gt;Per managed device seat&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Floating concurrent session pool&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  9. Conclusion &amp;amp; Takeaways
&lt;/h2&gt;

&lt;p&gt;By stepping away from legacy client-server relay topologies and leveraging standardized WebRTC protocols with native OS APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We achieved &lt;strong&gt;glass-to-glass latencies down to 12ms&lt;/strong&gt; on local networks and under 45ms across trans-European links.&lt;/li&gt;
&lt;li&gt;We eliminated the need for intermediary video relay clusters, drastically reducing operational server overhead and guaranteeing &lt;strong&gt;EU GDPR compliance by design&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;We replaced predatory per-seat licensing models with a fair, transparent &lt;strong&gt;floating concurrent session pool&lt;/strong&gt; that aligns directly with how technical support teams actually work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Conexa Remote clients for Windows 10/11 and macOS 12+ are available for download at &lt;a href="https://conexaremote.com" rel="noopener noreferrer"&gt;conexaremote.com&lt;/a&gt;. The Personal tier is permanently free (1 concurrent session, no credit card required).&lt;/p&gt;




&lt;h3&gt;
  
  
  Discussion &amp;amp; Questions
&lt;/h3&gt;

&lt;p&gt;If you've built real-time WebRTC tools or desktop capture pipelines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What approaches have you taken to handle macOS pre-boot FileVault login screens for unattended access?&lt;/li&gt;
&lt;li&gt;How do you balance congestion control backoff against cursor responsiveness during network packet loss spikes?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;We'd love to hear your insights and architectural war stories in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webrtc</category>
      <category>swift</category>
      <category>programmingcpp</category>
    </item>
  </channel>
</rss>
