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/NetLibDirectshowCaptureInstalls into whichever agent you are using.
README
NetLibDirectshowCapture
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
qqbot-channel
385.5kQQ channel management skill. Use qqbot_channel_api for explicit QQ channel-management requests; confirm write, delete, and bulk actions before calling authenticated QQ Open Platform endpoints.
docs-writer
106.4kAlways use this skill when the task involves writing, reviewing, or editing files in the `/docs` directory or any `.md` files in the repository.
cpp
40.5kGuide Cursor to write modern C++ and CMake code with clear structure, RAII, const-correctness, and safe error handling.
gamemaker-gml
40.5kGameMaker Language (GML) rules for scripts, objects, events, rooms, data structures, and performance-minded game code
