首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureDevice的USB接口

AVCaptureDevice的USB接口
EN

Stack Overflow用户
提问于 2016-10-12 19:33:54
回答 1查看 859关注 0票数 2

如果我有一个AVCaptureDevice,我如何获得相关的USB接口,以便我可以访问底层硬件通过IOKit?

我尝试通过vid & pid找到它,但是如果我插入两个具有相同vid,pid的设备,这是行不通的。下面是从AVCaptureDevice中提取vid和pid的代码:

代码语言:javascript
复制
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithDeviceType:AVMediaTypeVideo];
NSString *modelID = [device modelID];

NSRange vidRange = [modelID rangeOfString:@"VendorID_"];
int vid = [[modelID substringWithRange:NSMakeRange(vidRange.location + 9, 5)] intValue];

NSRange pidRange = [modelID rangeOfString:@"ProductID_"];
int vid = [[modelID substringWithRange:NSMakeRange(pidRange.location + 10, 5)] intValue];

然后我搜索一个匹配的IOService:

代码语言:javascript
复制
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
CFNumberRef numberRef;

numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vid);
CFDictionarySetValue(matchingDict, CFSTR(kUSBVendorID), numberRef);
CFRelease(numberRef);

numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &pid);
CFDictionarySetValue(matchingDict, CFSTR(kUSBProductID), numberRef);
CFRelease(numberRef);

io_service_t camera = IOServiceGetMatchingService(kIOMasterPortDefault, matchingDict);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 02:23:15

也许AVCaptureDevice modelIDuniqueID的结合可以帮助您找到匹配的IOService。这两个ID的格式看起来既没有文档,又依赖于传输和媒体类型,但是您应该能够找出一些东西。以下是基于两种设备的USB音频(因为我没有任何USB摄像头)的暂定映射:

代码语言:javascript
复制
modelID: USB Headphone Set:0C76:1607
uniqueID: AppleUSBAudioEngine:Unknown Manufacturer:USB Headphone Set:14200000:2,1,
    USB Headphone Set:

    Product ID: 0x1607
    Vendor ID:  0x0c76  (Solid State System Co., Ltd.)
Version:    1.00
Speed:  Up to 12 Mb/sec
    Location ID:    0x14200000 / 9
    Current Available (mA): 1000
    Current Required (mA):  100
    Extra Operating Current (mA):   0


uniqueID: AppleUSBAudioEngine:Burr-Brown from TI              :USB Audio CODEC :14200000:2,
modelID: USB Audio CODEC :08BB:2902
    USB Audio CODEC :

    Product ID: 0x2902
    Vendor ID:  0x08bb  (Texas Instruments Japan)
Version:    1.00
Speed:  Up to 12 Mb/sec
Manufacturer:   Burr-Brown from TI
    Location ID:    0x14200000 / 10
    Current Available (mA): 1000
    Current Required (mA):  100
    Extra Operating Current (mA):   0

(usb音频)格式类似于

代码语言:javascript
复制
modelID: name:vendorID:productID
uniqueID: AppleUSBAudioEngine:Manufacturer or Unknown Manufacturer:location ID:???

如果USB视频的uniqueID类似,那么productIDvendorIDlocationID (其中的USB端口)的组合应该足以唯一地识别底层设备的硬件,尽管其方式脆弱且无文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40006908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档