【问题标题】:QtAV and cleaning of the bufferQtAV 和缓冲区的清理
【发布时间】:2017-04-21 15:05:03
【问题描述】:

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

谢谢

安杰洛

【问题讨论】:

    标签: c++ qt qbytearray qiodevice qbuffer


    【解决方案1】:

    您可以简单地使用
    QByteArray &QBuffer::buffer() 方法从缓冲区中获取对字节数组对象的引用,然后将其擦除:

    your_io_buffer.buffer().resize(0);
    

    但请注意,频繁删除和追加数据到动态数组会导致内存重新分配,这不是那么快的操作。因此我推荐使用
    void QByteArray::reserve(int size)方法:

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

    【讨论】:

    • 我创建了一个新的 QIODevice 来删除 AvPlayer 已读取的字节。问题是我无法删除所有字节,因为 AvPlayer 每次读取 32k 字节。非常感谢您的回答。
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多