@honem/native-video-compressor
v0.2.3
Published
Capacitor plugin for video compression using native platform APIs (iOS AVFoundation, Android MediaCodec)
Maintainers
Readme
@honem/native-video-compressor
Capacitor plugin for video compression using native platform APIs.
- iOS: AVFoundation with VideoToolbox hardware acceleration
- Android: MediaCodec with hardware acceleration
Installation
npm install @honem/native-video-compressor
npx cap syncUsage
import { VideoCompressor } from '@honem/native-video-compressor';
try {
const result = await VideoCompressor.compressVideo({
inputPath: '/path/to/video.mp4',
quality: 'medium',
});
console.log(result.outputPath); // Path to compressed file
console.log(result.compressionRatio); // e.g., 3.5
// Optional: delete temp file immediately after use
await VideoCompressor.deleteFile({ path: result.outputPath });
} catch (error) {
// Handle error (e.g., web platform not supported)
console.error(error);
}Note: This plugin only works on iOS and Android. Calling these functions on web will throw an error, so always wrap calls in try/catch.
API
compressVideo(options)
| Option | Type | Required | Description |
|--------|------|----------|-------------|
| inputPath | string | Yes | Path to input video |
| outputPath | string | No | Output path (temp file if omitted) |
| quality | 'low' | 'medium' | 'high' | 'custom' | No | Default: 'medium' |
| bitrate | number | No | Bitrate in bps (for 'custom' quality) |
| width | number | No | Output width (for 'custom' quality) |
| height | number | No | Output height (for 'custom' quality) |
| format | 'mp4' | 'mov' | 'm4v' | '3gp' | 'webm' | No | Default: same as input |
Returns:
| Property | Type | Description |
|----------|------|-------------|
| outputPath | string | Path to compressed file |
| originalSize | number | Original size in bytes |
| compressedSize | number | Compressed size in bytes |
| compressionRatio | number | originalSize / compressedSize |
| duration | number | Compression time in ms |
deleteFile(options)
When outputPath is not provided, compressed files are saved to the system temp directory which is automatically cleaned up by the OS. Use deleteFile() if you want to delete the file immediately after use.
Deletes a file.
await VideoCompressor.deleteFile({ path: result.outputPath });Quality Presets
| Preset | Max Resolution | Bitrate |
|--------|---------------|---------|
| low | 854x480 | 800 kbps |
| medium | 1280x720 | 1.5 Mbps |
| high | Original | 8 Mbps |
| custom | User-defined | User-defined |
Platform Requirements
- iOS: 15.0+
- Android: API 22+ (Android 5.1)
- Web: Not supported
License
MIT
