使用 OpenCV 2.2 在不同线程中写入数百个 AVI 文件

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

我在 VC++ 下使用 OpenCV 2.2 编写应用程序。我从不同的网络流获取视频,并在单独的线程中逐帧写入 AVI 文件。视频流有数百个,我的应用程序正在将数百个文件写入磁盘,这是非常重的。有人可以建议我优化的方法吗?

multithreading visual-c++ avi
1个回答
0
投票

哦亲爱的。我希望你有足够的内存。

写入多个文件确实很痛苦。您能做的最好的事情就是通过尽可能合理地始终写入尽可能大的 AVI 帧块(最好是扇区大小的倍数)来减轻写入搜索。也许:

1)“FrameBuf”帧缓冲区类。在启动时创建 *FrameBuf 的垃圾负载,并将它们池化到生产者-消费者队列中。

2) 用于多个 *FrameBuf 实例的“FrameVec”容器类。您可能还需要汇集这些。

3) 用于将 *FrameVec 的内容写入磁盘系统的线程池。这将包含非常少的线程,可能只有一个,以便通过很少的寻道获得最佳的磁盘写入性能。最好使线程数量在运行时可配置/更改,以优化整体吞吐量。最好使其全部可配置 - *FrameBuf 池的深度、每个 *FrameVec 中 *FrameBuf 的数量 - 一切。

如果可能,请使用 SSD。如果系统有任何“安静”时间,它可以将累积的 avi 移动到大型旋转器或网络磁盘,以便为下一个“繁忙”时间释放 SSD。

移动各种实例时,请记住这些口头禅:

“堆栈对象、复制向量、任何没有*坏的模板类”,以及“指针、池、指针容器都很好”。

祝你好运..

© www.soinside.com 2019 - 2024. All rights reserved.