2016-12-06 6 views
0

Я пишу приложение в Qt, которое позволяет потоковое видео из массива байтов. В качестве компонента вывода видео я использую QtAV (http://www.qtav.org/). В моем случае вход этого компонента является QIODevice (QBuffer), где QByteArray с моими данными. Я положу во время потоковой передачи данных внутри QByteArray, но я не знаю, как удалить данные, которые я еще прочитал. Моя проблема в том, что через некоторое время размер QByteArray очень велик, и я не знаю, как уменьшить выделенную память.QtAV и очистка буфера

Спасибо

Angelo

ответ

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 читает 32 байта за время. Большое спасибо за ваш ответ. –