GigE Virtual Camera
A native macOS application that creates virtual cameras from GigE Vision industrial cameras, making them available to any macOS application including HyperStudy experiments.
Overview
The GigE Virtual Camera application bridges the gap between professional GigE Vision cameras and consumer applications. It creates a virtual camera device that appears as a standard webcam in any macOS application, allowing you to use high-quality industrial cameras in video conferencing, recording software, and HyperStudy experiments.
Features
- System Extension Architecture: Implements a proper CMIO System Extension for virtual camera functionality
- Native macOS Integration: Appears as a standard camera in all macOS apps
- Universal GigE Support: Works with any GigE Vision compliant camera via Aravis library
- Real-time Preview: Built-in preview with camera status and controls
- Professional Features: Designed for industrial and professional camera integration
- Notarized & Signed: Properly signed with Developer ID for secure distribution
System Requirements
- Operating System: macOS 12.3 (Monterey) or later
- Processor: ARM64 (Apple Silicon) Mac
- Network: GigE Vision compliant camera on the same network
- Permissions: System Extension approval (first launch only)
Installation
Download
Step-by-Step Installation
-
Download the DMG
- Go to the Releases page
- Download the latest
GigEVirtualCamera-vX.X.X.dmgfile - The app is fully signed and notarized by Apple
-
Install the Application
- Double-click the downloaded DMG file
- Drag
GigEVirtualCamera.appto yourApplicationsfolder - Eject the DMG
-
First Launch
- Open GigEVirtualCamera from your Applications folder
- If you see a warning about an unidentified developer (rare with notarization), right-click and select "Open"
-
Grant System Extension Permission
When you first launch the app, macOS will display a notification:
"System Extension Blocked" A program tried to load new system extension(s) signed by "Luke Chang"
To approve:
- Click the notification, or go to System Settings → Privacy & Security
- Scroll to the Security section
- Find the message about blocked system software from "Luke Chang"
- Click "Allow"
- Enter your administrator password if prompted
- Restart the app after approving
-
Grant Camera Permissions
- Go to System Settings → Privacy & Security → Camera
- Find GigEVirtualCamera in the list
- Toggle it ON
-
Verify Installation
systemextensionsctl listYou should see
com.lukechang.GigEVirtualCamera.Extensionlisted.
Usage
Connecting to a Camera
- Launch GigEVirtualCamera
- Select Camera: Your GigE Vision cameras on the network appear in the dropdown menu
- Click Connect: The app establishes connection and starts streaming
- Verify Preview: The preview window shows the live camera feed
Using Test Camera
For testing without physical hardware:
- Select "Test Camera (Aravis Simulator)" from the dropdown
- Click Connect
- A simulated feed will appear
Using in Other Applications
The virtual camera appears as "GigE Virtual Camera" in all macOS applications:
HyperStudy Experiments:
- In HyperStudy's device setup, select camera source
- Choose "GigE Virtual Camera"
- Your GigE camera feed is now available to the experiment
Zoom / Microsoft Teams / Google Meet:
- Open video settings in your conferencing app
- Select "GigE Virtual Camera" as your camera
- Your GigE feed becomes your video source
QuickTime Player:
- File → New Movie Recording
- Click dropdown arrow next to record button
- Select "GigE Virtual Camera"
OBS Studio:
- Add a new Video Capture Device source
- Select "GigE Virtual Camera"
Network Requirements
Camera Network Setup
- Same Network: Camera must be on the same network as your Mac
- Wired Connection: Use Ethernet for best performance (required for GigE bandwidth)
- IP Configuration: Use DHCP or configure static IP on camera
Firewall Settings
GigE Vision uses UDP port 3956. Ensure your firewall allows:
- System Settings → Network → Firewall → Options
- Add GigEVirtualCamera to allowed applications
Testing Camera Detection
# Install Aravis tools
brew install aravis
# List detected cameras
arv-camera-test-0.8
Architecture
┌─────────────────────────────────────────────────────────────────────────┐
│ GigE Camera (Network) │
└────────────┬────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Aravis Library (C++) │
│ ├─ Camera Discovery │
│ ├─ Frame Acquisition │
│ └─ GigE Vision Protocol Handling │
└────────────┬────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ AravisBridge (Objective-C++) │
│ └─ C++ to Swift Bridge │
└────────────┬────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Main App (GigECameraApp) │
│ ├─ SwiftUI Interface │
│ ├─ Camera Management │
│ ├─ Preview Display │
│ └─ Frame Sender │
└────────────┬────────────────────────────────────────────────────────────┘
│ (XPC / CMIO Sink)
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ System Extension (GigEVirtualCameraExtension) │
│ ├─ CMIO Extension Provider │
│ ├─ Virtual Camera Device │
│ └─ Frame Stream Management │
└────────────┬────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ macOS Camera System │
│ └─ Available to all apps (HyperStudy, Zoom, QuickTime, etc.) │
└─────────────────────────────────────────────────────────────────────────┘
Key Technologies
- CMIO (Core Media I/O): macOS camera extension framework
- System Extensions: Apple's modern privileged extension architecture
- Aravis: Open-source GigE Vision camera library
- SwiftUI: Native macOS user interface
- XPC: Secure inter-process communication
Troubleshooting
System Extension Issues
Extension not loading:
# Check extension status
systemextensionsctl list
# View extension logs
log stream --predicate 'subsystem == "com.lukechang.GigEVirtualCamera"'
"System Extension Blocked" persists:
- Go to System Settings → Privacy & Security
- Scroll down to Security section
- Click "Allow" next to the blocked extension message
- Restart your Mac if the option doesn't appear
Camera Not Detected
-
Verify Physical Connection
- Camera is powered on
- Ethernet cable is connected
- Camera and Mac are on same network
-
Test with Aravis Tools
brew install aravis
arv-camera-test-0.8 -
Check Network Configuration
- Verify IP addresses are in same subnet
- Try pinging the camera's IP address
- Check firewall settings
Virtual Camera Not Appearing
-
Check Permissions
- System Settings → Privacy & Security → Camera
- Ensure GigEVirtualCamera is enabled
-
Verify Extension is Active
systemextensionsctl list
system_profiler SPCameraDataType -
Restart the App
- Quit GigEVirtualCamera completely
- Relaunch from Applications
-
Restart Your Mac
- Sometimes required after first extension approval
Performance Issues
Low frame rate:
- Ensure Gigabit Ethernet connection
- Connect camera directly to Mac (avoid switches if possible)
- Check network utilization in Activity Monitor
- Try lowering camera resolution
Dropped frames:
- Use wired connection (not WiFi)
- Close other bandwidth-intensive applications
- Check camera's internal buffer settings
Development
For developers who want to build from source:
Prerequisites
- macOS 12.3+ (Apple Silicon recommended)
- Xcode 15.0+
- Homebrew
Building
# Clone the repository
git clone https://github.com/ljchang/hyperstudy-gige.git
cd hyperstudy-gige
# Install dependencies
brew install aravis
# Open in Xcode
open GigEVirtualCamera.xcodeproj
# Build and run (Cmd+R)
For detailed build instructions including code signing for distribution, see BUILDING.md.
Resources
- GitHub Repository: ljchang/hyperstudy-gige
- Build Instructions: BUILDING.md
- Contributing Guide: CONTRIBUTING.md
- Aravis Project: github.com/AravisProject/aravis
- Apple CMIO Documentation: Creating a Camera Extension
Release Notes
Release notes are automatically synced from GitHub releases.