1

我正在使用 AVFoundation 框架并根据捕获视频实现并在我的视图上设置一个 previewLayer,显示输出大小为 640 x 480。我希望将视频裁剪到这一帧(这样用户就可以得到他们想要的在 UI 中作为输出查看),但我无法找到应该发生这种更改的点。

我想在捕获之前/期间而不是在用户拍摄视频之后裁剪视频,因为用户将在“向导”中拍摄多个视频,并且我试图限制步骤之间的时间。

这甚至可能吗?

这是捕获会话的设置代码:

AVCaptureSession *newCaptureSession = [[AVCaptureSession alloc] init];
newCaptureSession.sessionPreset = AVCaptureSessionPresetiFrame1280x720;


// Add inputs and output to the capture session
if ([newCaptureSession canAddInput:newVideoInput]) {
    [newCaptureSession addInput:newVideoInput];
}
if ([newCaptureSession canAddInput:newAudioInput]) {
    [newCaptureSession addInput:newAudioInput];
}
if ([newCaptureSession canAddOutput:newStillImageOutput]) {
    [newCaptureSession addOutput:newStillImageOutput];
}

[self setStillImageOutput:newStillImageOutput];
[self setVideoInput:newVideoInput];
[self setAudioInput:newAudioInput];
[self setSession:newCaptureSession];


// Set up the movie file output
NSURL *outputFileURL = [self tempFileURL];
AVCamRecorder *newRecorder = [[AVCamRecorder alloc] initWithSession:[self session] outputFileURL:outputFileURL];
[newRecorder setDelegate:self];

// Send an error to the delegate if video recording is unavailable
if (![newRecorder recordsVideo] && [newRecorder recordsAudio]) {
    NSString *localizedDescription = NSLocalizedString(@"Video recording unavailable", @"Video recording unavailable description");
    NSString *localizedFailureReason = NSLocalizedString(@"Movies recorded on this device will only contain audio. They will be accessible through iTunes file sharing.", @"Video recording unavailable failure reason");
    NSDictionary *errorDict = [NSDictionary dictionaryWithObjectsAndKeys:
                               localizedDescription, NSLocalizedDescriptionKey, 
                               localizedFailureReason, NSLocalizedFailureReasonErrorKey, 
                               nil];
    NSError *noVideoError = [NSError errorWithDomain:@"AVCam" code:0 userInfo:errorDict];
    if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) {
        [[self delegate] captureManager:self didFailWithError:noVideoError];
    }
}

[self setRecorder:newRecorder];

录像启动方法:

-(void)startRecordingWithOrientation:(AVCaptureVideoOrientation)videoOrientation;
{
    AVCaptureConnection *videoConnection = [AVCamUtilities     connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self movieFileOutput] connections]];

if ([videoConnection isVideoOrientationSupported])
    [videoConnection setVideoOrientation:videoOrientation];

[[self movieFileOutput] startRecordingToOutputFileURL:[self outputFileURL] recordingDelegate:self];
}
4

0 回答 0