AvassetReader não lê o arquivo inteiro?
-
28-09-2019 - |
Pergunta
Estou lendo ativos de áudio da biblioteca do iPod no iOS com um AvastetReader e AvasetReaderTrackOutput. No entanto, quando leio os dados e junte os pedaços novamente, o arquivo não é exatamente o mesmo. Alguns KB estão faltando e, portanto, o arquivo de áudio não será reproduzido.
Aqui está o código que eu uso para extrair os dados de áudio
// 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);
O que eu estou fazendo errado aqui?
Solução
Sim, eu adivinhei certo. o copyNextSampleBuffer
omita o cabeçalho AAC e, portanto, a API do Media Player não pode processar o arquivo.
Você pode copiar a descrição do fluxo com outros métodos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow