Ich habe frühere Vorschläge mit Swift implementiert ( Wie CVPixelBufferPool zu verwenden in Verbindung mit AVAssetWriterInputPixelBufferAdaptor in iPhone? ), aber blieb mit einem "kCVReturnInvalidArgument" (Fehlerwert: -6661) hängen, wenn CVPixelBufferPoolCreatePixelBuffer als geführt verwendet wurde.
Ich versuche grundsätzlich, einen Film aus Bildern zu erstellen, aber da der Pufferpool nicht erfolgreich erstellt wurde, kann ich keine Pixelpuffer anhängen - hier ist mein Code dafür.
Irgendwelche Vorschläge werden sehr geschätzt!
%Vor%Ich kann deine Frage nicht frustrierend beantworten, aber ich arbeite an einem Code, der im Wesentlichen dasselbe tut. Und meiner kommt weiter als der Fehler, den Sie bekommen haben; Es kommt bis zu dem Punkt, wo es versucht, die Bilder zum Film hinzuzufügen und dann scheitert einfach, indem nie ein erfolgreiches Ergebnis von appendPixelBuffer () - und ich bin mir nicht sicher, wie man herausfinden, warum. Ich poste dies in der Hoffnung, dass es dir hilft, weiter zu kommen.
(Mein Code wurde aus AVFoundation + AssetWriter: Film mit erstellen erstellt Bilder und Audio , und ich habe deinen Post benutzt, um dir bei der Navigation zwischen den Zeiger-Interop-Shenanigans zu helfen ...)
%Vor% Wo pixelBufferFromCGImage
wie folgt definiert ist:
Pro Dokumente für pixelBufferPool
:
Diese Eigenschaft ist NULL vor dem ersten Aufruf von startSessionAtTime: auf dem verknüpften AVAssetWriter-Objekt.
Das Verschieben des Aufrufs in CVPixelBufferPoolCreatePixelBuffer
an das Ende von init
sollte das unmittelbare Problem beheben.
Einige andere Beobachtungen:
AVAssetWriterInputPixelBufferAdaptor
für BGRA konfiguriert, aber in createPixelBufferFromCGImage
verwenden Sie RGB. Deine endgültigen Videos werden seltsam aussehen, wenn die Pixelformate nicht übereinstimmen. CVPixelBufferCreate
nicht in Ihrer createPixelBufferFromCGImage
-Methode aufrufen. Dies verhindert den Zweck der Verwendung des Pufferpools. autoreleasepool
und vorsichtig mit takeUnretainedValue
vs takeRetainedValue
wird helfen. Ich habe Referenzimplementierungen für Swift 1.2, 2.0 und 3.0 gepostet, die Pufferpools verwenden.