首页>Program>source

因此,我所需要的很简单-当前可用的视频捕获设备(网络摄像机)列表.我需要在简单的C或C ++控制台应用程序中使用它.通过列表,我的意思是类似这样的控制台输出:

1) Asus Web Camera
2) Sony Web Camera

因此,这似乎很简单,但我有一个要求-尽可能使用本机OS API-无需外部库-毕竟-我们想要的只是print出一个列表-不要飞上月球!)

该怎么做?


也来自该系列:

最新回答
  • 2021-1-12
    1 #

    这是我编写的代码段.大概是一本书.我想您可以遍历所有/ dev / videoN节点并获取信息。

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <linux/videodev.h>
    int main(){
        int fd;
        struct video_capability video_cap;
        struct video_window     video_win;
        struct video_picture   video_pic;
        if((fd = open("/dev/video0", O_RDONLY)) == -1){
            perror("cam_info: Can't open device");
            return 1;
        }
        if(ioctl(fd, VIDIOCGCAP, &video_cap) == -1)
            perror("cam_info: Can't get capabilities");
        else {
            printf("Name:\t\t '%s'\n", video_cap.name);
            printf("Minimum size:\t%d x %d\n", video_cap.minwidth, video_cap.minheight);
            printf("Maximum size:\t%d x %d\n", video_cap.maxwidth, video_cap.maxheight);
        }
        if(ioctl(fd, VIDIOCGWIN, &video_win) == -1)
            perror("cam_info: Can't get window information");
        else
            printf("Current size:\t%d x %d\n", video_win.width, video_win.height);
        if(ioctl(fd, VIDIOCGPICT, &video_pic) == -1)
            perror("cam_info: Can't get picture information");
        else
            printf("Current depth:\t%d\n", video_pic.depth);
        close(fd);
        return 0;
    }
    

  • 2021-1-12
    2 #

    您可以使用以下bash命令:

    v4l2-ctl --list-devices
    

    要使用上述命令,您必须安装软件包 v4l-utils 之前.在Ubuntu / Debian中,您可以使用以下命令:

    sudo apt-get install v4l-utils
    

  • 2021-1-12
    3 #

    通过给定类遍历sysfs设备很容易.下面的命令行之一可以执行此操作:

    for I in /sys/class/video4linux/*; do cat $I/name; done
    

    您只需打开 /sys/class/video4linux,即可在C / C ++应用程序中执行相同的操作 目录,它将作为video4linux设备链接到所有网络摄像机:

    $ 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/
    

    您可以跟随每个符号链接到达每个设备的目录,并阅读 name的全部内容

  • 2021-1-12
    4 #

    V4L2文档说,每种类型可以有64个允许的设备.例如,对于/ dev / video路径,可以有64个设备的地址分别为/ dev / video0,/ dev / video1,/ dev / video2 ...

    遍历64个设备,直到ioctl检索到指定树尾的ENIVAL。

  • string:用Java反转给定的句子
  • qt:QCompleter自定义完成规则