Rob*_*Rob 9 avfoundation grand-central-dispatch avassetwriter ios6
一个多星期以来,我一直在努力解决这个问题.我希望有人看到我做错了什么.我试图使用finishWritingWithCompletionHandler:方法,因为现在不推荐使用finishWriting方法.我没有使用新方法取得任何成功.它失败,出现未知错误-11800.我可以使用过时的方法精细救我的MOV文件,但是当我用新的方法来创建等同失败每次.
这是我的原始代码:
dispatch_async(movieWritingQueue, ^{
if ([self.assetWriter finishWriting]) {
self.assetWriterAudioIn = nil;
self.assetWriterVideoIn = nil;
//[assetWriter release]; ARC will not allow this line.
self.assetWriter = nil;
self.readyToRecordVideo = NO;
self.readyToRecordAudio = NO;
[self.delegate movieReadyToSaveForMovieProcessor:self];
}
else {
[self displayError:[assetWriter error]];
dispatch_async(dispatch_get_main_queue(), ^{
[self resumeCaptureSession];
});
}
}];
Run Code Online (Sandbox Code Playgroud)
我的新方法如下:
dispatch_async(movieWritingQueue, ^{
[self.assetWriter finishWritingWithCompletionHandler:^{
if (self.assetWriter.status != AVAssetWriterStatusFailed && self.assetWriter.status == AVAssetWriterStatusCompleted) {
self.assetWriterAudioIn = nil;
self.assetWriterVideoIn = nil;
self.assetWriter = nil;
self.readyToRecordAudio = NO;
self.readyToRecordVideo = NO;
[self.delegate movieReadyToSaveForMovieProcessor:self];
} else {
[self displayError:self.assetWriter.error];
dispatch_async(dispatch_get_main_queue(), ^{
[self resumeCaptureSession];
});
}
}];
}];
Run Code Online (Sandbox Code Playgroud)
我不认为我错过任何东西,而且我从它抛出的错误中得不到多少.任何帮助将不胜感激.
谢谢,罗布
Rob*_*Rob 22
我终于找到了答案.将finishWritingWithCompletionHandler:是失败的,因为我没有运行markAsFinished的AVAssetWriterInput对象.有一次,我跑了markAsFinished方法之前的finishWritingWithCompletionHandler:,这个过程能够无差错完成.
Kha*_*yen 11
我有类似的问题,发现处理程序没有被调用,因为我AVAssetWriter在调用后立即释放finishWritingWithCompletionHandler:,例如
[self.assetWriter finishWritingWithCompletionHandler:^{
...
}]
self.assetWriter = nil;
Run Code Online (Sandbox Code Playgroud)
要修复它,只需将释放线移动到完成处理程序内:
[self.assetWriter finishWritingWithCompletionHandler:^{
...
self.assetWriter = nil;
}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10253 次 |
| 最近记录: |