思路
1.开启CADisplayLink 定时器来录制视频 CADisplayLink 刷新频率比- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame方法要快 而且更加符合需求
2.在录制视频的第一帧的时候开始录制音频
注意
在Info.plist文件里加入下面2个key
NSMicrophoneUsageDescription
NSPhotoLibraryAddUsageDescription
麦克风和相册权限打开

网友评论
不过可以直接用AVCaptureSession录音频,然后用AVAssetWriter一边写视频一边写音频,这里有个小坑,writer的时间startSessionAtSourceTime设置不对的话是没有声音的,可以在得到第一帧音频buffer的时候start writer,同时设置时间,像这样:
- (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
if (self.firstSample) {
self.firstSample = NO;
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
if ([self.assetWriter startWriting]) {
[self.assetWriter startSessionAtSourceTime:timestamp];
self.isRecording = YES;
} else {
self.isRecording = NO;
NSLog(@"assetWriter start failure! %@",[self.assetWriter.error localizedDescription]);
}
} else if (self.audioInput.isReadyForMoreMediaData) {
if (![self.audioInput appendSampleBuffer:sampleBuffer]) {
NSLog(@"Error appending audio sample buffer.");
}
}
}
然后写视频的时候这样设置时间:
- (void)renderFrame
{
__weak WXHARRecorder *weakSelf= self;
dispatch_sync(self.writerQueue, ^{
if (weakSelf.videoInput.isReadyForMoreMediaData) {
CMTime time = CMTimeMakeWithSeconds(CACurrentMediaTime(), 1000);
CVPixelBufferRef buffer = [weakSelf capturePixelBuffer];
[weakSelf.pixelBufferAdaptor appendPixelBuffer:buffer withPresentationTime:time];
CVPixelBufferRelease(buffer);
}
});
}
这样就有声音了,刚从坑里爬出来。。。