我正在用 C++ 开发一个截屏实用程序。
它基本上捕获桌面帧并创建一个 AVI 文件。算法如下:
- 创建一个线程:
this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);
thScreenCapture
以每秒 n 次(如 5 fps)捕获桌面。obj->Capture();
在 Capture() 中,将位图数据附加到 avi 文件。
this->appendBitmapToAvi(this->avifile, bmp);
该实用程序还记录声音。因此,在方法 thScreenCapture 中,声音数据也被附加到 avi 文件中。
问题是当每秒捕获超过 6 帧(这可能会根据硬件配置而变化)时,帧和声音之间会出现延迟。
我正在寻找优化算法的解决方案。一种解决方案可能是在内存中缓冲帧,而不是即时将它们全部附加到 avi 文件中。但这使代码更加复杂,因为我必须处理在不同线程中捕获的声音数据。
您有什么建议可以增加此实用程序支持的 fps 值而不会丢失同步?