我正在编写以下代码:
- 使用内置摄像头和麦克风(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 无法读取压缩音频格式。
谢谢你的帮助 :)