ios - GPUImageMovieWriter - 录制视频两端偶尔出现黑帧

标签 ios avfoundation gpuimage video-recording

我有录音应用程序实现,用户可以点击“录音”按钮开始/停止录音。我使用基本的 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];
        });

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

[movieWriter finishRecording];

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

最佳答案

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

关于ios - GPUImageMovieWriter - 录制视频两端偶尔出现黑帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370654/

相关文章:

iphone - Cocoa 基类的正确命名约定

ios - 以编程方式创建带有 subview 的 UIViewController

ios - 如何在 iOS 应用程序的相机中添加当前时间戳

ios - GPUImageView 的别名问题

iphone - 在推送 UINavigationController 时为 UIView 设置动画

ios - 自更新到 iOS 10.2 后几帧后无法在 GLKView 上绘制 CIImage?

iphone - 使用具有自定义尺寸的 AVFoundation 录制视频?

ios - iOS上的Accelerate框架可以用来画圆吗?

ios - 分组图像过滤器和链接图像过滤器之间的区别

ios - 无法使用 PEM 文件获取推送通知