2016-12-06 143 views
0

我在Qt中編寫了一個應用程序,允許從一個字節數組進行視頻流傳輸。 作爲視頻輸出組件,我正在使用QtAV(http://www.qtav.org/)。 在我的情況下,這個組件的輸入是一個QIODevice(QBuffer),其中有一個QByteArray和我的數據。 我將在QByteArray中傳輸數據的過程中,但我不知道如何刪除我尚未閱讀的數據。 我的問題是,經過一段時間,QByteArray的維度非常巨大,我不知道如何減少分配的內存。QtAV和清理緩衝區

謝謝

安傑洛

回答

0

您可以使用方法簡單地得到從你的緩衝區的字節數組對象的引用
QByteArray &QBuffer::buffer(),然後刪除它:

your_io_buffer.buffer().resize(0); 

但請注意經常刪除並將數據附加到動態數組會導致內存重新分配,這不是很快的操作。因此,我建議使用
void QByteArray::reserve(int size)方法:

QByteArray buf; 
buf.reserve(100000); 
//... 
your_io_buffer.setBuffer(&buf); 
//... 
+0

我創建了一個新的QIODevice是刪除了AvPlayer已經閱讀字節。問題是我無法刪除所有字節,因爲AvPlayer每次讀取32k字節。非常感謝您的回答。 –