Last updated: Styczeń 2026
Video Capture SDK .NET vs LibVLCSharp
Kompleksowe porównanie przechwytywania wideo .NET
Wybór odpowiedniego frameworka do przechwytywania wideo dla aplikacji .NET to krytyczna decyzja architektoniczna. Ten przewodnik zawiera szczegółowe, bezstronne porównanie między VisioForge Video Capture SDK .NET — dedykowanym silnikiem przechwytywania — a LibVLCSharp, bindingiem .NET dla silnika multimedialnego VLC. Podczas gdy LibVLCSharp wyróżnia się w odtwarzaniu multimediów i może otwierać urządzenia przechwytujące, Video Capture SDK został zaprojektowany specjalnie dla profesjonalnych przepływów pracy przechwytywania wideo. Analizujemy architekturę, funkcje, wydajność, licencjonowanie i rzeczywisty kod, abyś mógł podjąć świadomą decyzję.
Podsumowanie wykonawcze
| Aspekt | Video Capture SDK .NET | LibVLCSharp |
|---|---|---|
| Architektura | Podwójny silnik: natywny DirectShow/Media Foundation + wbudowane potoki GStreamer | Monolityczny silnik multimedialny VLC poprzez interop C libvlc |
| Główny cel | Profesjonalne przechwytywanie wideo, nagrywanie, streaming i przetwarzanie | Biblioteka odtwarzania multimediów z podstawowym dostępem do urządzeń przechwytujących |
| Źródła przechwytywania | Kamery internetowe, ekrany, kamery IP, karty przechwytujące, tunery TV, NDI, kamery przemysłowe | Kamery przez dshow://, ekrany przez screen://, kamery IP przez URL |
| Podgląd na żywo | Wbudowany podgląd z akceleracją GPU z nakładkami i efektami | Wbudowane renderowanie powierzchni wideo (zorientowane na odtwarzanie) |
| Formaty nagrywania | MP4, MKV, WebM, AVI, WMV, MOV, TS, GIF + 30 więcej z typowanymi klasami wyjściowymi | Przez łańcuch transkodowania sout — konfiguracja oparta na ciągach znaków |
| Multi-wyjście | Natywne API Outputs_Add do jednoczesnego nagrywania + streamingu + podglądu | Przez dyrektywę sout duplicate — krucha składnia ciągów znaków |
| Efekty wideo | 40+ efektów z akceleracją CPU i GPU podczas przechwytywania | Brak efektów w czasie rzeczywistym podczas przechwytywania |
| Detekcja | Wbudowana detekcja ruchu, twarzy, kodów kreskowych/QR | Brak możliwości detekcji |
| Licencjonowanie | Komercyjna licencja na dewelopera (subskrypcja lub wieczysta) | LGPL 2.1 — bezpłatna przy dynamicznym linkowaniu |
| Ceny | Od 250 EUR (subskrypcja) do 1 500 EUR (zespół dożywotni) | Bezpłatna (LGPL 2.1) |
Szczegółowa analiza architektury
Architektura Video Capture SDK .NET
Video Capture SDK wykorzystuje konstrukcję z podwójnym silnikiem. Główny silnik opakowuje DirectShow i Media Foundation w systemie Windows, zapewniając natywny dostęp do każdego urządzenia przechwytującego udostępnionego przez system operacyjny. Drugorzędny wbudowany potok GStreamer obsługuje przechwytywanie wieloplatformowe, zaawansowane operacje kodeków i pozyskiwanie kamer IP. Oba silniki współdzielą zunifikowaną powierzchnię API .NET, więc przełączanie między nimi nie wymaga zmian w kodzie.
- ▶Natywne przechwytywanie Windows przez grafy filtrów DirectShow i Media Foundation
- ▶Wieloplatformowy silnik GStreamer dla macOS, Linux, iOS i Android
- ▶Podgląd z akceleracją GPU przez renderery Direct3D / OpenGL
- ▶Architektura sterowana zdarzeniami z obsługą async/await .NET
- ▶Model jednoprocesowy — nie wymaga zarządzania procesami potomnymi
- ▶Typowane klasy wyjściowe do konfiguracji nagrywania i streamingu
Architektura LibVLCSharp
LibVLCSharp to oficjalny binding .NET dla libvlc, głównego silnika odtwarzacza multimedialnego VLC. Zapewnia zarządzany wrapper wokół API C VLC, dając dostęp do rozbudowanych możliwości odtwarzania multimediów VLC. Choć zaprojektowany głównie do odtwarzania, może otwierać urządzenia przechwytujące za pomocą składni lokalizatora zasobów multimedialnych VLC (dshow://, screen://, v4l2://).
- ▶Zarządzany wrapper .NET wokół API C libvlc przez P/Invoke
- ▶Monolityczny silnik VLC obsługujący wszystkie operacje multimedialne
- ▶Urządzenia przechwytujące dostępne przez lokalizatory zasobów multimedialnych w stylu URL
- ▶Nagrywanie konfigurowane przez łańcuchy ciągów sout (wyjście strumienia)
- ▶Projekt zorientowany na odtwarzanie — przechwytywanie jest drugorzędnym przypadkiem użycia
- ▶Wieloplatformowość przez platformowo-specyficzne natywne biblioteki VLC
Kluczowe różnice architektoniczne
| Aspekt | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Fokus projektowy | Celowo zbudowany dla przepływów pracy przechwytywania wideo | Biblioteka odtwarzania multimediów z przechwytywaniem jako funkcją drugorzędną |
| Wykrywanie urządzeń | Natywne API enumeracji systemu z pełnymi metadanymi urządzenia | Ręczna konstrukcja URL dshow:// lub v4l2:// |
| Konfiguracja nagrywania | Typowane klasy wyjściowe .NET (MP4Output, H264EncoderSettings) | Łańcuchy transkodowania sout oparte na ciągach znaków |
| Obsługa błędów | Wyjątki .NET i błędy oparte na zdarzeniach | Callbacki logów VLC i subskrypcje zdarzeń |
| Multi-wyjście | Natywne API Outputs_Add — zarządzane i bezpieczne typowo | Dyrektywa sout duplicate — kruche parsowanie ciągów znaków |
| Potok efektów | Wbudowany łańcuch efektów CPU + GPU podczas przechwytywania | Brak potoku efektów w czasie rzeczywistym dla przechwytywania |
Porównanie funkcji
Źródła przechwytywania
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Kamery USB | ✅ | ⚠️(Przez dshow:// z ograniczoną kontrolą) |
| Wbudowane kamery laptopa | ✅ | ⚠️(Przez URL dshow://) |
| Przechwytywanie ekranu / pulpitu | ✅ | ⚠️(Podstawowe przez screen:// — brak wyboru regionu) |
| Przechwytywanie okna aplikacji | ✅ | ❌ |
| Kamery IP (RTSP/ONVIF) | ✅ | ⚠️(Oparte na URL, brak automatycznego ponownego połączenia) |
| Karty przechwytujące (Blackmagic DeckLink) | ✅ | ❌ |
| Tunery TV (BDA/DVB) | ✅ | ❌ |
| Źródła NDI | ✅ | ❌ |
| Kamery przemysłowe (GigE Vision, USB3 Vision) | ✅ | ❌ |
| Kamery wirtualne (OBS Virtual Cam) | ✅ | ⚠️(Przez dshow:// tylko w Windows) |
Podgląd na żywo
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Wbudowany podgląd wideo | ✅ | ✅(Powierzchnia zorientowana na odtwarzanie) |
| Renderowanie z akceleracją GPU | ✅ | ✅ |
| Nakładki tekstu / obrazu na podglądzie | ✅ | ❌(Brak API nakładek podczas przechwytywania) |
| Podgląd bez nagrywania | ✅ | ✅ |
| Wiele okien podglądu | ✅ | ⚠️(Wymaga wielu instancji MediaPlayer) |
| Kontrolki WinForms / WPF / MAUI | ✅ | ✅(Kontrolka VideoView dostępna) |
Nagrywanie
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| MP4 (H.264 / H.265) | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| Kontener MKV | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| WebM (VP8 / VP9) | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| AVI | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| WMV / ASF | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| Typowana konfiguracja wyjściowa | ✅ | ❌(Cała konfiguracja oparta na ciągach znaków) |
| Nagrywanie tylko audio | ✅ | ⚠️(Przez ciąg transkodowania sout) |
| Nagrywanie segmentowe (podział wg czasu/rozmiaru) | ✅ | ❌ |
| Nagrywanie Pre-Event (Bufor Cykliczny) | ✅ | ❌ |
Multi-wyjście
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Jednoczesne nagrywanie + streaming | ✅ | ⚠️(Przez sout duplicate — kruche) |
| Wiele wyjść nagrywania | ✅ | ⚠️(Przez sout duplicate — kruche) |
| Natywne API Outputs_Add | ✅ | ❌ |
| Niezależna kontrola wyjść | ✅ | ❌ |
| Zrzut ekranu podczas nagrywania | ✅ | ⚠️(TakeSnapshot dostępny, ale ograniczony) |
Streaming
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| RTMP Push | ✅ | ⚠️(Przez sout — ograniczona kontrola) |
| Tryb serwera RTSP | ✅ | ❌ |
| SRT (Caller / Listener) | ✅ | ❌ |
| Generowanie segmentów HLS | ✅ | ⚠️(Przez sout — ograniczone) |
| UDP / TCP Unicast / Multicast | ✅ | ⚠️(Przez sout rtp/udp) |
| Typowana konfiguracja streamingu | ✅ | ❌(Cała konfiguracja oparta na łańcuchach sout) |
Przetwarzanie wideo
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Zmiana rozmiaru / przycinanie w czasie rzeczywistym | ✅ | ❌(Brak przetwarzania podczas przechwytywania) |
| Deinterlacing | ✅ | ✅(VLC ma wbudowany deinterlacing) |
| Regulacja kolorów (jasność, kontrast) | ✅ | ❌(Brak efektów podczas przechwytywania) |
| Nakładka tekstowa / znak wodny | ✅ | ❌(Brak nakładki podczas przechwytywania) |
| Nakładka obrazu / logo | ✅ | ❌(Brak nakładki podczas przechwytywania) |
| Obraz w obrazie | ✅ | ❌ |
| Chroma Key (zielony ekran) | ✅ | ❌ |
| Filtry z akceleracją GPU | ✅ | ❌ |
Audio
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Przechwytywanie urządzenia audio | ✅ | ⚠️(Przez dshow:// audio) |
| Przechwytywanie audio systemowego (Loopback) | ✅ | ❌ |
| Miksowanie audio (wiele wejść) | ✅ | ❌ |
| Kontrola głośności / wzmocnienia w czasie rzeczywistym | ✅ | ⚠️(Podstawowa kontrola głośności) |
| Efekty audio (40+ wbudowanych) | ✅ | ❌ |
| Miernik VU / monitorowanie poziomu | ✅ | ❌ |
Detekcja i analiza
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Detekcja ruchu | ✅ | ❌ |
| Detekcja twarzy | ✅ | ❌ |
| Odczyt kodów kreskowych / QR | ✅ | ❌ |
| Śledzenie obiektów | ✅ | ❌ |
| Detekcja poziomu audio | ✅ | ❌ |
Dostęp do klatek i integracja
| Funkcja | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Callback surowej klatki (RGB / YUV) | ✅ | ⚠️(Przez SetVideoCallbacks — złożona konfiguracja) |
| Bitmap / SKBitmap / WriteableBitmap | ✅ | ❌(Wymagana ręczna konwersja) |
| Integracja z ML.NET / ONNX | ✅ | ⚠️(Wymaga ręcznej ekstrakcji klatek) |
| OpenCV Interop | ✅ | ⚠️(Przez callbacki wideo) |
| Bezpośredni dostęp do tekstur GPU | ✅ | ❌ |
| Wyjście kamery wirtualnej | ✅ | ❌ |
Wsparcie platform
Kompatybilność systemów operacyjnych
| Platforma | Video Capture SDK | LibVLCSharp |
|---|---|---|
| Windows x64 | ✅ | ✅ |
| Windows ARM64 | ✅ | ✅ |
| macOS (Apple Silicon + Intel) | ✅ | ✅ |
| Linux x64 (Ubuntu, Debian, Fedora) | ✅ | ✅ |
| Linux ARM64 (Raspberry Pi) | ✅ | ✅ |
| Android (przez .NET MAUI) | ✅ | ✅ |
| iOS (przez .NET MAUI) | ✅ | ✅ |
Kompatybilność frameworków UI
| Framework | Video Capture SDK | LibVLCSharp |
|---|---|---|
| WinForms | ✅ | ✅(Kontrolka VideoView) |
| WPF | ✅ | ✅(Kontrolka VideoView) |
| .NET MAUI | ✅ | ✅(Kontrolka VideoView) |
| Avalonia UI | ✅ | ✅(Kontrolka VideoView) |
| Konsola / Usługa | ✅ | ✅ |
| ASP.NET Core (Usługa w tle) | ✅ | ⚠️(Projekt zorientowany na odtwarzanie) |
| Blazor (Przetwarzanie po stronie serwera) | ✅ | ⚠️(Ograniczone przechwytywanie po stronie serwera) |
Porównanie cen
Ceny Video Capture SDK .NET
1 deweloper, użycie komercyjne, 1 rok aktualizacji
Do 8 deweloperów, licencja wieczysta z dożywotnimi aktualizacjami
All licenses include:
- ✓ Dystrybucja bez opłat licencyjnych
- ✓ Wszystkie przykłady kodu źródłowego
- ✓ Priorytetowe wsparcie przez tickety
- ✓ Wszystkie cele platformowe w zestawie
Koszty LibVLCSharp
Licencja LGPL 2.1 — wymagane dynamiczne linkowanie
Dla własnościowego linkowania statycznego lub użycia niezgodnego z LGPL
Rozważania dotyczące zgodności z LGPL
LibVLCSharp i libvlc są licencjonowane na warunkach LGPL 2.1. Oznacza to, że możesz ich używać w komercyjnym oprogramowaniu własnościowym, pod warunkiem przestrzegania warunków LGPL. Kluczowe wymagania obejmują:
- ⚠Musisz dynamicznie linkować do libvlc (nie statycznie)
- ⚠Musisz zapewnić użytkownikom możliwość zastąpienia biblioteki licencjonowanej LGPL zmodyfikowaną wersją
- ⚠Musisz dołączyć kopię licencji LGPL i wyraźnie wspomnieć o użyciu libvlc
- ⚠Jeśli modyfikujesz sam libvlc, musisz opublikować te modyfikacje na warunkach LGPL
- ⚠Statyczne linkowanie lub pewne scenariusze wbudowane mogą wymagać licencji komercyjnej od VideoLAN
Choć LGPL jest bardziej permisywna niż GPL, zgodność wymaga starannej uwagi na wymagania linkowania i dystrybucji. Niektóre zespoły prawne w przedsiębiorstwach wymagają licencjonowania komercyjnego, aby uniknąć ryzyka związanego ze zgodnością open source.
Przykłady kodu
Przykład 1: Nagrywanie z kamery do 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";
// Enable preview
capture.Video_Preview_Enabled = true;
// Start recording with preview
await capture.StartAsync();LibVLCSharp
C#using LibVLCSharp.Shared;
// Initialize VLC engine
Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);
// Open webcam via dshow:// URL
// Note: device name must be known in advance
using var media = new Media(libVLC,
"dshow://",
FromType.FromLocation);
// Add recording via sout transcode chain
media.AddOption(
":sout=#transcode{" +
"vcodec=h264,vb=4000," +
"acodec=aac,ab=192" +
"}:duplicate{" +
"dst=std{access=file," +
"mux=mp4," +
"dst=recording.mp4}," +
"dst=display" +
"}");
// Set dshow device (string-based)
media.AddOption(
":dshow-vdev=Integrated Camera");
media.AddOption(
":dshow-adev=Microphone (Realtek Audio)");
// Start — no typed API, errors in VLC log
mediaPlayer.Play(media);
// To stop: mediaPlayer.Stop();
// No progress events, no state machinePrzykład 2: Nagrywanie ekranu z nakładką + streaming
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
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
});
// Record to file
capture.Output_Format = new MP4Output
{
Video = new H264EncoderSettings { Bitrate = 8000 }
};
capture.Output_Filename = "screen.mp4";
// Also stream via RTMP
capture.Outputs_Add(new RTMPOutput
{
URL = "rtmp://streaming-server/live/key"
});
await capture.StartAsync();LibVLCSharp
C#using LibVLCSharp.Shared;
Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);
// Screen capture via screen:// URL
using var media = new Media(libVLC,
"screen://",
FromType.FromLocation);
// Configure screen capture
media.AddOption(":screen-fps=30");
media.AddOption(":screen-follow-mouse");
// Record to file via sout
// Note: No overlay support during capture
// Note: No text/image overlay API
media.AddOption(
":sout=#transcode{" +
"vcodec=h264,vb=8000" +
"}:std{" +
"access=file," +
"mux=mp4," +
"dst=screen.mp4" +
"}");
// Cannot simultaneously stream via RTMP
// sout duplicate is fragile and often fails
// for screen capture + streaming combos
// No overlay API — cannot add timestamps
// No watermark support during capture
// No region selection for capture area
mediaPlayer.Play(media);Przykład 3: Multi-wyjście: Nagrywanie + Stream + Podgląd
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
var capture = new VideoCaptureCore();
// Set webcam source
var devices = await capture.Video_CaptureDevice_ListAsync();
capture.Video_CaptureDevice = devices[0];
// Primary output: MP4 recording
capture.Output_Format = new MP4Output
{
Video = new H264EncoderSettings { Bitrate = 4000 },
Audio = new AACEncoderSettings { Bitrate = 192 }
};
capture.Output_Filename = "recording.mp4";
// Second output: RTMP stream
capture.Outputs_Add(new RTMPOutput
{
URL = "rtmp://live.server/app/stream_key",
Video = new H264EncoderSettings { Bitrate = 2500 },
Audio = new AACEncoderSettings { Bitrate = 128 }
});
// Third output: Low-res backup
capture.Outputs_Add(new MP4Output
{
Video = new H264EncoderSettings
{
Bitrate = 1000,
Width = 640,
Height = 360
}
}, "backup.mp4");
// Preview is always available
capture.Video_Preview_Enabled = true;
// All outputs start simultaneously
await capture.StartAsync();LibVLCSharp
C#using LibVLCSharp.Shared;
Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);
// Open webcam
using var media = new Media(libVLC,
"dshow://",
FromType.FromLocation);
media.AddOption(
":dshow-vdev=Integrated Camera");
// Attempt multi-output via sout duplicate
// WARNING: This is fragile and often fails
media.AddOption(
":sout=#transcode{" +
"vcodec=h264,vb=4000," +
"acodec=aac,ab=192" +
"}:duplicate{" +
"dst=std{access=file," +
"mux=mp4," +
"dst=recording.mp4}," +
"dst=std{access=rtmp," +
"mux=flv," +
"dst=rtmp://live.server/app/key}," +
"dst=display" +
"}");
// No independent bitrate per output
// No low-res backup option
// Single transcode shared across all outputs
// If one output fails, all may fail
// No typed API — string errors at runtime
mediaPlayer.Play(media);Przykład 4: Monitoring kamer IP RTSP z detekcją
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
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
cam.Motion_Detection.Enabled = true;
cam.Motion_Detection.Sensitivity = 70;
cam.OnMotionDetected += (s, e) =>
{
Console.WriteLine($"Motion on {url}");
};
// Barcode detection
cam.Barcode_Reader.Enabled = true;
cam.OnBarcodeDetected += (s, e) =>
{
Console.WriteLine($"Barcode: {e.Value}");
};
// Segmented recording
cam.Output_Format = new MP4Output();
cam.Output_Filename = $"cam_{cameras.Count}.mp4";
cam.SegmentedRecording.Enabled = true;
cam.SegmentedRecording.Duration = TimeSpan.FromHours(1);
cameras.Add(cam);
}
foreach (var cam in cameras)
await cam.StartAsync();LibVLCSharp
C#using LibVLCSharp.Shared;
Core.Initialize();
using var libVLC = new LibVLC();
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 players = new List<MediaPlayer>();
foreach (var url in cameraUrls)
{
var player = new MediaPlayer(libVLC);
var media = new Media(libVLC, url,
FromType.FromLocation);
// Record via sout
media.AddOption(
":sout=#transcode{vcodec=h264,vb=2000}" +
":std{access=file,mux=mp4," +
$"dst=cam_{players.Count}.mp4}}");
// No motion detection — not available
// No barcode detection — not available
// No face detection — not available
// No auto-reconnection on stream failure
// No segmented recording support
// Must implement reconnection manually:
player.EndReached += (s, e) =>
{
// Manual reconnect attempt
// ThreadPool.QueueUserWorkItem(_ =>
// player.Play(media));
};
player.Play(media);
players.Add(player);
}
// No event-driven detection
// No managed surveillance features
// Manual process monitoring requiredKiedy wybrać każde rozwiązanie
Wybierz Video Capture SDK, gdy potrzebujesz
- ✓Profesjonalnego przechwytywania z efektami wideo w czasie rzeczywistym i nakładkami
- ✓Multi-wyjściowego nagrywania + streamingu z jednego potoku
- ✓Systemów monitoringu z detekcją ruchu, twarzy i kodów kreskowych
- ✓Efektów audio w czasie rzeczywistym (40+) podczas przechwytywania
- ✓Wyjścia kamery wirtualnej dla aplikacji nadawczych
- ✓Wsparcia sprzętu przemysłowego i profesjonalnego (DeckLink, GigE Vision)
- ✓Kompozycji obraz-w-obrazie i chroma key podczas przechwytywania
- ✓Nagrywania ekranu z wyborem regionu i nakładkami
- ✓W pełni typowanego API .NET bez konfiguracji opartej na ciągach znaków
Wybierz LibVLCSharp, gdy potrzebujesz
- ✓Odtwarzania multimediów z podstawowym dostępem do urządzeń przechwytujących
- ✓Projektów bez budżetu, gdzie zgodność z LGPL jest akceptowalna
- ✓Prostego nagrywania z kamery bez efektów i detekcji
- ✓Wieloplatformowego odtwarzania multimediów w aplikacjach .NET MAUI
- ✓Projektów już wykorzystujących infrastrukturę i przepływy pracy VLC
- ✓Projektów open source kompatybilnych z licencją LGPL
- ✓Szybkich prototypów dla podstawowej funkcjonalności przechwytywania wideo
- ✓Aplikacji, gdzie odtwarzanie jest główne, a przechwytywanie drugorzędne
Wdrożenie i dystrybucja
Wdrożenie Video Capture SDK
- ✓Pakiet NuGet zawiera wszystkie natywne zależności
- ✓Pojedyncze odwołanie NuGet — brak zewnętrznych narzędzi do instalacji
- ✓Redystrybucja bez opłat licencyjnych z licencją komercyjną
- ✓Obsługa wdrożenia xcopy / MSIX / ClickOnce
- ✓Obsługa kontenerów Docker (Linux i Windows)
- ✓Brak zobowiązań LGPL — bezpieczne dla oprogramowania własnościowego
Wdrożenie LibVLCSharp
- ⚠Pakiety NuGet dostępne (LibVLCSharp + pakiety platformowe VideoLAN.LibVLC)
- ⚠Wymaga dołączenia platformowo-specyficznych natywnych bibliotek VLC (~80-150 MB)
- ⚠Zgodność z LGPL wymaga dynamicznego linkowania i informacji o licencji
- ⚠Wymaga zapewnienia mechanizmu zastąpienia biblioteki libvlc przez użytkowników
- ⚠Pakiety platformowe obsługują dystrybucję natywnych bibliotek
- ⚠Statyczne linkowanie wymaga komercyjnej licencji VideoLAN
Macierz decyzyjna
| Wymaganie | Video Capture SDK | LibVLCSharp | Zwycięzca |
|---|---|---|---|
| Profesjonalna aplikacja przechwytująca | Video Capture SDK | ||
| Multi-wyjście (nagrywanie + stream) | Video Capture SDK | ||
| Monitoring z detekcją | Video Capture SDK | ||
| Efekty w czasie rzeczywistym podczas przechwytywania | Video Capture SDK | ||
| Wyjście kamery wirtualnej | Video Capture SDK | ||
| Sprzęt przemysłowy / profesjonalny | Video Capture SDK | ||
| Kompozycja PiP / chroma key | Video Capture SDK | ||
| 40+ efektów audio podczas przechwytywania | Video Capture SDK | ||
| Nagrywanie ekranu z nakładkami | Video Capture SDK | ||
| Budżet 0 $ (open source) | LibVLCSharp | ||
| Proste nagrywanie z kamery | LibVLCSharp | ||
| Projekt kompatybilny z LGPL | LibVLCSharp |
Podsumowanie
Video Capture SDK .NET
Video Capture SDK to dedykowany silnik przechwytywania, który wyróżnia się w profesjonalnych przepływach pracy przechwytywania wideo. Jego typowane API .NET, wbudowany potok efektów, architektura multi-wyjściowa, możliwości detekcji i wsparcie profesjonalnego sprzętu czynią go oczywistym wyborem dla aplikacji, gdzie jakość przechwytywania i funkcje mają znaczenie. Licencja komercyjna zapewnia czyste prawo własności intelektualnej dla dystrybucji korporacyjnej.
LibVLCSharp
LibVLCSharp to doskonała biblioteka odtwarzania multimediów, która może również otwierać urządzenia przechwytujące. Jeśli Twoja aplikacja koncentruje się głównie na odtwarzaniu z okazjonalnym prostym nagrywaniem, LibVLCSharp jest sprawną i bezpłatną opcją. Jednak konfiguracja sout oparta na ciągach znaków, brak efektów w czasie rzeczywistym i brak funkcji detekcji oznaczają, że profesjonalne aplikacje przechwytujące wymagają znacznie więcej niestandardowego programowania — lub po prostu nie mogą być zbudowane przy użyciu samego LibVLCSharp.
The Reality
Dla większości deweloperów .NET budujących aplikacje zorientowane na przechwytywanie, Video Capture SDK zapewnia funkcje klasy profesjonalnej, których LibVLCSharp nigdy nie został zaprojektowany, aby oferować. LibVLCSharp wyróżnia się jako biblioteka odtwarzania i jest rozsądnym wyborem dla podstawowego przechwytywania, gdy budżet jest głównym ograniczeniem. Jeśli Twoja aplikacja potrzebuje efektów, detekcji, multi-wyjścia lub wsparcia profesjonalnego sprzętu, Video Capture SDK jest praktycznym wyborem.
