@getexcited/chompers
Version:
High-performance native Node.js addon for Windows screen recording and window enumeration
268 lines (187 loc) • 6.94 kB
Markdown
# Windows Record Examples
This directory contains TypeScript examples demonstrating how to use the `@getexcited/chompers` library for screen recording on Windows. These examples are TypeScript ports of the original Rust examples from the `windows-record` library.
## Prerequisites
- Windows operating system
- Node.js 16 or higher
- TypeScript (installed as dev dependency)
- Built native addon (run `yarn build` first)
## Building the Project
Before running any examples, make sure to build the native addon:
```bash
yarn build
```
## Examples
### 1. Basic Recording (`basic_recording.ts`)
Demonstrates the fundamental screen recording functionality.
**Features:**
- Basic screen recording setup
- Audio capture from desktop
- 10-second recording duration
- Process-specific recording (targets "League of Legends")
**Usage:**
```bash
npx tsx examples/basic_recording.ts
```
**Configuration highlights:**
- 30 FPS recording
- 1920x1080 output resolution
- Desktop audio capture
- H.264 video encoding
- Debug mode enabled
### 2. Replay Buffer (`replay_buffer.ts`)
Shows how to use the replay buffer feature for continuous background recording with on-demand saving.
**Features:**
- Continuous background recording
- 30-second replay buffer
- Interactive controls (S to save, Q to quit)
- Multiple replay saves
**Usage:**
```bash
npx tsx examples/replay_buffer.ts
```
**Interactive commands:**
- `S` + Enter: Save the last 30 seconds as a replay file
- `Q` + Enter: Stop recording and quit
**Use cases:**
- Gaming highlights capture
- Security monitoring
- Event-based recording
### 3. Audio Device Selection (`select_audio_device.ts`)
Demonstrates how to enumerate and select specific audio input devices.
**Features:**
- Audio device enumeration
- Interactive device selection
- Microphone recording with selected device
- Builder pattern configuration
**Usage:**
```bash
npx tsx examples/select_audio_device.ts
```
**Workflow:**
1. Lists all available audio input devices
2. Prompts user to select a device (or use default)
3. Records with the selected microphone device
4. Targets Chrome browser window
### 4. Video Encoder Selection (`select_video_encoder.ts`)
Shows how to enumerate and select specific video encoders for recording.
**Features:**
- Video encoder enumeration
- Interactive encoder selection
- Fallback to preferred encoders
- 30-second recording duration
**Usage:**
```bash
npx tsx examples/select_video_encoder.ts
```
**Workflow:**
1. Lists all available video encoders (H.264, HEVC)
2. Prompts user to select an encoder
3. Falls back to system preferred encoder if none selected
4. Records with the selected encoder
### 5. Window Enumeration (`get-windows.ts`)
Demonstrates comprehensive window enumeration and analysis capabilities.
**Features:**
- Complete window enumeration with detailed metadata
- Focused window detection
- Multi-monitor support and analysis
- Common application filtering
- Process and executable information
- Statistical analysis of window data
**Usage:**
```bash
npx tsx examples/get-windows.ts
```
**Information displayed:**
- Window titles, class names, and handles
- Process IDs and executable paths
- Monitor dimensions and multi-monitor detection
- Focus state and product information
- Process arguments and command-line parameters
- Summary statistics and categorization
**Use cases:**
- System monitoring and analysis
- Game detection for recording targets
- Multi-monitor setup analysis
- Process management and debugging
## Common Configuration Options
### RecorderConfig Interface
```typescript
interface RecorderConfig {
fpsNumerator: number; // Frame rate numerator (e.g., 30)
fpsDenominator: number; // Frame rate denominator (e.g., 1)
inputWidth?: number; // Input resolution width (auto-detected if not set)
inputHeight?: number; // Input resolution height (auto-detected if not set)
outputWidth: number; // Output resolution width
outputHeight: number; // Output resolution height
captureAudio: boolean; // Enable system audio capture
captureMicrophone: boolean; // Enable microphone capture
audioSource: AudioSource; // Desktop or ActiveWindow
microphoneVolume?: number; // Microphone volume (0.0-1.0)
systemVolume?: number; // System audio volume (0.0-1.0)
microphoneDevice?: string; // Specific microphone device name
videoEncoderType?: VideoEncoderType; // H264 or HEVC
videoEncoderName?: string; // Specific encoder name
captureCursor: boolean; // Include cursor in recording
outputPath: string; // Output file path
debugMode: boolean; // Enable debug logging
enableReplayBuffer: boolean; // Enable replay buffer feature
replayBufferSeconds?: number; // Replay buffer duration in seconds
}
```
### Builder Pattern
You can also use the `RecorderConfigBuilder` for a more fluent configuration:
```typescript
const config = new RecorderConfigBuilder()
.fps(30, 1)
.outputDimensions(1920, 1080)
.captureAudio(true)
.captureMicrophone(false)
.outputPath("my_recording.mp4")
.build();
```
## Audio Sources
- `AudioSource.Desktop`: Captures all system audio
- `AudioSource.ActiveWindow`: Captures audio only from the target window
## Video Encoder Types
- `VideoEncoderType.H264`: Standard H.264 encoding (widely compatible)
- `VideoEncoderType.HEVC`: H.265/HEVC encoding (better compression, newer)
## Error Handling
All examples include proper error handling for common scenarios:
- Failed to start recording
- No suitable encoders found
- Audio device enumeration failures
- Recording interruption
## Performance Tips
1. **Hardware Acceleration**: The library uses hardware-accelerated encoding when available
2. **Resolution**: Lower output resolutions improve performance
3. **Frame Rate**: 30 FPS is a good balance between quality and performance
4. **Audio**: Disable microphone capture if not needed to reduce CPU usage
5. **Debug Mode**: Disable debug mode in production for better performance
## Troubleshooting
### Common Issues
1. **"No suitable video encoders found"**
- Ensure your GPU drivers are up to date
- Try different encoder types (H.264 vs HEVC)
2. **"Failed to start recording"**
- Check if the target process/window exists
- Ensure sufficient disk space
- Verify output path is writable
3. **Audio not captured**
- Check Windows audio permissions
- Verify the target application is producing audio
- Try different audio sources (Desktop vs ActiveWindow)
4. **Poor performance**
- Lower the output resolution
- Reduce frame rate
- Disable cursor capture if not needed
- Close unnecessary applications
### Debug Mode
Enable debug mode in the configuration to get detailed logging:
```typescript
const config: RecorderConfig = {
// ... other options
debugMode: true,
};
```
## License
These examples are part of the `@getexcited/chompers` project and are licensed under GPL-3.0-only.