我目前正在重新编程(编程)OpenCV的pvapi驱动程序,我无法实现流式传输多个摄像头。当我使用单个相机时,即使在最大分辨率下,一切都能正常工作,但是当我使用两个相机时,它甚至不能使用640x480分辨率(1600x1200是最大的,它在我的网络设置上工作正常,因此2次640x480'导致带宽问题。我在样本查看器中检查了它并且它可以正常工作。)
当我使用多台相机时,它只会更新图像的一小部分,并停止等待图像完成。
摄像机在图像中间设置为Bgr24和ROI为640x480,PacketSize设置为4096,其他所有设置均为默认设置。 它们通过千兆以太网交换机连接,该交换机也以千兆速度连接到PC。该程序只是查询图像并将它们放在屏幕上。我试过线程。它有助于两个流之间的延迟,但不能解决问题。
我做错了什么?
我使用此代码检索新框架:
int LastIndex = Index - 1;
if(LastIndex == -1) LastIndex = FRAMESCOUNT - 1;
while((Errcode = PvCaptureWaitForFrameDone(Camera.Handle,&(Camera.Frame[Index]), 2000)) != ePvErrSuccess)
printf("\nCam[%ul]: Waiting for frame to return to host... %u\n", Camera.UID, Errcode);
// if frame hasn't been cancelled, requeue frame
if(Camera.Frame[Index].Status != ePvErrCancelled)
{
//Check for gaps in FrameCount due to image returning from camera with no frame queued.
//This should never happen, as we use a multiple frame circular buffer.
if(Last + 1 != Camera.Frame[Index].FrameCount)
{
printf("missing frame");
}
Last = Camera.Frame[Index].FrameCount;
frame->imageData = (char*) Camera.Frame[Index].ImageBuffer;
//Requeue [Index] frame of FRAMESCOUNT num frames
if ((Errcode = PvCaptureQueueFrame(Camera.Handle,&(Camera.Frame[LastIndex]),NULL)) != ePvErrSuccess)
{
printf("Cam[%ul]: PvCaptureQueueFrame err %u\n", Camera.UID, Errcode);
}
//Increment [Index]
Index++;
if(Index==FRAMESCOUNT)
Index = 0;
return true;
}
else
{
return false;
}