我正在C++中开发一个屏幕录制实用程序。如何优化我的屏幕录制实用程序?
它基本上捕获桌面框架并创建一个AVI文件。该算法如下:
- 创建一个线程:在每秒
thScreenCapture
n倍(如5 fps)的this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);
捕获桌面。
obj->Capture();
在捕捉(),位图数据附加到AVI文件。
this->appendBitmapToAvi(this->avifile, bmp);
此实用程序还记录声音。因此,在thScreenCapture方法中,声音数据也被附加到avi文件。
问题是,当帧数超过6帧(这可以根据硬件配置而变化)每秒捕获时,帧和声音之间出现滞后。
我正在寻求解决方案来优化算法。一个解决方案可能会缓存内存中的帧,而不是将它们全部附加到avi文件中。但是这会使代码更复杂,因为我必须处理在不同线程中捕获的声音数据。
您建议如何增加该实用程序支持的fps值而不会失去同步?
你应该考虑directshow(见下面的答案)。它使用参考时钟和媒体帧的时间戳,以便同步音频和视频。虽然视频帧用于不连续的间隔,但音频帧的持续时间通常是可变的。 – 2010-09-20 12:34:19
使用DirectX。你是否已经增加了进程/线程的优先级?除此之外,使用一个线程捕获和预处理图像缓冲区,另一个线程来缩放和转换等等。您也可以检测处理器/内核的数量,并为每个内核产生一个线程来推迟处理。不幸的是,我对音频毫无头绪。 – jweyrich 2010-09-20 15:00:50