2014-10-27 11 views
2

我想追加CMSampleBufferRefs到AVAssetWriterInput,我不斷收到崩潰與錯誤:在iPhone的iOS:[AVAssetWriterInput appendSampleBuffer:]不能調用方法時的狀態是0

[AVAssetWriterInput appendSampleBuffer:] Cannot call method when status is 0

代碼viewDidLoad中

NSArray *cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cacheDirectory = [cachePaths firstObject]; 
NSString *filename = @"test.mp4"; 
NSString *filePath = [cacheDirectory stringByAppendingPathComponent:filename]; 
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; 
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:filePath]; 


NSError *errors; 
assetWriter = [[AVAssetWriter alloc] initWithURL:outputURL fileType:(NSString *)kUTTypeMPEG4 error:&errors]; 
videoWriteInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:outputSettings]; 
audioWriteInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeAudio outputSettings:audioSettings]; 

[audioWriteInput addTrackAssociationWithTrackOfInput:videoWriteInput type:AVTrackAssociationTypeTimecode]; 
audioWriteInput.expectsMediaDataInRealTime = YES; 
videoWriteInput.expectsMediaDataInRealTime = YES; 

記錄功能

-(void)prepareVideo { 

    if (![assetWriter startWriting]) { 
    NSLog(@"%li, %@", assetWriter.status, assetWriter.error.localizedDescription); 

    } 


} 

-(void)recordVideo { 

    recordingVideo = YES; 
    [assetWriter startSessionAtSourceTime:kCMTimeZero]; 


} 

代表

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    if (recordingVideo) { 

    if ([captureOutput isKindOfClass:[AVCaptureVideoDataOutput class]]) { 
     if (assetWriter.status != 0) { 
      [videoWriteInput appendSampleBuffer:sampleBuffer]; 
     } 

    } 
    else if ([captureOutput isKindOfClass:[AVCaptureAudioDataOutput class]]) { 
     if (assetWriter.status != 0) { 
      [audioWriteInput appendSampleBuffer:sampleBuffer]; 
     } 

    } 

    } 

} 

的AVAssetWriter的狀態爲1,所以我知道這是不是

回答

0

你的assetwriterinput添加到assetwriter問題..? 通常你應該在viewdidload方法中做到這一點。

[self.assetWriter addInput:self.assetWriterInput]; 
+0

是的我添加了輸入。 – Zigglzworth 2014-11-17 09:23:14

相關問題