So all I need is simple - a list of currently avaliable video capture devices (web cameras). I need it in simple C or C++ console app. By list I mean something like such console output:
1) Asus Web Camera
2) Sony Web Camera
So It seems simple but I have one requirement - use of native OS apis as much as possible - no external libs - after all - all we want is to print out a a list - not to fly onto the moon!)
How to do such thing?
also from this series:
The v4l-utils are a series of packages for handling media devices. It is hosted at [v4l-utils. git], and packaged on most distributions.
38. V4L2 is the second version of V4L. Video4Linux2 fixed some design bugs and started appearing in the 2.5. x kernels. Video4Linux2 drivers include a compatibility mode for Video4Linux1 applications, though the support can be incomplete and it is recommended to use Video4Linux1 devices in V4L2 mode.
You can use the following bash command:
v4l2-ctl --list-devices
In order to use the above command, you must install package v4l-utils before. In Ubuntu/Debian you can use the command:
sudo apt-get install v4l-utils
It's easy by just traversing sysfs devices by a given class. The following command-line one liner would do so:
for I in /sys/class/video4linux/*; do cat $I/name; done
You can do the same thing in C/C++ application, by just opening up /sys/class/video4linux
directory, it will have symlinks to all your web cameras as video4linux devices:
$ ls -al /sys/class/video4linux
drwxr-xr-x 2 root root 0 Ноя 27 12:19 ./
drwxr-xr-x 34 root root 0 Ноя 26 00:08 ../
lrwxrwxrwx 1 root root 0 Ноя 27 12:19 video0 -> ../../devices/pci0000:00/0000:00:13.2/usb2/2-5/2-5:1.0/video4linux/video0/
You can follow every symlink to a directory of every device and read full contents of name
file in that directory to get the name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With