La création de CMSampleBufferRef à partir des données
Je suis en train de créer un CMSampleBuffer Ref de données et d'essayer de l'alimenter AVAssetWriter.
Mais de l'actif de l'écrivain est de ne pas créer le film à partir des données. Voici le code pour créer le CMSampleBufferRef.
CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(cvimgRef,0);
uint8_t *buf=(uint8_t *)CVPixelBufferGetBaseAddress(cvimgRef);
int width = 480;
int height = 360;
int bitmapBytesPerRow = width*4;
int bitmapByteCount = bitmapBytesPerRow*height;
CVPixelBufferRef pixelBufRef = NULL;
CMSampleBufferRef newSampleBuffer = NULL;
CMSampleTimingInfo timimgInfo = kCMTimingInfoInvalid;
CMSampleBufferGetSampleTimingInfo(sampleBuffer, 0, &timimgInfo);
OSStatus result = 0;
OSType pixFmt = CVPixelBufferGetPixelFormatType(cvimgRef);
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, pixFmt, buf, bitmapBytesPerRow, NULL, NULL, NULL, &pixelBufRef);
CMVideoFormatDescriptionRef videoInfo = NULL;
result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBufRef, &videoInfo);
CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBufRef, true, NULL, NULL, videoInfo, &timimgInfo, &newSampleBuffer);
De création de film fonctionne très bien lorsque nous utilisons l'original CMSampleBufferRef obtenu à partir de la AVFoundation sortie de données de la méthode de rappel.
Mais le même échoue lorsque j'essaie de créer le film à l'aide de la coutume CMSampleBufferRef. De l'actif de l'écrivain jette l'erreur suivante:
The operation couldn’t be completed. (AVFoundationErrorDomain error -11800.)
Merci de m'aider dans la résolution de ce problème.
OriginalL'auteur Subhash | 2010-09-24
Vous devez vous connecter pour publier un commentaire.
Vous devriez regarder dans AVAssetWriterInputPixelBufferAdaptor - il accepte CVPixelBuffers de sorte que vous n'avez pas besoin de convertir le CVPixelBuffer dans un CMSampleBuffer.
voici un lien vers un thread à ce sujet sur le dev apple forum -> https://devforums.apple.com/thread/70258?tstart=0
Aussi - tout hasard, vous pouvez poster votre fichier de projet ou un exemple de code de la capture de film travail, je suis en utilisant la valeur par défaut CMSampleBuffer de la AVFoundation sortie de données de la méthode de rappel - mais quand je l'ai enregistrer sur pellicule, il est tout noir, sauf les 5 dernières images que j'ai manuellement gommage :S
toute aide en ce qui concerne ma question serait grandement appréciée.
Acclamations,
Michael
Cela semble fonctionner pour beaucoup de gens, mais, selon certains autres postes, certains d'entre nous ont requis des solutions de contournement pour des questions telles que la mémoire tampon de prendre le temps d'écrire chaque image, mais de retourner immédiatement. Il serait vraiment agréable de le transformer directement dans un samplebufferref.
Le lien pour le dev apple forum est mort
OriginalL'auteur Michael O'Brien
Pour cette erreur, il toujours se produire lorsque
timingInfo
est pas valide. il faut définir les valeurs valides avecPTS
etDuration
.OriginalL'auteur Kongling Ouyang