首頁>Program>source

因此,我所需要的很簡單-当前可用的视频捕获設備(網路摄像機)列表.我需要在簡單的C或C ++控製台應用程式中使用它.通過列表,我的意思是類似這樣的控製台輸出:

1) Asus Web Camera
2) Sony Web Camera

因此,這似乎很簡單,但我有一个要求-尽可能使用本機OS API-無需外部庫-毕竟-我们想要的只是print出一个列表-不要飞上月球!)

该怎麼做?


也来自该系列:

最新回復
  • 3月前
    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;
    }
    

  • 3月前
    2 #

    您可以使用以下bash命令:

    v4l2-ctl --list-devices
    

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

    sudo apt-get install v4l-utils
    

  • 3月前
    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的全部內容

  • 3月前
    4 #

    V4L2文件說,每種型別可以有64个允许的設備.例如,對於/ dev / video路徑,可以有64个設備的地址分別為/ dev / video0,/ dev / video1,/ dev / video2 ...

    遍歷64个設備,直到ioctl檢索到指定樹尾的ENIVAL。

  • string:用Java反轉给定的句子
  • qt:QCompleter自定義完成規則