为什么我在iOS上使用AVAssetReader时每秒只接收几个音频样本?

时间:2013-08-24 15:59:51

标签: ios audio avfoundation avassetwriter avassetreader

我正在编写一些内容:

  • 使用内置摄像头和麦克风录制视频+音频(AVCaptureSession),
  • 实时处理视频和音频samplebuffer的一些内容,
  • 使用AVAssetWritter
  • 将结果保存到本地.mp4文件中
  • 然后(稍后)使用AVAssetReader
  • 读取文件(视频+音频)
  • 使用samplebuffer做其他一些事情(现在我什么都不做),
  • 使用AVAssetWriter将结果写入最终视频文件。

一切运作良好,但我的音频格式存在问题:

当我从捕获会话中捕获音频样本时,我可以记录大约44个样本/秒,这些接缝是正常的。 当我读取.mp4文件时,我只记录3-5个音频样本/秒! 但是2个文件的外观和声音完全相同(在QuickTime中)。

  • 我没有为Capture Session设置任何音频设置(因为Apple不允许)。
  • 我配置了2个音频AVAssetWriterInput的outputSettings如下:

    NSDictionary *settings = @{
        AVFormatIDKey:@(kAudioFormatLinearPCM),
        AVNumberOfChannelsKey:@(2),
        AVSampleRateKey:@(44100.),
        AVLinearPCMBitDepthKey:@(16),
        AVLinearPCMIsNonInterleaved:@(NO),
        AVLinearPCMIsFloatKey:@(NO),
        AVLinearPCMIsBigEndianKey:@(NO)
    }; 
    
  • 我将nil传递给音频AVAssetReaderTrackOutput的outputSettings,以便接收存储在轨道中的样本(根据文档)。

因此,从CaptureSession到最终文件的采样率应为44100Hz。为什么我只阅读一些音频样本?为什么它仍在工作?我有直觉,当我必须处理样本时,它将无法正常工作(我需要更新其时间戳)。

我尝试了其他几种设置(例如kAudioFormatMPEG4AAC),但AVAssetReader无法读取压缩音频格式。

感谢您的帮助:)

0 个答案:

没有答案