gpt4 book ai didi

c++ - 如何在 Mac OS 上获取视频捕获设备(网络摄像头)列表? (C++)

转载 作者:太空狗 更新时间:2023-10-29 21:07:43 24 4
gpt4 key购买 nike

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

1) Asus Web Camera
2) Sony Web Camera

所以这看起来很简单,但我有一个要求 - 尽可能多地使用 native 操作系统 api - 没有外部库 - 毕竟 - 我们想要的只是打印出一个列表 - 而不是飞上月球!)(和请不要使用 Objective-C - 纯 C/C++)

如何做这样的事情?


同样来自这个系列:

最佳答案

您需要使用 SGGetChannelDeviceList,它是 QuickTime C API 的一部分。每个设备可以有多个输入。正确的解析方式是这样的:

    // first get a video channel from the sequence grabber

ComponentDescription theDesc;
Component sgCompID;
ComponentResult result;
theDesc.componentType = SeqGrabComponentType;
theDesc.componentSubType = 0L;
theDesc.componentManufacturer = 'appl';
theDesc.componentFlags = 0L;
theDesc.componentFlagsMask = 0L;
sgCompID = FindNextComponent (NULL, &theDesc);
seqGrabber = OpenComponent (sgCompID);
result = SGInitialize (seqGrabber);
result = SGNewChannel (seqGrabber, VideoMediaType, &videoChannel);
SGDeviceList theDevices;
SGGetChannelDeviceList(videoChannel, sgDeviceListDontCheckAvailability | sgDeviceListIncludeInputs, &theDevices);

if (theDevices)
{
int theDeviceIndex;
for (theDeviceIndex = 0; theDeviceIndex != (*theDevices)->count; ++theDeviceIndex)
{
SGDeviceName theDeviceEntry = (*theDevices)->entry[theDeviceIndex];
// name of device is a pstring in theDeviceEntry.name

SGDeviceInputList theInputs = theDeviceEntry.inputs;
if (theInputs != NULL)
{
int theInputIndex;
for ( theInputIndex = 0; theInputIndex != (*theInputs)->count; ++theInputIndex)
{
SGDeviceInputName theInput = (*theInputs)->entry[theInputIndex];
// name of input is a pstring in theInput.name
}
}
}
}

关于c++ - 如何在 Mac OS 上获取视频捕获设备(网络摄像头)列表? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com