2013-10-15 38 views
1

我正在尝试做屏幕捕获和写入为视频文件。无法停止assetWriter finishWriting

assetWriterTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 
                target:self 
                selector:@selector (writeSample:) 
                userInfo:nil 
                repeats:YES] ; 

-(void) writeSample: (NSTimer*) _timer 
{ 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      //capture and save image to video 
     }); 
} 

要停止录制,我写

-(void) stopRecording 
{ 

[assetWriterTimer invalidate]; 
assetWriterTimer = nil; 
[assetWriterTimer release]; 

[assetWriter finishWritingWithCompletionHandler:^(){ 
    NSLog (@"finished writing completion handler"); 
}]; 

NSLog (@"finished writing"); 
} 

不过,我大多出现此错误和应用程序崩溃。我应该怎么做?
- [AVAssetWriter finishWriting]当状态为2时无法调用方法'

回答

1

您是否在某处调用[assetWriter startWriting]?

这个错误基本上意味着作者现在不是真的写作,所以它不能真正停止写作。如果你看过AVWriter's status codes的含义,你会发现2是完成写作的时候。

enum { 
AVAssetWriterStatusUnknown = 0, 
AVAssetWriterStatusWriting, 
AVAssetWriterStatusCompleted, 
AVAssetWriterStatusFailed, 
AVAssetWriterStatusCancelled 
}; 
+0

你的答案很棒。苹果公司聘请撒旦编写文档并创建他们的API和开发工具是一个虚伪。 'AVAssetWriterStatusUnknown'不仅仅意味着你所说的话,而且意味着与'AVAssetWriter'有关的任何与写入文件相关的东西,这个文件没有被初始化。想法是这样的:如果我们甚至不写作,我们如何完成写作?这个API的记录太糟糕了,并且认为这不应该成为崩溃的原因,而是在终点处理器内部发出警告,但撒旦在苹果内部运行该节目,所以,这是一场崩溃,并且没有你的汤 – SpaceDog