Frage

Ich lese Audio-Assets aus der iPod-Bibliothek auf iOS mit einem AVAssetReader und AVAssetReaderTrackOutput. Allerdings, wenn ich die Daten lesen und die Stücke wieder zusammen, ist die Datei nicht genau das gleiche. Ein paar kB fehlen, und daher ist die Audio-Datei nicht wiedergegeben werden.

Hier ist der Code, den ich verwende, um die Audiodaten zu extrahieren

// Copy next audio samples
CMSampleBufferRef buffer = [[reader_.outputs objectAtIndex:0] copyNextSampleBuffer];

// Extract bytes from buffer
CMBlockBufferRef dataBuffer = CMSampleBufferGetDataBuffer(buffer);

size_t bufLen = CMBlockBufferGetDataLength(dataBuffer);
UInt8 buf[bufLen];

CMBlockBufferCopyDataBytes(dataBuffer, 0, bufLen, buf);

// Pass data to delegate
if ([delegate respondsToSelector:@selector(assetStream:hasDataAvailable:)]) {
    [delegate assetStream:self hasDataAvailable:[NSData dataWithBytes:buf length:bufLen]];
}

// Invalidate buffer
CMSampleBufferInvalidate(buffer);

Was mache ich hier falsch?

War es hilfreich?

Lösung

Ja ich richtig geraten. Die copyNextSampleBuffer tut auslassen der AAC-Header und damit die Media-Player-API die Datei nicht verarbeiten kann.

Sie können die Strombeschreibung mit anderen Methoden kopieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top