Capture live video and audio from USB analog capture dongles on macOS
Features · Hardware · Installation · Usage · Building · License
EasyCapViewer is a native macOS application for capturing live video and audio from inexpensive USB analog capture dongles — the kind commonly known as "EasyCap" devices. These compact USB devices accept composite (RCA) or S-Video input from analog sources like VCRs, camcorders, security cameras, and game consoles, and convert them to digital video streams.
Built in Objective-C and Swift, EasyCapViewer provides real-time Metal-rendered video preview, configurable deinterlacing, recording to QuickTime movies via AVFoundation, and a dark HUD-style control interface.
- Real-time preview via Metal texture rendering
- Composite and S-Video input selection
- NTSC, PAL, and SECAM video standards (10 format variants)
- 7 deinterlacing modes: Progressive, Weave, Line Double HQ/LQ, Alternate, Blur, Drop
- Aspect ratio presets: 4:3, 16:10, 16:9 (and custom)
- Interactive cropping with draggable handles and border trimming
- Brightness, contrast, saturation, and hue adjustments (device-dependent)
- Integer scaling: Half, Actual, and Double size
- Full-screen mode with auto-hiding cursor
- Frame drop indicator when the system can't keep up
- Live audio monitoring through system speakers
- Volume control with mute toggle
- Mono-to-stereo upconversion for devices that output mono audio
- Audio input selection from any connected CoreAudio device
- QuickTime .mov export via AVFoundation with codec and quality selection
- Frame rate conversion for recording at different rates than capture
- Hardware-accelerated codecs: H.264, HEVC, Motion JPEG, ProRes
- Dark HUD overlay controls that blend with the video
- Unified single-window layout with settings and error log sidebars
- SwiftUI settings panel for all video, audio, and image parameters
- Error log window with color-coded, timestamped messages
- Localization infrastructure (English included)
| Chipset | Device Examples | Status |
|---|---|---|
| Syntek STK1160 | EasyCap DC60, various generic dongles | Supported |
| Empia EM2860 | EM2860-based capture devices | Supported |
| Somagic | Somagic EasyCap variants | Supported |
| Fushicai | Fushicai UTV007 devices | Supported |
| Input | Connector |
|---|---|
| Composite Video | RCA jack (yellow) |
| S-Video | Mini-DIN 4-pin |
| Stereo Audio | RCA jacks (red/white) — device-dependent |
- macOS 13.0 (Ventura) or later
- A supported USB capture device
- An analog video source (VCR, camera, console, etc.)
Pre-built binaries are not yet available. To use EasyCapViewer, build from source using the instructions below.
- Connect your USB capture device to a USB port
- Launch EasyCapViewer — it automatically detects connected devices
- Plug in your video source (composite or S-Video cable)
- Click Play in the menu bar or press Space to start capture
- Use Cmd+, to open the settings panel and adjust video/audio parameters
| Key | Action |
|---|---|
| Space | Toggle play/pause |
| Cmd+F | Toggle full screen |
| Cmd+T | Toggle float on top |
| Cmd+S | Start recording |
| Cmd+. | Stop recording |
| Cmd+Up/Down | Adjust volume |
| Cmd+Opt+Up/Down | Toggle mute |
EasyCapViewer uses a producer-consumer pipeline with a single-window SwiftUI/AppKit hybrid interface:
USB Hardware → ECVCaptureDevice (Metal rendering via MTKView)
↓
ECVVideoStorage + Deinterlacing
↓
ECVCaptureSession → fans out to:
├── MainWindowController (video + settings sidebar + error log sidebar)
├── ECVAudioTarget (CoreAudio speakers)
└── ECVMovieRecorder (AVFoundation .mov export)
Key design: NSDocument-based architecture with @Observable SwiftUI views for settings, error log, and welcome screen. Metal handles video rendering; AppKit handles interactive crop/play overlays. Thread safety via ECVReadWriteLock (pthread_rwlock).
For detailed file-level architecture, see AGENTS.md.
- Xcode with macOS 13+ SDK
- macOS Ventura or later (for running)
# Debug build
xcodebuild -project EasyCapViewer.xcodeproj \
-scheme EasyCapViewer \
-configuration Debug build
# Release build
xcodebuild -project EasyCapViewer.xcodeproj \
-scheme EasyCapViewer \
-configuration Release build
# Clean
xcodebuild -project EasyCapViewer.xcodeproj \
-scheme EasyCapViewer clean| Setting | Value |
|---|---|
| Deployment Target | macOS 13.0 |
| Architecture | Universal (arm64 + x86_64) |
| ARC | Enabled |
| Hardened Runtime | Enabled |
| Sandboxing | Disabled (IOKit USB access required) |
- EasyCapViewer accesses USB hardware directly via IOKit, which cannot run in a sandboxed environment
- No data is sent to any remote server
- No analytics or telemetry
- Recording creates local .mov files only
BSD 2-Clause License — Copyright (c) 2009-2013, Ben Trask. All rights reserved.
See LICENSE for the full license text. Individual source files may contain the original license header.
Original Version by Ben Trask (2009-2013).
