2010-11-27 14 views
19

तो मुझे बस इतना आसान है - वर्तमान में उपलब्ध वीडियो कैप्चर डिवाइस (वेब ​​कैमरे) की एक सूची। मुझे इसे सरल सी या सी ++ कंसोल ऐप में चाहिए। सूची से मेरा इस तरह सांत्वना उत्पादन की तरह कुछ मतलब: - जहां तक ​​संभव हो देशी ओएस API का उपयोग -लिनक्स (उबंटू) पर वीडियो कैप्चर डिवाइस (वेब ​​कैमरे) की सूची कैसे प्राप्त करें? (सी/सी ++)

1) Asus Web Camera 
2) Sony Web Camera 

तो यह आसान लगता है, लेकिन मैं एक आवश्यकता है कोई बाहरी libs - सब के बाद - सब हम चाहते हैं प्रिंट करने के लिए है बाहर सूची - चंद्रमा पर उड़ने के लिए नहीं!)

ऐसी चीज कैसे करें?


इस श्रृंखला से

भी:

+1

आप इसे/proc/बस/इनपुट/उपकरणों – chrisaycock

+1

से सवाल वास्तव में यह कैसे कोड से करने के लिए किया जाता है प्राप्त कर सकते हैं: Ubuntu/डेबियन में आप आदेश का उपयोग कर सकते हैं? – Rella

उत्तर

11

यह एक कोड स्निपेट है जिसे मैंने चारों ओर बिछाया था। शायद एक किताब से। मुझे लगता है कि आप बस सभी/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; 
} 
+0

और होट इटेटेट थ्रू एन? (हम नहीं जानते कि हम क्या करते हैं?) – Rella

+0

सही हमें एक बड़ा पर्याप्त अनुमान लगाना है। स्वीकृति() फ़ंक्शन का उपयोग यह देखने के लिए करें कि 0/एन से n/dev/video नोड्स क्या हैं। यहां http: // stackoverflow पर स्वीकृत उत्तर देखें।कॉम/प्रश्न/230062/व्हाट्स-द-बेस्ट-वे-टू-चेक-अगर-ए-फाइल-मौजूद-इन-सी-क्रॉस-प्लेटफ़ॉर्म – BlueDog

+0

कैमरे के नाम कैसे प्राप्त करें? – Rella

25

किसी दिए गए वर्ग द्वारा केवल sysfs उपकरणों को पार करना आसान है। निम्नलिखित कमांड लाइन एक लाइनर ऐसा होगा:

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

आप सी में एक ही बात/C++ आवेदन, बस /sys/class/video4linux निर्देशिका खोलने के द्वारा, यह 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 फ़ाइल का पूर्ण सामग्री पढ़ने नाम पाने के लिए कर सकते हैं।

+0

лол =) कुछ compilable कोड के बारे में कैसे (मुख्य समारोह के साथ शामिल है और इतने पर)? – Rella

+0

@ कंबंबस ऊपर 1-लाइनर काफी अच्छा है, और एक सी कोड में बदलने के लिए आसान है। मेरे द्वारा +1 –

+0

एक-लाइनर मेरे लिए बिल्कुल सही है। धन्यवाद! किसी भी कोड में डालने के लिए आसान peasy। – Daniel

0

वी 4 एल 2 दस्तावेज कहता है कि प्रत्येक प्रकार के लिए 64 अनुमत डिवाइस हो सकते हैं। उदाहरण के लिए पथ/देव/वीडियो के लिए/dev/video0,/dev/video1,/dev/video2 के रूप में संबोधित 64 डिवाइस हो सकते हैं ...

आईओसीटीएल सेवानिवृत्त होने तक 64 डिवाइसों पर इटरेट करें जो कि अंतराल को समाप्त करता है पेड़। v4l-utils से पहले आदेश उपरोक्त आदेश का उपयोग करने के

v4l2-ctl --list-devices 

, तो आप पैकेज को स्थापित करना होगा:

25

आप निम्न बैश आदेश का उपयोग कर सकते हैं।

sudo apt-get install v4l-utils 
+0

आर्क लिनक्स पर उन लोगों के लिए, 'v4l2-ctl' 'v4l-utils' पैकेज में प्रदान किया गया है। – ElDog

+0

मैंने अपनी विशेष समस्या के लिए सबसे अच्छा जवाब होने के लिए '' 'v4l2-ctl --list-devices''' का उपयोग करके पाया। मैं इसे एक साधारण पायथन कॉन्फ़िगरेटर के लिए उपयोग कर समाप्त कर दिया। जिस्ट [यहां] (https://gist.github.com/kphretiq/e5b95e7fc2b11819121e)। – lysdexia

संबंधित मुद्दे

 संबंधित मुद्दे