我正在使用 AVAssetWriter 在 iOS 上录制实时视频,如 RosyWriter 中所示。我遇到的问题是,如果我将 AVAudioSession preferredSampleRate 设置为 48000 Hz,它会带来很多麻烦,例如音频与视频不同步。有没有办法在 AVAudioSession 上使用默认采样率(44100 Hz),但是在使用 AVAssetWriter 录制时使用 48000 Hz 而不会导致任何同步问题?
编辑:我发现问题是在 RIO 单元的渲染回调中返回的帧数乘以 1/48000 不等于 AVAudioSession 的 ioduration。44100 KHz 的情况并非如此。我依靠此代码进行计时。这是音频与视频不同步的原因。
CMSampleTimingInfo timing = { CMTimeMake(1, sampleRate), presentationTime, kCMTimeInvalid };
OSStatus error = CMSampleBufferCreate(kCFAllocatorDefault, NULL, false, NULL, NULL, controller->mFormatDesc, inNumberOfFrames, 1, &timing, 0, NULL, &buff);
CMSampleBufferSetDataBufferFromAudioBufferList(buff, kCFAllocatorDefault, kCFAllocatorDefault, 0, audioBufferList);