C++ Builder TVideoDeviceManager 获取多个网络摄像头的 VideoCaptureDevices

问题描述 投票:0回答:0

我有一个应用程序,我正在尝试使用 C++ Builder 11.1.5 从 2 个网络摄像头捕获实时视频。 有一个很好的教程,它描述了如何使用以下 URL 上的 1 个网络摄像头执行此操作,我让它工作得很好:
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Video_Capturing

在这个例子之后,我在窗体的 OnCreate 事件上使用以下代码,它存储了计算机上所有可用的捕获设备的信息:

NumbAvailableCameras = 0;

DeviceList = TCaptureDeviceManager::Current->GetDevicesByMediaType(TMediaType::Video);
for (i = 0; i < DeviceList->Count; i++) {
    UniqueID = DeviceList->Items[i]->UniqueID;
    UniqueDescription = DeviceList->Items[i]->Description;
    UniqueName = DeviceList->Items[i]->Name;
    ComboBox1->Items->Add(DeviceList->Items[i]->Name);
    AvailableCameraIndices[NumbAvailableCameras] = i;
    AvailableCameraNames[NumbAvailableCameras] = DeviceList->Items[i]->Name;
    AvailableCameraDescriptions[NumbAvailableCameras] = UniqueDescription;
    AvailableCameraIdentifiers[NumbAvailableCameras] = UniqueID;
    CameraIndex[i] = i;
    NumbAvailableCameras++;
    }

然后有一个按钮和 OnClick 事件允许启动捕获:

CAM1VideoCamera = dynamic_cast<TVideoCaptureDevice*>
     TCaptureDeviceManager::Current->GetDevicesByName(ComboBox1->Selected->Text));

现在我有 2 个名称相同的网络摄像头,因此 GetDevicesByName 例程不起作用,因为它会选择它找到的具有所选名称的第一个摄像头。 作为替代方案,我尝试了以下代码,但它为 CaptureDevice 返回 NULL:

CAM1VideoCamera = dynamic_cast<TVideoCaptureDevice*>
        (TCaptureDeviceManager::Current->Devices[CameraIndex[0]]);

关于如何正确执行此操作的任何想法?

c++ firemonkey c++builder video-capture
© www.soinside.com 2019 - 2024. All rights reserved.