Reputation: 540
I am creating a project using DirectShow.Net that shows a preview of a webcam view within a windows form using Visual C#.
I would like to start with gaining a collection of available video devices so I can choose between either the built in webcam or the USB webcam.
I have seen several examples of this being done in C++, e.g. on the msdn "http://msdn.microsoft.com/en-us/library/windows/desktop/dd377566(v=vs.85).aspx".
However as I do not know any C++ I do not know how to convert this code into C#.
Upvotes: 3
Views: 23836
Reputation: 483
I had the same issue. The often suggested approaches of requesting the Windows Media Foundation or Directshow API were not sufficient to me. But fortunately I have found this solution by Michaël Hompus. The usage is as simple as follows:
using var sde = new Hompus.VideoInputDevices.SystemDeviceEnumerator();
foreach (var device in sde.ListVideoInputDevice())
{
yield return new Webcam
{
Name = device.Value,
Index = device.Key,
};
}
The respective GitHub repository can be found here.
Upvotes: 0
Reputation: 938
.netcore solution: Install the package: DirectShowLib.Standard
Then you can get the cameras list:
var devices = new List<DsDevice>(DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice));
var cameraNames = new List<string>();
foreach (var device in devices)
{
cameraNames.Add(device.Name);
}
Upvotes: 6
Reputation: 69642
DirectShow.NET sample \Samples\Capture\DxLogo\Capture.cs
shows how to do it:
// Get the collection of video devices
capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
The keyword you need is FilterCategory.VideoInputDevice
.
See also:
Upvotes: 8