我目前有一台摄像机设置了一个 AVCaptureVideoDataOutput
,其示例缓冲区委托(delegate)是这样实现的:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
NSArray *detectedFaces = [self detectFacesFromSampleBuffer:sampleBuffer];
[self animateViewsForFaces:detectedFaces];
}
样本缓冲区被处理,如果检测到任何面孔,它们的边界将显示为 AVCaptureVideoPreviewLayer
的 View ,该层显示实时视频输出(面孔上方的矩形)。 View 是动画的,因此它们在面部检测之间平滑移动。是否有可能以某种方式记录预览层中显示的内容并将其与覆盖它的动画 UIView
合并,最终结果是一个视频文件?
最佳答案
通常,您可以使用低级方法制作视频流,然后将其写入文件。我不是视频格式、编解码器等方面的专家,但方法是:
— 设置 CADisplayLink用于在屏幕重绘的每一帧触发回调。也许好的决定是将帧间隔设置为 2,以将目标视频帧速率降低到 ~30 fps。
— 每次屏幕重绘需要一个 snapshot预览层和叠加层。
— 处理收集的图像:压缩一帧的每两个图像,然后从合并的帧序列中制作视频流。我假设,iOS 具有内置工具,可或多或少地以简单的方式执行此操作。
当然,分辨率和质量受图层参数的限制。如果您需要来自相机的原始视频流,您应该捕获该流,然后直接在您捕获的视频帧中绘制叠加数据。
关于ios - 使用动画 UIView 覆盖从相机录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38108956/