How pandi-127/frame-jack works
Frame-Jack streams a Windows game to a browser over a LAN: the backend launches and injects the capture DLL, receives frames through a named pipe, encodes and forwards video over WebRTC, and relays browser controls to a virtual Xbox controller. The README documents the capture, encoding, transport, signaling, and input stages; sampled source supports the injection, capture, client, and selected backend connections. Backend details not present in the excerpt are represented only where documented.
Main entry points: index.js Streaming server · client.js Client logic · dllmain.cpp DX11 capture hook · injector.cpp DLL injector
Components 14
Launch and capture
- Game process
- DLL injector
Injector/injector/injector/injector.cpp - DX11 capture hook
dll/Dx11Hook/Dx11Hook/dllmain.cpp - Named pipe
Video streaming
- Streaming server
backend/index.js - Frame queue
backend/index.js - FFmpeg NVENC
- UDP packet handler
backend/index.js - WebRTC peer
backend/index.js
Browser client
- Browser client
frontend/client.html - Client logic
frontend/client.js
Controller input
- Virtual Xbox controller
backend/index.js - ViGEm driver
Other components
- Player
Connections 20
- Player → Streaming server: opens stream
- Streaming server → Game process: launches
- Streaming server → DLL injector: runs injector
- DLL injector → Game process: injects DLL
- DX11 capture hook → Game process: hooks Present
- DX11 capture hook → Named pipe: writes frames
- Streaming server → Named pipe: reads frames
- Streaming server → Frame queue: queues frames
- Streaming server → FFmpeg NVENC: starts encoder
- Frame queue → FFmpeg NVENC: feeds frames
- FFmpeg NVENC → UDP packet handler: sends RTP
- UDP packet handler → WebRTC peer: forwards SRTP
- Streaming server → WebRTC peer: sets up peer
- WebRTC peer → Client logic: streams video
- Player → Browser client: uses controls
- Streaming server → Browser client: serves page
- Client logic → Streaming server: signals offer and ICE
- Streaming server → Client logic: returns answer and ICE
- Client logic → Virtual Xbox controller: sends control input
- Virtual Xbox controller → ViGEm driver: updates device