VisioForge

Last updated: Januar 2026

DirectShow.NET Alternative: Migrationsleitfaden zu VisioForge .Net SDK

Schritt-für-Schritt-Anleitung zur Migration von DirectShow.NET (aufgegeben) zu VisioForge .NET SDK für Videoaufnahme, Wiedergabe und Verarbeitung auf .NET 6-10.

C#-Entwickler, die von DirectShow.NET (directshowlib) zu einem modernen .NET 6-10 SDK für Videoaufnahme, Wiedergabe und Verarbeitung migrieren

Warum DirectShow.NET ersetzen?

DirectShow.NET wurde seit Februar 2010 aufgegeben — über 15 Jahre ohne Updates. Es bietet rohe COM-Schnittstellendefinitionen für Microsofts DirectShow API, die Microsoft selbst zugunsten von Media Foundation eingestellt hat.

RisikoAuswirkung
DirectShow von Microsoft eingestelltKeine neuen Funktionen, Codecs oder Plattformunterstützung
Bibliothek nicht mehr gepflegt.NET Framework 2.0, keine .NET 6+ Unterstützung
COM-KomplexitätHunderte Zeilen für einfache Aufgaben, manuelle Speicherverwaltung
Codec-SucheDirectShow-Filter von Drittanbietern müssen gefunden, installiert und registriert werden
Filtergraph-DebuggingUndurchsichtige Pipeline-Fehler, keine Diagnosetools
Nur WindowsCOM/DirectShow kann nicht auf macOS, Linux oder Mobilgeräten ausgeführt werden
Keine modernen CodecsKein natives H.265, AV1, VP9 ohne Drittanbieter-Filter
Registry-ProblemeProbleme bei der Filterregistrierung unter modernem Windows

Welches VisioForge SDK ersetzt was?

DirectShow.NET Nutzung zu VisioForge Ersatz

DirectShow.NET NutzungVisioForge Ersatz
C# Webcam-Aufnahme über FiltergraphVideo Capture SDK .Net — `VideoCaptureCoreX`
C# IP-Kamera-Aufnahme (RTSP/MJPEG)Video Capture SDK .Net — `RTSPSourceSettings`
C# Bildschirmaufnahme und AufzeichnungVideo Capture SDK .Net — `ScreenCaptureSourceSettings`
Dateiwiedergabe über `IGraphBuilder`Media Player SDK .Net — `MediaPlayerCoreX`
DVD-Wiedergabe über `IDvdControl2`Media Player SDK .Net — DVD-Navigations-API
TV-Tuner über `IAMTVTuner`Video Capture SDK .Net — `VideoCaptureCore`
DateitranskodierungVideo Edit SDK .Net — `VideoEditCoreX`
Benutzerdefinierte FiltergraphenMedia Blocks SDK .Net — modulare Pipeline (400+ Blöcke)
`ISampleGrabber` Frame-Zugriff`OnVideoFrameBuffer` Event in jedem SDK

C# DirectShow Interface-Zuordnung

C# DirectShow Interface-Zuordnung

DirectShow.NET InterfaceVisioForge Äquivalent
`IGraphBuilder`Pipeline wird automatisch vom SDK erstellt
`ICaptureGraphBuilder2``VideoCaptureCoreX` Konstruktor
`IMediaControl` (Run/Stop/Pause)`StartAsync()` / `StopAsync()` / `PauseAsync()`
`IMediaEvent`SDK-Events (`OnError`, `OnStop`, etc.)
`IVideoWindow``VideoView` Steuerelement (WinForms/WPF/MAUI/Avalonia)
`ISampleGrabber``OnVideoFrameBuffer` Event
`IBaseFilter`Nicht erforderlich — SDK verwaltet Filter intern
`IPin` / Pin-VerbindungenNicht erforderlich — SDK verbindet Pipeline automatisch
`DsDevice.GetDevicesOfCat()``DeviceEnumerator.Shared.VideoSourcesAsync()`
`FilterCategory.VideoInputDevice``DeviceEnumerator.Shared.VideoSourcesAsync()`
`FilterCategory.AudioInputDevice``DeviceEnumerator.Shared.AudioSourcesAsync()`
`IAMTVTuner``VideoCaptureCore.TVTuner` Eigenschaft
`IDvdControl2``MediaPlayerCore.DVD_*` Methoden
`Marshal.ReleaseComObject()``await sdk.DisposeAsync()`

C# Webcam-Aufnahme mit Vorschau

DirectShow.NET — Webcam-Aufnahme (vorher)

C#
// 80+ lines of COM interop
var graphBuilder = (IGraphBuilder)new FilterGraph();
var captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
int hr = captureGraph.SetFiltergraph(graphBuilder);
DsError.ThrowExceptionForHR(hr);

// Find video device
var devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
IBaseFilter sourceFilter;
hr = graphBuilder.AddSourceFilterForMoniker(
    devices[0].Mon, null, devices[0].Name, out sourceFilter);
DsError.ThrowExceptionForHR(hr);

// Render preview
hr = captureGraph.RenderStream(
    PinCategory.Preview, MediaType.Video, sourceFilter, null, null);
DsError.ThrowExceptionForHR(hr);

// Set video window
var videoWindow = (IVideoWindow)graphBuilder;
videoWindow.put_Owner(panelHandle);
videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings);
videoWindow.SetWindowPosition(0, 0, panel.Width, panel.Height);

// Start
var mediaControl = (IMediaControl)graphBuilder;
hr = mediaControl.Run();
DsError.ThrowExceptionForHR(hr);

// Cleanup (must release EVERY COM object)
Marshal.ReleaseComObject(sourceFilter);
Marshal.ReleaseComObject(captureGraph);
Marshal.ReleaseComObject(graphBuilder);

VisioForge — C# Webcam-Aufnahme (nachher)

C#
var capture = new VideoCaptureCoreX(videoView);
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
await capture.StartAsync();

// Cleanup
await capture.StopAsync();
await capture.DisposeAsync();

C# Webcam-Aufnahme als MP4

DirectShow.NET — Webcam zu MP4 (vorher)

C#
// Must find H.264 encoder filter, MP4 mux filter, file writer
// Each requires separate COM object management
var graphBuilder = (IGraphBuilder)new FilterGraph();
var captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
captureGraph.SetFiltergraph(graphBuilder);

// Add source
var devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
IBaseFilter sourceFilter;
graphBuilder.AddSourceFilterForMoniker(
    devices[0].Mon, null, devices[0].Name, out sourceFilter);

// Find and add H.264 encoder (must be installed on system!)
// This varies by system — no guarantee the filter exists
Guid h264Clsid = new Guid("some-encoder-guid");
IBaseFilter encoder = (IBaseFilter)Activator.CreateInstance(
    Type.GetTypeFromCLSID(h264Clsid));
graphBuilder.AddFilter(encoder, "H.264 Encoder");

// Find and add MP4 mux
// Find and add file writer
// Connect source → encoder → mux → writer pins manually
// Each pin connection can fail silently or throw cryptic COM errors

// Configure encoder properties via ICodecAPI or IPropertyBag
// Different for every encoder filter...

var mediaControl = (IMediaControl)graphBuilder;
mediaControl.Run();

// Cleanup: release 5+ COM objects

VisioForge — C# Webcam-Aufnahme als MP4 (nachher)

C#
var capture = new VideoCaptureCoreX(videoView);
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();

C# Videodatei-Wiedergabe

DirectShow.NET — Videowiedergabe (vorher)

C#
var graphBuilder = (IGraphBuilder)new FilterGraph();
int hr = graphBuilder.RenderFile("video.mp4", null);
DsError.ThrowExceptionForHR(hr);

var videoWindow = (IVideoWindow)graphBuilder;
videoWindow.put_Owner(panelHandle);
videoWindow.put_WindowStyle(WindowStyle.Child);
videoWindow.SetWindowPosition(0, 0, panel.Width, panel.Height);

var mediaControl = (IMediaControl)graphBuilder;
mediaControl.Run();

// Seeking
var mediaSeeking = (IMediaSeeking)graphBuilder;
long position = 50000000; // 5 seconds in 100ns units
mediaSeeking.SetPositions(
    ref position, AMSeekingSeekingFlags.AbsolutePositioning,
    null, AMSeekingSeekingFlags.NoPositioning);

VisioForge — C# Videoplayer (nachher)

C#
var player = new MediaPlayerCoreX(videoView);
await player.OpenAsync(new Uri("video.mp4"));
await player.PlayAsync();

// Seeking
await player.SeekAsync(TimeSpan.FromSeconds(5));

C# Video-Frame-Erfassung

DirectShow.NET — ISampleGrabber Frame-Erfassung (vorher)

C#
// Must insert ISampleGrabber into filter graph
var sampleGrabber = (ISampleGrabber)new SampleGrabber();
var mediaType = new AMMediaType();
mediaType.majorType = MediaType.Video;
mediaType.subType = MediaSubType.RGB24;
sampleGrabber.SetMediaType(mediaType);

graphBuilder.AddFilter((IBaseFilter)sampleGrabber, "Grabber");
// Connect pins...
sampleGrabber.SetBufferSamples(true);

// In callback: manually read buffer, create Bitmap from raw bytes
sampleGrabber.GetCurrentBuffer(ref bufferSize, buffer);
// Manual pixel format conversion, stride calculation, etc.

VisioForge — C# Video-Frame-Erfassung (nachher)

C#
capture.OnVideoFrameBuffer += (s, e) =>
{
    // Frame data available as managed buffer
    // Or convert to SKBitmap/Bitmap directly
    var bitmap = e.Frame.ToBitmap();
    ProcessFrame(bitmap);
};

Migrations-Checkliste

  • DirectShow.NET-Nutzung prüfen — Alle `using DirectShowLib`-Referenzen finden
  • Filtergraph-Zweck identifizieren — Aufnahme, Wiedergabe, Transkodierung oder benutzerdefinierte Verarbeitung
  • VisioForge SDK wählen — Video Capture, Media Player, Video Edit oder Media Blocks
  • NuGet-Pakete installieren — DirectShowLib NuGet durch VisioForge-Pakete ersetzen
  • Filtergraph-Code ersetzen
  • COM-Bereinigungscode entfernen — VisioForge verwendet `IAsyncDisposable`
  • Drittanbieter-DirectShow-Filterabhängigkeiten entfernen — VisioForge enthält Codecs
  • Modernes .NET anvisieren — .NET 6-10
  • Plattformübergreifend testen
  • DirectShow-Filterregistrierung entfernen — Nicht mehr erforderlich

Was Sie nach der Migration gewinnen

AspektDirectShow.NETNach der Migration
Codezeilen100+ pro Funktion5-10 pro Funktion
Framework.NET Framework 2.0.NET 6-10
PlattformenNur WindowsWindows, macOS, Linux, iOS, Android
API-StilRohes COM, manuelle Pin-VerbindungenTypisierte async C# API
CodecsDirectShow-Filter suchen und installierenIntegriert (H.264, H.265, AV1, VP9)
SpeicherverwaltungManuelles `Marshal.ReleaseComObject``IAsyncDisposable`
DebuggingUndurchsichtige COM-Fehler (HRESULT)Typisierte Exceptions, Events
VideoeffekteEffektfilter suchen40+ integriert (GPU + CPU)
AudioeffekteKeine40+ (EQ, Reverb, Chorus, 3D)
StreamingNicht verfügbarRTMP, HLS, SRT, NDI
ErkennungNicht verfügbarBewegung (MOG2), Gesicht (Haar/DNN/DLib), Fußgänger (HOG+SVM), Barcode
Hardware-EncodingEncoder-Filter suchenNVENC, QSV, AMF, VideoToolbox
IP-KamerasManueller FiltergraphRTSP, RTMP, HLS, ONVIF mit automatischer Wiederverbindung
WartungAufgegeben (2010)Aktive Entwicklung

Frequently Asked Questions

Wird DirectShow.NET noch gepflegt?
Nein. DirectShow.NET wurde seit Februar 2010 aufgegeben. Microsoft hat auch die zugrunde liegende DirectShow API zugunsten von Media Foundation eingestellt.
Was ist die beste DirectShow.NET-Alternative für C# Videoaufnahme?
VisioForge Video Capture SDK .Net ersetzt DirectShow-Filtergraphen durch eine typisierte async API. Webcam-Aufnahme, die 80+ Zeilen COM-Interop erforderte, wird zu 5 Zeilen C#-Code, mit integrierter Aufzeichnung, Hardware-Encoding und plattformübergreifender Unterstützung.
Kann VisioForge benutzerdefinierte DirectShow-Filtergraphen ersetzen?
Ja. Das VisioForge Media Blocks SDK bietet eine modulare Pipeline mit 400+ Blöcken, die benutzerdefinierte Filtergraph-Konstruktion ersetzt.
Unterstützt VisioForge .NET 6, .NET 8, .NET 9 und .NET 10?
Ja. Alle VisioForge .Net SDK-Pakete unterstützen .NET 6 bis .NET 10, einschließlich plattformübergreifender Bereitstellung.
Brauche ich noch DirectShow-Filter auf dem System?
Nein. VisioForge bündelt eigene Codecs und Decoder. H.264, H.265, AV1, VP9, AAC und andere Codecs funktionieren sofort.
Kann ich schrittweise von DirectShow.NET migrieren?
Ja. VisioForge SDKs können im selben Projekt neben DirectShow.NET koexistieren. Ersetzen Sie einen Filtergraphen nach dem anderen.

Starten Sie Ihre Migration

Verwandte Migrationsleitfäden