GPUImageMovieWriter - 录制视频两端偶尔会出现黑框

Zak*_*eem 4 avfoundation video-recording ios gpuimage

我有录制应用程序实现,用户可以点击"录制"按钮开始/停止录制.我有一个基本的实现这一目标GPUImageVideoCamera具有输出设置为一个GPUImageView,以及一个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];
        });
Run Code Online (Sandbox Code Playgroud)

然后使用以下内容停止录制(同时现场摄像机继续显示GPUImageView.

[movieWriter finishRecording];
Run Code Online (Sandbox Code Playgroud)

有没有其他人经历过这个和/或找到了避免黑框的解决方案?我无法暂停/恢复摄像头捕获,以确保无缝的用户体验.

tan*_*sk1 5

通常情况下,这是因为队列在获取任何视频帧之前将音频写入文件.很难从你的实现中看出来,但如果你确定你写入文件的第一件事是视频帧,并且在写完第一个视频帧之前不写任何音频,你就不会有任何黑帧.