SkillAgentSearch skills...

NetLibDirectshowCapture

A C# wrapper of OBSproject/libdshowcapture using .NET 8.0 with C++/CLI to utilize DirectShow on Windows

Install / Use

npx skills add charlescao460/NetLibDirectshowCapture

Installs into whichever agent you are using.

About this skill

Quality Score

0/100

Supported Platforms

Universal

README

NetLibDirectshowCapture

Build NuGet

A .NET Wrapper of libdshowcapture using .NET 8.0 C++/CLI

This is a direct wrapper, so almost all behaviors should be consistent with libdshowcapture. And it should be compatible with all the devices that OBS Studio supports.

Performance

This library is written in C++/CLI (aka. C++ Interop), which has better performance according to Microsoft. All the marshaling details are manually controlled for optimized performance and latency. The callback exposed the native pointer directly, which eliminate all of the unnecessary copies. It should has lower latency compared to other camera library using explicit P/Invoke.

Usage Example

// List all capture devices
var videoDevices = NetLibDirectshowCapture.Device.EnumVideoDevices();
var videoDevice = videoDevices[0];
// Check device's capabilities
var cap = videoDevice.Capabilities
    .First(c => c.Format == VideoFormat.YUY2 && c.MaxCx == 1920 && c.MaxCy == 1080);
// Create config
VideoConfig videoConfig = new VideoConfig()
{
    Name = videoDevice.Name,
    Path = videoDevice.Path,
    UseDefaultConfig = false,
    Cx = cap.MaxCx,
    CyAbs = cap.MaxCy,
    CyFlip = false,
    FrameInterval = cap.MinInterval,
    InternalFormat = cap.Format,
    Format = VideoFormat.XRGB
};
byte[] managedArray = null;
// Create frame event handler
videoConfig.OnVideoCaptured += (o, e) =>
{
    managedArray ??= new byte[e.Length];
    System.Runtime.InteropServices.Marshal.Copy(e.Ptr, managedArray, 0, e.Length);
    // Process frames using managedArray...
};
// Run!
var device = new Device();
device.ResetGraph();
device.VideoConfiguration = videoConfig;
device.ConnectFilters();
device.Start();

Git Submodules

Since this repo contains libdshowcapture as its submodule, please use --recurse-submodules flag when cloning.

git clone --recurse-submodules git@github.com:charlescao460/NetLibDirectshowCapture.git

Related Skills

View on GitHub
GitHub Stars12
CategoryContent
Updated3mo ago
Forks2

Languages

C++

Security Score

92/100

Audited on Apr 29, 2026

No findings