1

我正在编写以下代码:

  • 使用内置摄像头和麦克风(AVCaptureSession)录制视频+音频,
  • 实时使用视频和音频采样缓冲区做一些事情,
  • 使用 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 无法读取压缩音频格式。

谢谢你的帮助 :)

4

0 回答 0