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

1. 低延时采集简介

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 有对低延时采集的调用示范。