2013-06-18 28 views
1

你好,我試圖使用AVFoundation框架來使屏幕記錄。 而我有兩個問題: 1)按下按鈕後錄製開始延遲。 2)如果我插入斷點拋出所有的異常也感到迷惑:AVFoundation screenRecording issue

[session startRunning]; 

的代碼:

-(void)initAVRecord{ 
    session = [[AVCaptureSession alloc]init]; 
    if ([session canSetSessionPreset:AVCaptureSessionPresetHigh]){ 
     session.sessionPreset = AVCaptureSessionPresetHigh; 
    } 
    display = CGMainDisplayID(); 
    captureScreenInput = [[AVCaptureScreenInput alloc]initWithDisplayID:display]; 
    if ([session canAddInput:captureScreenInput]){ 
     [session addInput:captureScreenInput]; 
     NSLog(@"screen device added to session "); 
    }else{ 
     NSLog(@"no screen device added to session"); 
    } 

    audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; 
    NSError *error; 
    captureAudioInput = [[AVCaptureDeviceInput alloc]initWithDevice:audioDevice error:&error]; 
    if ([session canAddInput:captureAudioInput]){ 
     [session addInput:captureAudioInput]; 
     NSLog(@"audio device added to session "); 
    }else{ 
     NSLog(@" no audio device added"); 
    } 

    movieOutput = [[AVCaptureMovieFileOutput alloc]init]; 
    [movieOutput setDelegate:self]; 
    if ([session canAddOutput:movieOutput]){ 
     [session addOutput:movieOutput]; 
    } 
    [session startRunning]; 
} 


- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error 
{ 
    [[NSWorkspace sharedWorkspace] openURL:outputFileURL]; 
} 

-(BOOL)captureOutputShouldProvideSampleAccurateRecordingStart:(AVCaptureOutput *)captureOutput{ 
    return NO; 
} 



- (IBAction)recordButton:(id)sender { 
    if ([[recordButton title] isEqualToString:@"Record"]){ 
     [recordButton setTitle:@"Stop"]; 
     NSLog(@"Minimum Frame Duration: %f, Crop Rect: %@, Scale Factor: %f, Capture Mouse Clicks: %@, Capture Mouse Cursor: %@, Remove Duplicate Frames: %@", 
       CMTimeGetSeconds([self.captureScreenInput minFrameDuration]), 
       NSStringFromRect(NSRectFromCGRect([self.captureScreenInput cropRect])), 
       [self.captureScreenInput scaleFactor], 
       [self.captureScreenInput capturesMouseClicks] ? @"Yes" : @"No", 
       [self.captureScreenInput capturesCursor] ? @"Yes" : @"No", 
       [self.captureScreenInput removesDuplicateFrames] ? @"Yes" : @"No"); 
     char *tempNameBytes = tempnam([[@"~/Desktop/" stringByStandardizingPath]fileSystemRepresentation],"screenRec1_"); 
     NSString *tempName = [[NSString alloc]initWithBytesNoCopy:tempNameBytes length:strlen(tempNameBytes) encoding:NSUTF8StringEncoding freeWhenDone:YES]; 
     [movieOutput startRecordingToOutputFileURL:[NSURL fileURLWithPath:[tempName stringByAppendingPathExtension:@"mov"]] recordingDelegate:self]; 

    }else if ([[recordButton title] isEqualToString:@"Stop"]){ 
     [recordButton setTitle:@"Record"]; 
     [movieOutput stopRecording]; 
    } 

} 

有人可以告訴我什麼,我做錯了什麼?

+0

你有沒有想出解決辦法? –

回答