使用动画UIView叠加从摄像机录制视频

时间:2016-06-29 19:56:06

标签: ios objective-c avfoundation

我目前使用AVCaptureVideoDataOutput设置了一个摄像机,其样本缓冲区委托的实现如下:

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
{
    NSArray *detectedFaces = [self detectFacesFromSampleBuffer:sampleBuffer];
    [self animateViewsForFaces:detectedFaces];
}

处理样本缓冲区,如果检测到任何面部,它们的边界将显示为显示实时视频输出(面部上的矩形)的AVCaptureVideoPreviewLayer上的视图。视图是动画的,以便它们在面部检测之间平滑移动。是否有可能以某种方式记录预览图层中显示的内容并将其与覆盖它的动画UIView合并,最终结果是视频文件?

1 个答案:

答案 0 :(得分:1)

通常,您可以使用低级方法制作视频流,然后将其写入文件。我不是视频格式,编解码器等方面的专家,但方法是:

- 为屏幕重绘的每一帧设置CADisplayLink以获取触发回调。也许好的决定是将帧间隔设置为2以将目标视频帧速率降低到~30 fps。

- 每次重新绘制屏幕时都需要snapshot预览图层和叠加层。

- 处理收集的图像:压缩一帧的每两个图像,然后从合并帧序列中制作视频流。我认为,iOS内置工具或多或少都可以做到这一点。

当然,分辨率和质量受限于层次'参数。如果您需要来自摄像头的原始视频流,则应捕获此流,然后直接在您捕获的视频帧中绘制叠加数据。