美文网首页ARKitAR/VR/MRiOS开发攻城狮的集散地
iOS ARKit录制视频(AVAssetWriter &

iOS ARKit录制视频(AVAssetWriter &

作者: 小沛2016 | 来源:发表于2017-12-13 17:49 被阅读327次

思路

1.开启CADisplayLink 定时器来录制视频  CADisplayLink 刷新频率比- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame方法要快 而且更加符合需求
2.在录制视频的第一帧的时候开始录制音频

注意

在Info.plist文件里加入下面2个key

NSMicrophoneUsageDescription

NSPhotoLibraryAddUsageDescription

麦克风和相册权限打开

Untitled.gif

代码

相关文章

网友评论

  • 7965f47b74d9:我也在学习中,非常感谢楼主代码,
    不过可以直接用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);
    }
    });
    }
    这样就有声音了,刚从坑里爬出来。。。
    小沛2016:@默默搬砖 可以可以
  • 9a957efaf40a:楼主用AVAssetReader和writer直接写入音频加视频可行吗?
    小沛2016:可行 你试试

本文标题:iOS ARKit录制视频(AVAssetWriter &

本文链接:https://www.haomeiwen.com/subject/jyjzixtx.html