代码之家  ›  专栏  ›  技术社区  ›  Era

AVAssetReader不读取整个文件?

  •  3
  • Era  · 技术社区  · 15 年前

    我正在用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 回复  |  直到 15 年前
        1
  •  0
  •   Era    14 年前

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