# DisplayStreamer DisplayStreamer is a high-performance, ultra-low latency desktop streaming application for Windows. Built with C# and .NET, it leverages DirectX 11 and Media Foundation to provide hardware-accelerated H.265 (HEVC) and H.264 video encoding and decoding. Designed for seamless local network streaming, it features zero-configuration UDP auto-discovery, automatic client updates, and bypasses Windows power throttling to ensure a perfectly locked 60 FPS stream. ## Features * **Hardware Acceleration**: Utilizes GPU hardware encoders/decoders (NVENC, AMF, QuickSync) via Media Foundation for H.265 (HEVC) or H.264 streaming. * **Ultra-Low Latency**: Uses DXGI Desktop Duplication for zero-copy screen capture and DirectX 11 SwapChains for tear-free, hardware VSync rendering. * **Zero-Configuration Discovery**: Clients automatically discover active servers on the local network via UDP broadcast. * **Auto-Updating Clients**: If a client connects to a server running a different version, it automatically downloads the new executable into memory and restarts itself. * **Multi-Monitor Support**: Select specific network adapters and individual displays to broadcast. * **Smart Downscaling**: Automatically downscales 4K displays to 1080p using fast parallel CPU scaling to maintain network performance. * **Performance Optimizations**: Bypasses Windows EcoQoS (Power Throttling), utilizes AVRT Pro Audio thread characteristics, and uses high-resolution waitable timers to prevent frame drops when minimized or out of focus. * **Hardware Cursor Rendering**: Captures and renders the host's cursor accurately on the client side. ## Tech Stack * **Language**: C# 12 * **Framework**: .NET 8.0 (Windows Forms) * **Graphics & Capture**: DirectX 11, DXGI (Desktop Duplication API) * **Media Processing**: Media Foundation (MFT) * **Libraries**: * `SharpDX` * `SharpDX.Direct3D11` * `SharpDX.DXGI` * `SharpDX.MediaFoundation` ## System Requirements ### Server (Host) * **OS**: Windows 10 or Windows 11 * **GPU**: A dedicated or integrated GPU with hardware H.265 (HEVC) or H.264 encoding support. * **Network**: Gigabit Ethernet or Wi-Fi 6 recommended for optimal latency. ### Client (Viewer) * **OS**: Windows 10 or Windows 11 * **GPU**: A GPU with hardware H.265 (HEVC) or H.264 decoding support. * **Network**: Stable local network connection to the host. ## Build Instructions 1. **Prerequisites**: * Install [Visual Studio 2026](https://visualstudio.microsoft.com/) with the **.NET desktop development** workload. * Ensure the .NET 10.0 SDK is installed. 2. **Clone the Repository**: ```bash git clone https://git.churchofmalware.org/mastercodeon/DisplayStreamer.git cd DisplayStreamer ``` 3. **Restore NuGet Packages**: Open the solution in Visual Studio and restore the required SharpDX packages: * `SharpDX` * `SharpDX.Direct3D11` * `SharpDX.DXGI` * `SharpDX.MediaFoundation` 4. **Build**: Build the solution in `Release` mode to ensure optimal performance. ## Usage The application acts as both the Server and the Client depending on how it is launched and configured. ### Starting a Server 1. Launch `DisplayStreamer.exe`. 2. If no servers are detected on the network, it will default to **Server Mode**. (You can also manually switch modes using the button on the UI). 3. Select the **Network Adapters** you want to broadcast on. 4. Select the **Displays** you want to capture. 5. Click **Start Streaming**. The app will minimize to the system tray to save resources. Double-click the tray icon to restore it. ### Connecting a Client 1. Launch `DisplayStreamer.exe` on another computer on the same network. 2. The app will automatically detect active servers and open in **Client Mode**. 3. Double-click a discovered server in the list (or select it and press Enter) to connect. 4. The stream will open in a borderless fullscreen window. 5. **Controls**: * Press `ESC` to disconnect and close the viewer. * Press `F1` to toggle the performance metrics overlay (FPS, Encode/Decode times). ## License This project is licensed under the MIT License. See the `LICENSE` file for details.