4

我有录制应用程序实现,用户可以点击“录制”按钮开始/停止录制。我通过将GPUImageVideoCamera输出设置为 aGPUImageView和a 的基本来实现这一点GPUImageMovieWriter

50% 的情况下,录制的剪辑会在两端出现一对(或单个)黑框,有时两者都有。实现相当简单,但无论如何都是这样。

gpuImageView = [[GPUImageView alloc] initWithFrame:cameraView.frame];
gpuImageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;

[cameraView addSubview:gpuImageView];

videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:(usingBackCamera) ? AVCaptureDevicePositionBack : AVCaptureDevicePositionFront];

[videoCamera addTarget:gpuImageView];
[videoCamera addTarget:movieWriter];
videoCamera.audioEncodingTarget = movieWriter;
[videoCamera startCameraCapture];

double delayToStartRecording = 0.5;
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC);
        dispatch_after(startTime, dispatch_get_main_queue(), ^(void){
            NSLog(@"Start recording");
            [movieWriter startRecording];
        });

然后使用以下命令停止录制(同时实时摄像机继续显示在GPUImageView.

[movieWriter finishRecording];

有没有其他人经历过这种情况和/或找到避免黑框的解决方案?我无法暂停/恢复相机拍摄,以确保无缝的用户体验。

4

1 回答 1

5

通常发生这种情况是因为队列在获取任何视频帧之前正在将音频写入文件。很难从您的实现中分辨出来,但是如果您确保写入文件的第一件事是视频帧并且在写入第一个视频帧之后才写入任何音频,那么您将不会有任何黑帧。

于 2014-10-30T14:47:22.827 回答