【问题标题】:How to get a list video capture devices NAMES (web cameras) on linux ( ubuntu )? (C/C++)如何在 linux ( ubuntu ) 上获取列表视频捕获设备名称 (网络摄像头)? (C/C++)
【发布时间】:2011-05-27 20:52:54
【问题描述】:

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

1) Asus Web Camera
2) Sony Web Camera

所以我知道如何使用以下代码获取诸如 W、H 等 cam 道具:

#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;
}

但不是名字(如何获得名字?

所以看起来很简单,但我有一个要求 - 尽可能使用本机 OS api - 没有外部库 - 毕竟 - 我们想要的只是打印出一个列表 - 而不是飞上月球!)

这样的事情怎么办?


也来自这个系列:

【问题讨论】:

  • /sys/class/video4linux/video*/name
  • @Ignacio Vazquez-Abrams 您能否提供与我的姓名集成的代码?

标签: c++ c linux webcam device


【解决方案1】:

V4L2 文档说每种类型可以有 64 个允许的设备。例如路径 /dev/video 可以有 64 个设备寻址为 /dev/video0、/dev/video1、/dev/video2 ...

迭代超过 64 个设备,直到 ioctl 返回指定树结束的 ENIVAL。

【讨论】:

    【解决方案2】:

    您正在使用已弃用的 V4L1 API - V4L2 是新代码的首选 API。

    无论如何,VIDIOC_QUERYCAP ioctl() 可能就是您要找的。您需要查看返回的struct v4l2_capability 结构的.card 字段。

    编辑:

    您可以查看v4l-info 实用程序的源代码,它完全符合您的要求。

    【讨论】:

    • 能否将您的代码 sn-p 与我的代码 sn-p 连接起来?
    猜你喜欢
    • 2011-05-16
    • 2011-05-16
    • 2011-05-30
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多