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?

Foi útil?

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
scroll top