Last updated: Januar 2026
Video Capture SDK .NET vs FFmpeg Wrappers
Umfassender .NET Video-Capture-Vergleich
Die Wahl des richtigen Video-Capture-Frameworks für Ihre .NET-Anwendung ist eine entscheidende architektonische Entscheidung. Dieser Leitfaden bietet einen detaillierten, unvoreingenommenen Vergleich zwischen VisioForge Video Capture SDK .NET — einer speziell entwickelten Capture-Engine — und FFmpeg-basierten Wrappern wie FFmpeg.AutoGen, Xabe.FFmpeg und FFMpegCore. Wir untersuchen Architektur, Funktionen, Leistung, Lizenzierung und praxisnahen Code, damit Sie eine fundierte Entscheidung treffen können.
Zusammenfassung
| Aspekt | Video Capture SDK .NET | FFmpeg Wrappers |
|---|---|---|
| Architektur | Dual-Engine: natives DirectShow/Media Foundation + eingebettete FFmpeg-Pipelines | CLI-Prozess-Wrapper um ffmpeg.exe / libavcodec |
| Capture-Quellen | Webcams, Bildschirme, IP-Kameras, Capture-Karten, TV-Tuner, virtuelle Quellen | Abhängig von FFmpeg-Build-Flags; typischerweise Webcams, Bildschirme, RTSP |
| Live-Vorschau | Integrierte GPU-beschleunigte Vorschau mit Overlays | Keine native Vorschau; erfordert Piping von Frames an einen separaten Renderer |
| Aufnahmeformate | MP4, MKV, WebM, AVI, WMV, MOV, TS, GIF + 30 weitere | Alle von FFmpeg unterstützten Formate (umfangreich) |
| Multi-Output | Gleichzeitige Aufnahme + Streaming + Snapshots aus einer Pipeline | Mehrere Ausgaben über Tee-Muxer oder mehrere Prozesse |
| Hardwarebeschleunigung | NVENC, QSV, AMF, DXVA2, D3D11VA, VideoToolbox | NVENC, QSV, AMF, VAAPI, VDPAU (falls mit Unterstützung kompiliert) |
| .NET-Integration | Native .NET-API, Events, async/await, WinForms/WPF/MAUI-Steuerelemente | Process.Start() oder P/Invoke; eingeschränkte .NET-Idiome |
| Lizenzierung | Kommerzielle Pro-Entwickler-Lizenz (unbefristet oder Abonnement) | LGPL/GPL — Verknüpfungseinschränkungen; Wrapper MIT/Apache |
| Preise | Ab EUR 489 (Home) bis EUR 6.999 (Team) | Kostenlos (aber GPL-Compliance-Kosten sind nicht trivial) |
| Support | Dediziertes Ticketsystem, Prioritäts-SLA, individuelle Builds | Community-Foren, Stack Overflow, Mailinglisten |
Architektur im Detail
Video Capture SDK .NET Architektur
Das Video Capture SDK verwendet ein Dual-Engine-Design. Die primäre Engine umschließt DirectShow und Media Foundation unter Windows und bietet nativen Zugriff auf jedes vom Betriebssystem bereitgestellte Capture-Gerät. Eine sekundäre eingebettete FFmpeg-Pipeline übernimmt erweiterte Codec-Operationen, IP-Kamera-Einspeisung und plattformübergreifende Aufnahme. Beide Engines teilen sich eine einheitliche .NET-API-Oberfläche, sodass ein Wechsel zwischen ihnen keine Codeänderungen erfordert.
- ▶Native Windows-Capture über DirectShow- und Media Foundation-Filtergraphen
- ▶Eingebettetes FFmpeg für Codec-Flexibilität ohne externe CLI-Abhängigkeiten
- ▶GPU-beschleunigte Vorschau über Direct3D / OpenGL-Renderer
- ▶Ereignisgesteuerte Architektur mit .NET async/await-Unterstützung
- ▶Einzelprozessmodell — keine Verwaltung von Kindprozessen erforderlich
FFmpeg Wrapper Architektur
FFmpeg-Wrapper (.NET-Bibliotheken wie FFmpeg.AutoGen, Xabe.FFmpeg, FFMpegCore oder MediaToolkit) bieten eine verwaltete Schnittstelle zur FFmpeg-CLI oder zu den libav*-Bibliotheken. Der CLI-Ansatz startet ffmpeg.exe als Kindprozess und kommuniziert über Befehlszeilenargumente und Standard-E/A-Pipes. Der P/Invoke-Ansatz verknüpft sich direkt mit libav*-Shared-Libraries für niedrigeren Zugriff.
- ▶CLI-Wrapper starten ffmpeg.exe und parsen die stdout/stderr-Ausgabe
- ▶P/Invoke-Wrapper (FFmpeg.AutoGen) rufen libav*-C-Funktionen direkt auf
- ▶Keine integrierte UI-Integration — Frames müssen manuell gerendert werden
- ▶Multiprozess-Architektur erhöht die Komplexität der Zustandsverwaltung
- ▶Volle FFmpeg-Codec-/Formatunterstützung bei Kompilierung mit allen Flags
Wesentliche architektonische Unterschiede
| Aspekt | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Prozessmodell | Einzelprozess, In-Proc-Engine | Kindprozess (CLI) oder In-Proc (P/Invoke) |
| Geräteerkennung | Native OS-Aufzählungs-APIs | ffmpeg -list_devices oder manuelle Abfrage |
| Frame-Pipeline | Interner Filtergraph mit verwalteten Callbacks | Rohe Frames über stdout oder Shared Memory pipen |
| Fehlerbehandlung | .NET-Ausnahmen und ereignisbasierte Fehler | Stderr-Parsing oder C-Rückgabecodes |
| Zustandsverwaltung | Verwaltete Zustandsmaschine mit Events | Prozesslebenszyklus-Management |
| Speichermodell | Verwaltet + gepinnte native Puffer | Unverwaltete Allokation über libav* oder Pipe-Puffer |
Funktionsvergleich im Detail
Capture-Quellen
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| USB-Webcams | ✅ | ✅ |
| Integrierte Laptop-Kameras | ✅ | ✅ |
| Bildschirm- / Desktop-Capture | ✅ | ✅ |
| Anwendungsfenster-Capture | ✅ | ⚠️(Eingeschränkt; erfordert plattformspezifische Flags) |
| IP-Kameras (RTSP/ONVIF) | ✅ | ✅ |
| Capture-Karten (Blackmagic, Magewell) | ✅ | ⚠️(Über DirectShow/V4L2, wenn Treiber diese bereitstellen) |
| TV-Tuner (BDA/DVB) | ✅ | ❌ |
| Virtuelle Kameras (OBS, NDI) | ✅ | ⚠️(Über DirectShow unter Windows) |
| NDI-Quellen | ✅ | ⚠️(Erfordert benutzerdefinierten FFmpeg-Build mit NDI) |
| DECKLINK-Eingang | ✅ | ✅(FFmpeg hat decklink-Eingangsunterstützung) |
Live-Vorschau
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Integrierte Video-Vorschau | ✅ | ❌ |
| GPU-beschleunigtes Rendering | ✅ | ❌ |
| Text- / Bild-Overlays in der Vorschau | ✅ | ❌(Muss extern gerendert werden) |
| Vorschau ohne Aufnahme | ✅ | ❌ |
| Mehrere Vorschaufenster | ✅ | ❌ |
| WinForms / WPF / MAUI-Steuerelemente | ✅ | ❌(Keine nativen UI-Steuerelemente) |
Aufnahme
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| MP4 (H.264 / H.265) | ✅ | ✅ |
| MKV-Container | ✅ | ✅ |
| WebM (VP8 / VP9 / AV1) | ✅ | ✅ |
| AVI | ✅ | ✅ |
| WMV / ASF | ✅ | ✅ |
| MOV (ProRes) | ✅ | ✅ |
| MPEG-TS | ✅ | ✅ |
| Animiertes GIF | ✅ | ✅ |
| Nur Audio (MP3, AAC, WAV, FLAC, OGG) | ✅ | ✅ |
| Segmentierte Aufnahme (Aufteilung nach Zeit/Größe) | ✅ | ✅ |
| Pre-Event-Aufnahme (Ringpuffer) | ✅ | ❌(Keine integrierte Ringpuffer-API; erfordert eigene Implementierung) |
Multi-Output & Streaming
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Gleichzeitige Aufnahme + Stream | ✅ | ⚠️(Über Tee-Muxer oder mehrere Prozesse) |
| Mehrere Aufnahmeausgaben | ✅ | ⚠️(Tee-Muxer hat Einschränkungen) |
| RTMP-Streaming | ✅ | ✅ |
| RTSP-Server | ✅ | ❌(FFmpeg ist ein Client, kein Server) |
| SRT-Streaming | ✅ | ✅(Erfordert SRT-fähigen Build) |
| HLS / DASH-Ausgabe | ✅ | ✅ |
| NDI-Ausgabe | ✅ | ⚠️(Erfordert benutzerdefinierten Build) |
| Snapshot während der Aufnahme | ✅ | ⚠️(Erfordert separate Frame-Extraktion) |
Streaming-Protokolle
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| RTMP Push | ✅ | ✅ |
| RTSP-Servermodus | ✅ | ❌ |
| SRT (Caller / Listener) | ✅ | ✅ |
| HLS-Segmentgenerierung | ✅ | ✅ |
| MPEG-DASH | ✅ | ✅ |
| UDP / TCP Unicast / Multicast | ✅ | ✅ |
Videoverarbeitung
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Echtzeit-Größenänderung / Zuschneiden | ✅ | ✅ |
| Deinterlacing | ✅ | ✅ |
| Farbanpassung (Helligkeit, Kontrast, Sättigung) | ✅ | ✅(Über FFmpeg-Filter) |
| Text-Overlay (Zeitstempel, Wasserzeichen) | ✅ | ✅(drawtext-Filter) |
| Bild-Overlay / Logo | ✅ | ✅(overlay-Filter) |
| Bild-in-Bild | ✅ | ✅(overlay-Filter) |
| Chroma Key (Greenscreen) | ✅ | ⚠️(chromakey-Filter — einfach) |
| GPU-beschleunigte Filter | ✅ | ⚠️(Beschränkt auf bestimmte hwaccel-Filter) |
Audio
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Audiogerät-Capture | ✅ | ✅ |
| Systemaudio (Loopback) Capture | ✅ | ⚠️(Erfordert WASAPI-Loopback-Einrichtung) |
| Audio-Mixing (mehrere Eingänge) | ✅ | ✅(amix-Filter) |
| Echtzeit-Lautstärke- / Verstärkungsregelung | ✅ | ✅(volume-Filter) |
| Audioeffekte (Echo, Hall) | ✅ | ✅(Verschiedene Audiofilter) |
| VU-Meter / Pegelüberwachung | ✅ | ❌(Muss loudnorm-Ausgabe parsen) |
Erkennung & Analyse
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Bewegungserkennung | ✅ | ❌ |
| Gesichtserkennung | ✅ | ❌ |
| Barcode- / QR-Code-Lesung | ✅ | ❌ |
| Objektverfolgung | ✅ | ❌ |
| Audiopegelerkennung | ✅ | ⚠️(Über volumedetect / ebur128-Filter) |
Erweiterte Funktionen
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| NVIDIA NVENC-Encoding | ✅ | ✅ |
| Intel QSV-Encoding | ✅ | ✅ |
| AMD AMF-Encoding | ✅ | ✅ |
| Hardwarebeschleunigte Dekodierung | ✅ | ✅ |
| Benutzerdefinierte Filter-Plugin-API | ✅ | ❌(Muss benutzerdefinierte FFmpeg-Filter in C erstellen) |
Frame-Zugriff & Integration
| Funktion | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Raw-Frame-Callback (RGB / YUV) | ✅ | ⚠️(Über Pipe oder P/Invoke) |
| Bitmap / SKBitmap / WriteableBitmap | ✅ | ❌(Manuelle Konvertierung erforderlich) |
| Integration mit ML.NET / ONNX | ✅ | ⚠️(Erfordert Frame-Extraktions-Pipeline) |
| OpenCV-Interop | ✅ | ⚠️(Frames an OpenCV pipen) |
| Direkter GPU-Textur-Zugriff | ✅ | ❌ |
Plattformunterstützung
Betriebssystem-Kompatibilität
| Plattform | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| Windows x64 | ✅ | ✅ |
| Windows ARM64 | ✅ | ✅ |
| macOS (Apple Silicon + Intel) | ✅ | ✅ |
| Linux x64 (Ubuntu, Debian, Fedora) | ✅ | ✅ |
| Linux ARM64 (Raspberry Pi) | ✅ | ✅ |
| Android (über .NET MAUI) | ✅ | ⚠️(Erfordert benutzerdefinierten Build) |
| iOS (über .NET MAUI) | ✅ | ⚠️(Erfordert benutzerdefinierten Build) |
UI-Framework-Kompatibilität
| Framework | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| WinForms | ✅ | ❌(Keine integrierten Steuerelemente) |
| WPF | ✅ | ❌(Keine integrierten Steuerelemente) |
| .NET MAUI | ✅ | ❌(Keine integrierten Steuerelemente) |
| Avalonia UI | ✅ | ❌(Keine integrierten Steuerelemente) |
| Console / Service | ✅ | ✅ |
| ASP.NET Core (Background Service) | ✅ | ✅ |
| Blazor (serverseitige Verarbeitung) | ✅ | ✅ |
Preisvergleich
Video Capture SDK .NET Preise
1 Entwickler, nicht-kommerzielle Nutzung
1 Entwickler, kommerzielle Nutzung, 1 Jahr Updates
Bis zu 3 Entwickler, kommerzielle Nutzung, 1 Jahr Updates
Bis zu 8 Entwickler, kommerzielle Nutzung, 1 Jahr Updates
All licenses include:
- ✓ Lizenzgebührenfreie Verteilung
- ✓ Alle Quellcode-Beispiele
- ✓ Prioritäts-Ticket-Support
- ✓ Alle Plattformziele enthalten
FFmpeg Wrapper Kosten
MIT-Lizenz — Low-Level P/Invoke-Bindings
Nicht-kommerziell kostenlos; kommerzielle Lizenz erforderlich
MIT-Lizenz — CLI-Wrapper
MIT-Lizenz — CLI-Wrapper
GPL-Compliance-Überlegungen
FFmpeg selbst ist unter LGPL 2.1 oder GPL 2/3 lizenziert, abhängig von der Build-Konfiguration. Wenn Ihr FFmpeg-Build GPL-Komponenten enthält (libx264, libx265, libfdk-aac), kann Ihre Anwendung GPL-Verpflichtungen unterliegen. Das bedeutet, Sie müssen entweder:
- ⚠Ihre Anwendung unter einer GPL-kompatiblen Lizenz als Open Source veröffentlichen
- ⚠Nur LGPL-lizenzierte FFmpeg-Komponenten verwenden und dynamisch verknüpfen
- ⚠Eine kommerzielle FFmpeg-Lizenz von FFmpeg-Urheberrechtsinhabern erwerben (komplex, da FFmpeg Hunderte von Mitwirkenden hat)
- ⚠FFmpeg nur mit LGPL-kompatiblen Codecs bauen (was die Funktionalität einschränkt)
Viele Unternehmen investieren erhebliche juristische Ressourcen in die Sicherstellung der GPL-Compliance. Die Kosten für die rechtliche Prüfung übersteigen oft den Preis einer kommerziellen SDK-Lizenz.
Codebeispiele
Beispiel 1: Webcam-Aufnahme als MP4
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
// Create the capture engine
var capture = new VideoCaptureCore();
// Set video source (first available webcam)
var devices = await capture.Video_CaptureDevice_ListAsync();
capture.Video_CaptureDevice = devices[0];
// Set audio source
var audioDevices = await capture.Audio_CaptureDevice_ListAsync();
capture.Audio_CaptureDevice = audioDevices[0];
// Configure MP4 output with H.264
capture.Output_Format = new MP4Output
{
Video = new H264EncoderSettings
{
Bitrate = 4000,
Profile = H264Profile.Main
},
Audio = new AACEncoderSettings
{
Bitrate = 192
}
};
capture.Output_Filename = "recording.mp4";
// Assign preview panel
capture.Video_Preview_Enabled = true;
// Start recording with preview
await capture.StartAsync();FFMpegCore (CLI Wrapper)
C#using FFMpegCore;
using FFMpegCore.Enums;
using System.Diagnostics;
// Note: No built-in device enumeration
// You must know your device name beforehand
var deviceName = "Integrated Camera";
var audioDevice = "Microphone (Realtek Audio)";
// Build the FFmpeg command
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments = $"-f dshow -i video=\"{deviceName}\":audio=\"{audioDevice}\" " +
"-c:v libx264 -preset fast -b:v 4000k " +
"-c:a aac -b:a 192k " +
"-y recording.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// No preview — video goes directly to file
// To stop: send 'q' to stdin or kill process
// Error handling: parse stderr outputBeispiel 2: Bildschirmaufnahme mit Overlay
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
var capture = new VideoCaptureCore();
// Screen capture source
capture.Video_CaptureDevice = new ScreenCaptureSourceSettings
{
FullScreen = true,
FrameRate = 30,
CaptureCursor = true
};
// Add timestamp overlay
capture.Video_Overlays.Add(new VideoOverlayText
{
Text = "{timestamp}",
Position = new System.Drawing.Point(10, 10),
Font = new System.Drawing.Font("Arial", 14),
Color = System.Drawing.Color.White
});
// Add watermark image
capture.Video_Overlays.Add(new VideoOverlayImage
{
Filename = "logo.png",
Position = new System.Drawing.Point(10, 50),
Opacity = 0.7
});
// Configure output
capture.Output_Format = new MP4Output
{
Video = new H264EncoderSettings { Bitrate = 8000 }
};
capture.Output_Filename = "screen_recording.mp4";
await capture.StartAsync();FFmpeg CLI
C#using System.Diagnostics;
// Screen capture with overlay using FFmpeg
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
// Windows screen capture via GDI
"-f gdigrab -framerate 30 -i desktop " +
// Complex filter for overlays
"-vf \"" +
"drawtext=text='%{localtime}':" +
"x=10:y=10:fontsize=14:fontcolor=white," +
"movie=logo.png[wm];[in][wm]overlay=10:50:" +
"format=auto,colorchannelmixer=aa=0.7\" " +
// Encoding settings
"-c:v libx264 -b:v 8000k -y screen_recording.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// Monitor stderr for progress / errors
string output = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();Beispiel 3: RTSP-Kamera zu RTMP-Stream
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
var capture = new VideoCaptureCore();
// IP camera source
capture.IP_Camera_Source = new IPCameraSourceSettings
{
URL = "rtsp://192.168.1.100:554/stream",
Login = "admin",
Password = "password",
Type = IPCameraType.RTSP
};
// Stream to YouTube/Twitch via RTMP
capture.Network_Streaming_Enabled = true;
capture.Network_Streaming_Format = new RTMPOutput
{
URL = "rtmp://a.rtmp.youtube.com/live2",
StreamKey = "YOUR_STREAM_KEY",
Video = new H264EncoderSettings
{
Bitrate = 4500,
KeyFrameInterval = 2
},
Audio = new AACEncoderSettings { Bitrate = 128 }
};
// Also record locally
capture.Output_Filename = "backup.mp4";
capture.Output_Format = new MP4Output();
await capture.StartAsync();FFmpeg CLI
C#using System.Diagnostics;
// RTSP to RTMP relay + local recording
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
// Input: RTSP camera
"-rtsp_transport tcp " +
"-i rtsp://admin:password@192.168.1.100:554/stream " +
// Tee muxer for multiple outputs
"-c:v libx264 -b:v 4500k -g 60 " +
"-c:a aac -b:a 128k " +
"-f tee " +
"\"[f=flv]rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY|" +
"[f=mp4]backup.mp4\"",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// Note: Error recovery (reconnect on stream drop)
// must be implemented manually by monitoring stderr
// and restarting the processBeispiel 4: Mehrkamera-Überwachungssystem
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
// Create multiple capture engines — one per camera
var cameras = new List<VideoCaptureCore>();
var cameraUrls = new[]
{
"rtsp://192.168.1.101/stream",
"rtsp://192.168.1.102/stream",
"rtsp://192.168.1.103/stream",
"rtsp://192.168.1.104/stream"
};
foreach (var url in cameraUrls)
{
var cam = new VideoCaptureCore();
cam.IP_Camera_Source = new IPCameraSourceSettings
{
URL = url,
Type = IPCameraType.RTSP,
ReconnectOnFailure = true,
ReconnectDelay = TimeSpan.FromSeconds(5)
};
// Motion detection on each camera
cam.Motion_Detection.Enabled = true;
cam.Motion_Detection.Sensitivity = 70;
cam.OnMotionDetected += (s, e) =>
{
Console.WriteLine($"Motion on {url} at {DateTime.Now}");
};
// Segmented recording (1-hour files)
cam.Output_Format = new MP4Output();
cam.Output_Filename = $"cam_{cameras.Count}_{DateTime.Now:yyyyMMdd}.mp4";
cam.SegmentedRecording.Enabled = true;
cam.SegmentedRecording.Duration = TimeSpan.FromHours(1);
cameras.Add(cam);
}
// Start all cameras
foreach (var cam in cameras)
await cam.StartAsync();FFmpeg CLI (Mehrere Prozesse)
C#using System.Diagnostics;
// Multi-camera: spawn one FFmpeg process per camera
var cameraUrls = new[]
{
"rtsp://192.168.1.101/stream",
"rtsp://192.168.1.102/stream",
"rtsp://192.168.1.103/stream",
"rtsp://192.168.1.104/stream"
};
var processes = new List<Process>();
for (int i = 0; i < cameraUrls.Length; i++)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
$"-rtsp_transport tcp -i {cameraUrls[i]} " +
// Segmented recording (1-hour segments)
$"-c:v libx264 -b:v 2000k " +
$"-f segment -segment_time 3600 " +
$"-reset_timestamps 1 " +
$"cam_{i}_%Y%m%d_%H%M%S.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
processes.Add(process);
}
// Note: No built-in motion detection
// No automatic reconnection on stream failure
// Must implement process monitoring + restart logic
// 4 separate processes consume more resourcesBeispiel 5: Dateikonvertierung mit Fortschritt
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
var capture = new VideoCaptureCore();
// Use file as source (convert mode)
capture.Mode = CaptureMode.FileConversion;
capture.Input_Filename = "input.avi";
// Output settings
capture.Output_Format = new MP4Output
{
Video = new H265EncoderSettings
{
Bitrate = 6000,
Preset = H265Preset.Slow
},
Audio = new AACEncoderSettings { Bitrate = 256 }
};
capture.Output_Filename = "output.mp4";
// Progress event
capture.OnProgress += (s, e) =>
{
Console.WriteLine($"Progress: {e.Progress}%");
};
// Error event
capture.OnError += (s, e) =>
{
Console.WriteLine($"Error: {e.Message}");
};
await capture.StartAsync();FFMpegCore Wrapper
C#using FFMpegCore;
using FFMpegCore.Enums;
// File conversion using FFMpegCore
await FFMpegArguments
.FromFileInput("input.avi")
.OutputToFile("output.mp4", overwrite: true, options => options
.WithVideoCodec(VideoCodec.LibX265)
.WithVideoBitrate(6000)
.WithAudioCodec(AudioCodec.Aac)
.WithAudioBitrate(256)
.WithSpeedPreset(Speed.Slow)
)
.NotifyOnProgress(percent =>
{
Console.WriteLine($"Progress: {percent}%");
})
.ProcessAsynchronously();
// Note: Progress reporting works well in FFMpegCore
// This is one area where the wrapper experience is good
// However, error details are limited to stderr outputLeistungsvergleich
Benchmarks durchgeführt auf Windows 11, Intel i7-13700K, 32 GB RAM, NVIDIA RTX 4070. Ergebnisse können je nach Hardware und Konfiguration variieren.
| Metrik | Video Capture SDK | FFmpeg CLI | Anmerkungen |
|---|---|---|---|
| Webcam-Capture-Startzeit | ~120 ms | ~800 ms | FFmpeg-Prozess-Startup-Overhead |
| Speicherverbrauch (einzelne Webcam) | ~80 MB | ~120 MB | FFmpeg-Prozess + Pipe-Puffer |
| CPU-Auslastung (1080p H.264-Aufnahme) | ~8% | ~10% | Ähnlich bei Verwendung desselben Encoders |
| CPU-Auslastung (1080p NVENC-Aufnahme) | ~3% | ~4% | GPU-Offload ist vergleichbar |
| Frame-Latenz (Capture bis Vorschau) | ~16 ms (1 Frame) | N/A | FFmpeg hat keine integrierte Vorschau |
| Multi-Kamera (4x 1080p) | ~25% CPU, ~320 MB | ~35% CPU, ~480 MB | 4 Prozesse vs. 1 Prozess |
| RTSP-Wiederverbindung | ~2 Sekunden (automatisch) | Manueller Neustart erforderlich | SDK hat integrierte Wiederverbindung |
| Start bis erstes Frame | ~200 ms | ~1.200 ms | Prozess-Init + Codec-Aushandlung |
Wann welche Lösung wählen
Wählen Sie das Video Capture SDK, wenn Sie benötigen
- ✓Integrierte Live-Vorschau mit Overlays in WinForms/WPF/MAUI-Anwendungen
- ✓Mehrkamera-Überwachung mit Bewegungserkennung und automatischer Wiederverbindung
- ✓Kommerzielle Produktverteilung ohne GPL-Lizenzbedenken
- ✓Capture mit niedriger Latenz und GPU-beschleunigtem Vorschau-Rendering
- ✓Integriertes Barcode-/QR-Code-Scanning oder Gesichtserkennung während der Aufnahme
- ✓Eine einzige verwaltete .NET-API ohne externe Prozesse
- ✓Professioneller Support mit SLA und Unterstützung bei individueller Entwicklung
- ✓Schnelle Entwicklung — Funktionen, die mit FFmpeg Stunden dauern, sind mit dem SDK in Minuten erledigt
Wählen Sie FFmpeg Wrappers, wenn Sie benötigen
- ✓Serverseitige Stapelverarbeitung ohne UI (Headless-Transkodierung)
- ✓Maximale Codec- und Formatunterstützung aus einem einzigen Tool
- ✓Budgetbeschränkte Projekte, bei denen GPL-Compliance akzeptabel ist
- ✓Einfache einmalige Dateikonvertierungen oder Stream-Relay-Aufgaben
- ✓Plattformübergreifendes CLI-Scripting und Automatisierungs-Pipelines
- ✓Open-Source-Projekte, die bereits unter GPL lizenziert sind
- ✓Akademische oder Forschungsprojekte, die benutzerdefinierte Codec-Änderungen erfordern
- ✓Integration mit bestehender FFmpeg-Infrastruktur und Skripten
Hybrid-Ansatz: Das Beste aus beiden Welten
Viele Produktionssysteme kombinieren beide Technologien. Das Video Capture SDK übernimmt Echtzeit-Capture, Vorschau und Erkennung, während FFmpeg die Offline-Stapelverarbeitung und Formatkonvertierungen für Sonderfälle abwickelt.
- ▶Verwenden Sie das SDK für alle Echtzeit-Capture-, Vorschau- und interaktiven Funktionen
- ▶Verwenden Sie FFmpeg für Offline-Stapeltranskodierung aufgenommener Dateien
- ▶Verwenden Sie FFmpeg für seltene Formatkonvertierungen, die das SDK nicht unterstützt
- ▶Halten Sie FFmpeg als Hintergrunddienst für Archivverarbeitung bereit
Bereitstellung & Verteilung
Video Capture SDK Bereitstellung
- ✓NuGet-Paket enthält alle nativen Abhängigkeiten
- ✓Einzelne NuGet-Referenz — keine externen Tools zu installieren
- ✓Lizenzgebührenfreie Weiterverteilung mit kommerzieller Lizenz
- ✓xcopy / MSIX / ClickOnce-Bereitstellung unterstützt
- ✓Docker-Container unterstützt (Linux und Windows)
- ✓Keine GPL-Verpflichtungen — sicher für proprietäre Software
FFmpeg Wrapper Bereitstellung
- ⚠Muss ffmpeg.exe (oder Äquivalent) mit Ihrer Anwendung bündeln
- ⚠Binärgröße: ~80-150 MB je nach Build-Konfiguration
- ⚠Muss sicherstellen, dass der korrekte FFmpeg-Build zur Zielplattform passt
- ⚠GPL-Compliance kann Quellcode-Offenlegung erfordern
- ⚠Versionsverwaltung über Plattformen hinweg ist manuell
- ⚠Auto-Update der FFmpeg-Binärdateien muss von Ihrem Code gehandhabt werden
Entscheidungsmatrix
| Anforderung | Video Capture SDK | FFmpeg Wrappers | Gewinner |
|---|---|---|---|
| Live-Vorschau in Desktop-App | Video Capture SDK | ||
| Headless-Server-Transkodierung | FFmpeg | ||
| Multi-Kamera mit Bewegungserkennung | Video Capture SDK | ||
| GPL-freie kommerzielle Verteilung | Video Capture SDK | ||
| Maximale Formatunterstützung | FFmpeg | ||
| Niedriges Startbudget | FFmpeg | ||
| Schnelle Entwicklungszeit | Video Capture SDK | ||
| Professioneller Support/SLA | Video Capture SDK | ||
| Plattformübergreifende UI-Steuerelemente | Video Capture SDK | ||
| Benutzerdefinierte Codec-Entwicklung | FFmpeg | ||
| Echtzeit-Erkennungsfunktionen | Video Capture SDK | ||
| Community-Ressourcen/Tutorials | FFmpeg | ||
| Audiopegel-Überwachung | Video Capture SDK | ||
| Stream-Relay (RTSP zu RTMP) | Unentschieden | ||
| Stapel-Dateiverarbeitung | FFmpeg | ||
| Unternehmens-Compliance/Lizenzierung | Video Capture SDK |
Fazit
Video Capture SDK .NET
Das Video Capture SDK ist hervorragend als schlüsselfertige Lösung für .NET-Desktop- und plattformübergreifende Anwendungen geeignet, die Live-Video-Capture mit Vorschau, Overlays, Erkennung und Mehrkamera-Management erfordern. Seine native .NET-API eliminiert die Komplexität der Prozessverwaltung und bietet ein professionelles, unterstütztes Entwicklungserlebnis. Die kommerzielle Lizenz gewährleistet sauberes geistiges Eigentum für die Unternehmensverteilung.
FFmpeg Wrappers
FFmpeg bleibt der Goldstandard für Codec-Abdeckung und Stapelverarbeitung. Wenn Ihre Anwendung headless, serverseitig oder Open Source ist, bieten FFmpeg-Wrapper eine effektive und kostenlose Lösung. Das Fehlen von Live-Vorschau, Erkennungsfunktionen und nativen .NET-Steuerelementen bedeutet jedoch, dass Desktop-Capture-Anwendungen deutlich mehr individuelle Entwicklung erfordern.
The Reality
Für die meisten .NET-Entwickler, die capture-zentrierte Desktop-Anwendungen erstellen, spart das Video Capture SDK Wochen an Entwicklungszeit und eliminiert Lizenzrisiken. Für serverseitige Transkodierungsfarmen ist FFmpeg oft die pragmatische Wahl. Viele Teams nutzen beides.
