QtAV和清理缓冲区

时间:2016-12-06 20:39:57

标签: c++ qt qbytearray qiodevice qbuffer

我正在Qt中编写一个允许来自字节数组的视频流的应用程序。 作为视频输出组件,我正在使用QtAV(http://www.qtav.org/)。 在我的例子中,这个组件的输入是一个QIODevice(QBuffer),其中有一个QByteArray和我的数据。 我将在流式传输期间放入QByteArray中的数据,但我不知道如何删除我还没读过的数据。 我的问题是,经过一段时间后,QByteArray的维度非常大,我不知道如何减少分配的内存。

谢谢

安吉洛

1 个答案:

答案 0 :(得分: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);
//...