在使用 AVCaptureMovieFileOutput 保存之前修改 AVCaptureSession
Posted
技术标签:
【中文标题】在使用 AVCaptureMovieFileOutput 保存之前修改 AVCaptureSession【英文标题】:Modify AVCaptureSession before saving with AVCaptureMovieFileOutput 【发布时间】:2012-06-22 15:55:52 【问题描述】:用例:我想捕获来自相机的输入,在捕获的帧(和声音)之上绘制并将结果保存为 .mov 文件。
我发现我可以使用 AVCaptureSession 为摄像头捕获输入。 我可以使用 AVCaptureMovieFileOutput 将其保存到 .mov 文件中。 AVVideoComposition 可用于添加核心动画以进行播放。我也想以某种方式录制?问题:在将输入保存到文件之前,我看不到如何修改它。
【问题讨论】:
【参考方案1】:RosyWriter 几乎在做我想做的事。将以下代码添加到 captureOutput:didOutputSampleBuffer:fromConnection: 使我能够使用 Quartz 绘制到框架上。
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pixelBuffer);
NSParameterAssert(pxdata != NULL);
CGSize frameSize = CGSizeMake(self.videoDimensions.width, self.videoDimensions.height);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
frameSize.height, 8, 4*frameSize.width, rgbColorSpace,
kCGImageAlphaNoneSkipFirst);
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 200, 200);
CGContextDrawPath(context, kCGPathStroke);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);
【讨论】:
【参考方案2】:AVCaptureMovieFileOutput
不允许您处理捕获的帧。为此,请将其替换为 AVCaptureVideoDataOutput
,并使用 AVAssetWriter
将输入编码为 .mov 文件。
至于AVVideoComposition
,我认为您可能需要使用AVAssetExportSession
在单独的通道中应用它。
【讨论】:
以上是关于在使用 AVCaptureMovieFileOutput 保存之前修改 AVCaptureSession的主要内容,如果未能解决你的问题,请参考以下文章
为啥在使用 unicode 时我不能在 :before :after 内容之后使用空格
在哪里使用 callable 以及在哪里使用 Runnable Interface?
在 Observable RxSwift 中使用 'asPromise()' 可以在 PromiseKit Promise 中使用吗?
可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用
使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告