通过EDSDK并行控制佳能相机

时间:2012-06-28 15:33:36

标签: c++ edsdk

我遇到了以下问题: 我有两台EOS550D相机连接到我的电脑。在我的计划中,我有 基于QThread的类,用于向摄像机发送命令。 区分两台摄像机没有问题,两者都可以控制, 但是命令是并行发送的 - 第二台摄像机只能开始工作 在第一次集中并完成拍摄之后。它是SDK限制还是我在做什么 有问题? 我知道,这个任务可以通过使用两个pc和客户端\服务器架构来完成,但我想在一台PC上试用它)

EDSDK和摄像机在控制类中初始化,摄像机会话在线程类对象中管理。 征集线程:

void CameraController::testShot()
{
//some variable checks and path set-ups
leftCameraThread->setPath(path1);
leftCameraThread->start();
rightCameraThread->setPath(path2);
rightCameraThread->start();
}

Thread run()函数:

void CameraControlThread::run()
{
EdsSendCommand(_camera, kEdsCameraCommand_TakePicture , 0);
}

EDSDK v2.10

4 个答案:

答案 0 :(得分:4)

您可以在SDK 2.11中控制多个摄像头。第26页

答案 1 :(得分:1)

阅读EDSDK文档,声明您一次只能打开一个会话,这是SDK限制(2.10,第25页)

答案 2 :(得分:1)

EDSDK文档(版本2.15,EDSDK_API.pdf,第2.10节)指出“请注意,EDSDK不支持同时打开多个摄像机的会话”

但这可能不正确,正如原始海报所说,OpenSession很可能有很多相机,发出命令,拍照,检索图像等。

OP的问题是关于同时触发多个摄像头。每次调用kEdsCameraCommand_TakePicture都会将触发器发送到一个摄像头,并且该调用需要一些时间。因此,如果您迭代所有摄像机并向每个摄像机发送kEdsCameraCommand_TakePicture,则摄像机将不会同步激活。例如,以16 EOS 1dx为例,拍摄所有图像需要4秒钟。 我还没有找到一种方法将触发器同时发送到SDK中的多个摄像头。 (任何人?)除了SDK中的软件限制外,可能无法通过USB连接实现完美同步。 在多台摄像机上实现同步的推荐方法是在摄像机的触发连接器上使用外部同步信号。

答案 3 :(得分:1)

然而这个问题有点陈旧,我找到了一次控制多个摄像头的解决方案,限制只是在单个过程中控制多个摄像头,但它可以控制多个摄像头。来自多个进程(每个进程一个摄像头)。