如何实现低延时视频数据采集

1. 低延时采集简介

  • 所有 Pro Capture 系列采集设备都是支持低延时采集,USB Capture 系列和第一代采集设备不支持
  • 采集延时:从信号输入完成到图像传输到目标内存所用到的时间
  • 总延时:一帧图像从信号输入开始,到图像传输到目标内存所用到的时间
  • 低延时模式采集:将信号输入和数据传输同时进行,通过降低采集延时从而大大降低整帧图像的采集时间

2. MWCapture SDK 中低延时采集的实现方法

MWOpenChannel() → CreateEvent() → MWRegisterNotify() → MWStartVideoCapture() → WaitForSingleObject() → MWGetNotifyStatus() → MWCaptureVideoFrameToVirtualAddressEx() → WaitForSingleObject() → MWGetVideoCaptureStatus()

3. 实现方法中,与常规模式采集的不同之处有以下几点

  1. 采集方式只能选择按照输入源帧率采集
  2. MWRegisterNotify() 注册通知事件对象时候,通知类型掩码要选择 MWCAP_NOTIFY_VIDEO_FRAME_BUFFERING ,表明当输入帧开始向板载内存缓存时就可以通知开始采集视频数据了
  3. MWCaptureVideoFrameToVirtualAddressEx() 中 iFrame (视频帧序号)选择视频缓冲信息结构体 MWCAP_VIDEO_BUFFER_INFO 中 iNewestBuffering,表示要采集正在缓存的帧序号; 同时 cyParitalNotify 设置为64 / 128 / 256 等值,表明板载内存缓冲了相应行数的视频数据之后就可以开始 DMA 传输;
  4. 常规模式中,一帧数据在 DMA 结束后 WaitForSingleObject() 会获取通知状态变化,但是低延时模式中当 cyParitalNotify 行数据 DMA 传输完成后就会通知状态变化,WaitForSingleObject() 就会监听到事件响应,所以必须获取 MWGetVideoCaptureStatus() 中状态值 bFrameCompleted 为TRUE,此时一帧数据才完成 DMA 传输;

WaitForSingleObject() 就会监听到事件响应,所以必须获取 MWGetVideoCaptureStatus() 中状态值 bFrameCompleted 为TRUE,此时一帧数据才完成 DMA 传输;

综上,低延时模式通过采集卡采集部分行数据后就开始向目标内存进行 DMA 传输,从而降低了采集延时,同时使用部分完成通知模式,使得应用程序可以及时对这部分数据进行处理, 让信号输入、数据传输、数据处理这三部分操作可以同步进行,这样达到最低的延时效果。

注意:启用低延时采集会独占一个传输通道,而 Pro Capture 系列的每个采集通道只拥有 2 个传输通道,因此,对于一个采集通道需要同时采集 3 路或者 3 路以上的视频流时,请谨慎使用低延时采集模式,以免降低其他视频流的传输效率。

示例 Examples\Applications\LowLatency 有对低延时采集的调用示范。

联系人