我正在尝试使用AVFoundation在我的iPhone应用程序中录制视频.但每当我单击"录制"按钮时,应用程序都会崩溃
- [AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] - 没有活动/启用的连接.
我知道同样的问题,但是它的答案都没有帮助我.我的问题是相同的代码完全适用于另一个应用程序,当我尝试在这个应用程序中使用完全相同的代码 - 崩溃.但仍然照片捕捉工作正常.
在这里添加我的代码 - 请帮助我,提前致谢
-(void)viewDidLoad { [super viewDidLoad]; self.captureSession = [[AVCaptureSession alloc] init]; AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; self.videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil]; self.audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:audioDevice error:nil]; self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; NSDictionary *stillImageOutputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil]; [self.stillImageOutput setOutputSettings:stillImageOutputSettings]; self.movieOutput = [[AVCaptureMovieFileOutput alloc] init]; [self.captureSession addInput:self.videoInput]; [self.captureSession addOutput:self.stillImageOutput]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; UIView *aView = self.view; previewLayer.frame = CGRectMake(70, 190, 270, 270); [aView.layer addSublayer:previewLayer]; } -(NSURL *) tempFileURL { NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"]; NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath]; NSFileManager *manager = [[NSFileManager alloc] init]; if ([manager fileExistsAtPath:outputPath]) { [manager removeItemAtPath:outputPath error:nil]; } return outputURL; } -(IBAction)capture:(id)sender { if (self.movieOutput.isRecording == YES) { [self.movieOutput stopRecording]; } else { [self.movieOutput startRecordingToOutputFileURL:[self tempFileURL] recordingDelegate:self]; } } -(void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error { BOOL recordedSuccessfully = YES; if ([error code] != noErr) { id value = [[error userInfo] objectForKey:AVErrorRecordingSuccessfullyFinishedKey]; if (value) recordedSuccessfully = [value boolValue]; NSLog(@"A problem occurred while recording: %@", error); } if (recordedSuccessfully) { ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL completionBlock:^(NSURL *assetURL, NSError *error) { UIAlertView *alert; if (!error) { alert = [[UIAlertView alloc] initWithTitle:@"Video Saved" message:@"The movie was successfully saved to you photos library" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; } else { alert = [[UIAlertView alloc] initWithTitle:@"Error Saving Video" message:@"The movie was not saved to you photos library" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; } [alert show]; } ]; } }
zvjerka24.. 10
我在更改videoDevice activeFormat时遇到了同样的问题,后来想要录制视频.因为我使用的是最优质的视频,所以我必须将sessionPreset设置为高,如下所示
_session.sessionPreset = AVCaptureSessionPresetHigh;
它对我有用!:)