具有多个输出的AVCaptureSession?
目前,我正在开发一个iOS应用程序,将CoreImage应用于相机Feed,以便拍摄照片和video,而且我遇到了一些麻烦。
到目前为止,我一直使用AVCaptureVideoDataOutput来获取示例缓冲区,并使用CoreImage来操作它们,然后显示一个简单的预览,并用它来捕捉照片并保存它们。
当我尝试实现video录制时,通过将SampleBuffers写入video(从AVCaptureVideoDataOutput接收video),帧速率非常低(可能是因为正在进行的其他图像相关处理)。
所以我想知道,是否有可能同时有一个AVCaptureVideoDataOutput和一个AVCaptureMoveFileOutput在同一个AVCaptureSession?
我快速地去了一下,发现当我添加额外的输出时,我的AVCaptureVideoDataOutput停止接收信息。
如果我能得到它的工作,我希望这意味着我可以简单地使用第二个输出以高帧率录制video,并在用户停止录制后对video进行后期处理。
任何帮助将不胜感激。
这比你想象的要容易。
请参阅: AVCamDemo
- 使用AVCaptureVideoDataOutput捕获数据。
- 录制前创build一个新的分发队列,例如。 recordingQueue:
recordingQueue = dispatch_queue_create("Movie Recording Queue", DISPATCH_QUEUE_SERIAL);
-
在captureOutput:didOutputSampleBuffer:fromConnection:delegate方法中,捕获samplebuffer并保留它,然后在logging队列中将其写入文件:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CFRetain(sampleBuffer); dispatch_async(recordingQueue, ^{ if (assetWriter) { if (connection == videoConnection) { [self writeSampleBuffer:sampleBuffer ofType:AVMediaTypeVideo]; } else if (connection == audioConnection) { [self writeSampleBuffer:sampleBuffer ofType:AVMediaTypeAudio]; } } CFRelease(sampleBuffer); }); } - (void) writeSampleBuffer:(CMSampleBufferRef)sampleBuffer ofType:(NSString *)mediaType { CMTime presentationTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); if ( assetWriter.status == AVAssetWriterStatusUnknown ) { if ([assetWriter startWriting]) { [assetWriter startSessionAtSourceTime:presentationTime]; } else { NSLog(@"Error writing initial buffer"); } } if ( assetWriter.status == AVAssetWriterStatusWriting ) { if (mediaType == AVMediaTypeVideo) { if (assetWriterVideoIn.readyForMoreMediaData) { if (![assetWriterVideoIn appendSampleBuffer:sampleBuffer]) { NSLog(@"Error writing video buffer"); } } } else if (mediaType == AVMediaTypeAudio) { if (assetWriterAudioIn.readyForMoreMediaData) { if (![assetWriterAudioIn appendSampleBuffer:sampleBuffer]) { NSLog(@"Error writing audio buffer"); } } } } }
- 录制video/audio时播放系统声音
- 如何在iOS 9中通过幻灯片和拆分视图使用AVCaptureSession?
- 为什么我的audioAVCaptureConnection不能用于最高分辨率格式?
- iOS 8 iPad AVCaptureMovieFileOutput在录制13 – 14秒后丢失/丢失/从未获取音轨
- AVCaptureVideoPreviewLayer(相机预览)冻结/卡住移动到后台和后退
- iOS 7 AVCaptureMetadataOutput委托(QRCode扫描器)
- 如何在不使用预设的情况下在iOS上录制video?
- find设备的相机分辨率的方法iOS
- AVCaptureDevice相机变焦