3

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

私はここで何が間違っているのですか?

4

1 に答える 1

0

うん、私は正しいと思いました。はcopyNextSampleBufferAACヘッダーを省略しているため、メディアプレーヤーAPIはファイルを処理できません。

他の方法でストリームの説明をコピーできます。

于 2010-11-06T00:45:39.287 に答える