2016-12-06 2 views
0

Ich schreibe eine Anwendung in Qt, die das Video-Streaming von einem Byte-Array ermöglicht. Als Videoausgangskomponente verwende ich QtAV (http://www.qtav.org/). In meinem Fall ist die Eingabe dieser Komponente ein QIODevice (QBuffer), wo ein QByteArray mit meinen Daten ist. Ich werde beim Streaming die Daten in das QByteArray legen, aber ich weiß nicht, wie ich die Daten, die ich gelesen habe, löschen kann. Mein Problem ist, dass nach einiger Zeit die Dimension von QByteArray sehr groß ist und ich nicht weiß, wie ich den zugewiesenen Speicher reduzieren kann.QtAV und Reinigung des Puffers

Danke

Angelo

Antwort

0

Sie einfach einen Verweis auf ein Byte-Array-Objekt aus dem Puffer mit der Methode
QByteArray &QBuffer::buffer() und dann löschen sie bekommen kann:

your_io_buffer.buffer().resize(0); 

Aber bitte beachten Das häufige Entfernen und Anhängen von Daten an ein dynamisches Array führt zu Speicherumverteilungen, was eine nicht so schnelle Operation ist. Deshalb empfehle ich die
void QByteArray::reserve(int size) Methode zu verwenden:

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

ich ein neues QIODevice erstellt, die das Bytes zu entfernen, die die AvPlayer gelesen hat. Das Problem ist, dass ich nicht alle Bytes entfernen kann, weil der AvPlayer 32k Bytes pro Zeit liest. ich danke Ihnen sehr für Ihre Antwort. –