Files
0% [█ █ █ █ █ █ █ █ █ █] 100% ac93c233fb Update README.md
2026-07-18 23:05:04 -05:00

83 lines
4.1 KiB
Markdown

# 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.