A high-performance WiFi FPV video receiver implemented in Zig with WebAssembly support for browser-based operation and native desktop applications.
- Cross-Platform: Works on Windows, Linux, macOS and in web browsers via WebAssembly
- Video Formats: H.264 and H.265 codec support
- WiFi Protocols: IEEE 802.11 frame processing with FEC (Forward Error Correction)
- Low Latency: Optimized RTP packet processing for real-time video streaming
- WebUSB Support: Direct USB device access in browsers for RTL8812AU/RTL8814AU adapters
- Secure: ChaCha20-Poly1305 encrypted communication
- Modern UI: React-based web interface with real-time statistics
Air → USB WiFi → WebUSB → JavaScript → WASM(Zig) → RTP Processing → Canvas Rendering
Air → USB WiFi → Native Driver → Zig Processing → UDP RTP Output
- Zig: Version 0.15.0-dev.670+ (specified in
build.zig.zon) - Emscripten: For WebAssembly builds (automatically managed)
- Node.js: Version 20+ for web interface development
- npm: Package manager (comes with Node.js)
- TypeScript: Global installation required (
npm install -g typescript)
# Install global TypeScript compiler (if not already installed)
npm install -g typescript
# Build the WASM module
zig build -Dtarget=wasm32-emscripten --release=small
# Build the web interface
cd openipc-wasm
npm install
npm run build# Debug build
zig build
# Release build
zig build -Doptimize=ReleaseFastcd openipc-wasm
npm run dev- Open the web application in a modern browser
- Load your encryption key (
gs.keyfile) - Connect a compatible WiFi adapter (RTL8812AU/RTL8814AU)
- Select WiFi channel and bandwidth
- Click "Start Receiving" to begin video stream
./zig-out/bin/openipc-zig [options]- libusb: USB device communication
- libsodium: Cryptographic operations (ChaCha20-Poly1305)
- WiFiDriver: RTL8812AU/RTL8814AU device drivers
- React 19: Modern UI framework
- TypeScript: Type-safe development
- Vite: Fast build tooling
- Tailwind CSS: Utility-first styling
- Lucide React: Modern icon library
├── src/
│ ├── main.zig # Core Zig application entry
│ ├── wrapper.cpp # C++ WebAssembly bindings
│ ├── js_lib.js # JavaScript library integration
│ ├── wifi/ # WiFi processing (C++)
│ │ ├── WfbProcessor.cpp # WFB packet aggregation
│ │ ├── WfbReceiver.cpp # WiFi frame reception
│ │ ├── fec.c # Forward Error Correction
│ │ └── Rtp.h # RTP protocol handling
│ └── zig/ # Core Zig modules
│ ├── wfbprocessor.zig # WFB processing logic
│ ├── RxFrame.zig # Frame parsing
│ ├── rtp/ # RTP handling
│ └── os/ # Platform abstraction
├── openipc-wasm/ # React web interface
│ ├── src/
│ │ ├── components/ # UI components
│ │ ├── contexts/ # React contexts
│ │ ├── hooks/ # Custom hooks
│ │ └── wasm/ # Generated WASM files
│ └── public/ # Static assets
└── build.zig # Build configuration
- RTL8812AU based adapters
- RTL8814AU based adapters
- USB 3.0 recommended for optimal performance
- Chrome/Chromium 89+
- Firefox 89+
- Safari 14.1+
- Edge 89+
- End-to-end encryption using ChaCha20-Poly1305
- Session key exchange with epoch validation
- Channel ID verification for packet filtering
- Latency: < 50ms typical (air to display)
- Throughput: Up to 50 Mbps video streams
- Optimal Settings: 1080p 30fps at 1024 kbps bitrate for best performance
- Bitrate Limitations: Video display may have issues above 1024 kbps bitrate
- FEC Recovery: Automatic error correction for lost packets
- Multi-threading: Parallel processing for optimal performance
For optimal performance with this receiver:
- Resolution: 1920x1080 (1080p)
- Frame Rate: 30 fps
- Bitrate: 1024 kbps (higher bitrates may cause display issues)
- Encoder: H.264 or H.265
- No devices detected: Ensure WebUSB is enabled and adapter is supported
- Key loading fails: Verify
gs.keyfile format and permissions - Video not displaying: Check channel settings and signal strength
- High latency: Try different USB ports or reduce channel width
Enable debug logging when building:
zig build -Dlogging=true -Ddebug-logging=true- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is open source. Please check individual component licenses for specific terms.
- OpenIPC - Open IP Camera project
- wfb-ng - WiFi Broadcast next generation
- Emscripten - WebAssembly compilation toolchain
- Issues: Use GitHub Issues for bug reports and feature requests
- Discussions: GitHub Discussions for general questions
- Documentation: Check the wiki for detailed setup guides