我正在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