AVAssetReader non legge tutto il file?
-
28-09-2019 - |
Domanda
Sto leggendo le risorse audio dalla libreria iPod su iOS con un'AVAssetReader e AVAssetReaderTrackOutput. Tuttavia, quando ho letto i dati e mettere i pezzi di nuovo insieme, il file non è esattamente la stessa. A pochi kB mancano, e quindi il file audio non vengono riprodotti.
Ecco il codice che uso per estrarre i dati audio
// 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);
Che cosa sto facendo male qui?
Soluzione
Sì ho indovinato. Il copyNextSampleBuffer
fa omettere l'intestazione AAC, e quindi il lettore multimediale API non può elaborare il file.
E 'possibile copiare la descrizione ruscello con altri metodi.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow