AVAssetReader不读取整个文件?

时间:2010-11-01 17:30:53

标签: objective-c cocoa-touch ios avfoundation

我正在使用AVAssetReader和AVAssetReaderTrackOutput从iOS上的iPod库中读取音频资源。但是,当我读取数据并将块重新组合在一起时,文件并不完全相同。缺少几个kB,因此音频文件将无法播放。

这是我用来提取音频数据的代码

// 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);

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

是的,我猜对了。 copyNextSampleBuffer确实省略了AAC标头,因此媒体播放器API无法处理该文件。

您可以使用其他方法复制流描述。