AVAssetWriter erreur inconnue

AVAssetWriter de créer une video à partir d'images en utilisant AVAssetWriter . Le code implémenté fonctionne très bien la plupart du time, mais dans les moments randoms, il y a un problème avec l'auteur.

 AVAssetWriter *videoWriter; ... [videoWriter finishWriting]; NSLog(@"videoWriter error %@",videoWriter.error); 

L'erreur reçue est:

 Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1f839cd0 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1e59efb0 "The operation couldn't be completed. (OSStatus error -12633.)", NSLocalizedFailureReason=An unknown error occurred (-12633)} 

Écriture d'images:

 -(void)writeFrame:(WriteableFrame*)wF { if([writerInput isReadyForMoreMediaData]) { CMTime presentTime = CMTimeMake(wF.frameTime, 1000); CGImageRef tmpImgRef = [wF.currentImage CGImage]; buffer = [self pixelBufferFromCGImage:tmpImgRef]; if(buffer) { [adaptor appendPixelBuffer:buffer withPresentationTime:presentTime]; CVPixelBufferRelease(buffer); } } else { NSLog(@"error"); } } 

Y a-t-il quelqu'un avec un problème comme celui-ci?

J'ai trouvé le problème, c'était mettre deux images à la même heure.

Directement à partir de DTS

Erreur -12633 est un InvalidTimestamp

Si vous donnez un sampleBuffer à AVAssetWriter , détruisez le AVAssetReader associé, AVAssetReader futur peut essayer de réutiliser le sampleBuffer avant que AVAssetWriter ait terminé avec AVAssetWriter . Cela est en contradiction avec la documentation AVAssetWriter dans AVAssetWriterInput.h , et pour autant que je sache, il n'y a aucun moyen de s'assurer que AVAssetWriter est terminé jusqu'à ce que vous obteniez le callback dans finishWritingWithCompletionHandler , mais cela peut entraîner l'erreur OSStatus -12633.

@method appendSampleBuffer:

Le récepteur conservera le CMSampleBuffer jusqu'à ce qu'il soit terminé, puis relâchez-le. Ne modifiez pas un CMSampleBuffer ou son contenu après l'avoir transmis à cette méthode.

Cela peut aussi arriver si les frameworks poussés sont en panne

J'obtenais la même erreur lorsque l'image dans mon tampon de pixels ne possédait pas les mêmes dimensions largeur / hauteur que l'adaptateur de tampon de pixels d'input attendait en fonction de ce que vous définissez pour sourcePixelBufferAtsortingbutes (kCVPixelBufferWidthKey, kCVPixelBufferHeightKey). Assurez-vous que le tampon de pixels a les mêmes dimensions. Dans mon cas, mon application dessinait parfois une image 1×1 parce que j'avais l'intention de dessiner une image en couleur solide mais j'ai négligé d'augmenter la taille de ce pixel monochrome.