Je suis sûr que quelque chose ne va pas avec mes attributs de tampon, mais ce n'est pas clair pour moi quoi - ce n'est pas bien documenté ce qui est censé y aller, alors je devine basé sur cvpixelbufferpoolcreate code> - et Core Foundation est à peu près un livre fermé à moi.
6 Réponses :
J'ai eu le même problème et je pense que c'est peut-être parce que vous n'avez pas configuré votre avaisetwriterinput code> correctement. Ma piscine a commencé à travailler après que je l'avais fait. En particulier, la piscine ne me donnerait pas de tampons de pixels à moins d'avoir fourni des données dans
AvvideocompressionPropertiesKey code>. Tout d'abord, créez et configurez complètement le
avaisetwriter code> (
Regardez dans
/Devoper/platforms/iphoneos.platform/developer/sdks/iphoneos4.3.sdk/system/library/frameworks/avfoundation.framework/headers/avvideossets.h code> pour clés et valeurs pour
SortieSettings CODE> et
COMPRESSIONTS CODE>):
CVReturn res = CVPixelBufferPoolCreatePixelBuffer (NULL
, [outputPBA pixelBufferPool]
, & outputFrame);
Vous n'avez pas utilisé de pixbufsettings
Mais si vous passez nil à SourcePixelBufferattributes, il n'y a aucune chance que l'adaptateur va créer n'importe quel tampon de pixel que ce soit
Je suis tout ce qui fonctionne! Avec le dictionnaire d'options défini sur la compatibilité, ils disent qu'il est possible d'utiliser le pool tampon, voici des échantillons de travail et le code d'écriture sans tampon, mais c'est un bon endroit pour commencer.
Voici le code de l'échantillon link p>
Voici le code dont vous avez besoin: p>
Pourriez-vous expliquer quel pixelbuffer cette solution est censé utiliser.
Apple devrait licencier tout le département qui écrit leurs terribles, épouvantables documents incomplets et dégoûtants, vagues et dégoûtants, vagues et trompeuses. Ils sont une honte.
Selon la documentation: P>
"Cette propriété est nulle avant le premier appel à Démarrageattime: sur l'objet Avaisetwriter associé." P>
Donc, si vous essayez d'accéder à la piscine trop tôt, ce sera null. J'apprends juste ces choses moi-même pour que je ne puisse pas vraiment élaborer en ce moment. P>
Que voulez-vous dire pour trop tôt ?? Je peux vous assurer que j'appelle cvpixelbufferpoolcreatepixelbuffer (kcFallocatordefault, _pixelbufferAdaptor.pixelbufferpool, & pixelbuffer) après avoir appelé les méthodes censées être appelées à l'actif et, toujours, il conserve une erreur d'erreur de retour apparemment pas de piscine tampon n'a été créée.
Lorsque le Pixelbufferpool renvoie NULL, vérifiez les éléments suivants: P>
# 1 a fait le tour pour moi aussi. Une solution aussi simple! J'étais vraiment trop profond. BTW, mon échec était quand j'ai appelé CvpixelbufferpoolcreatePixelbuffer, il revenait -6661.
# 1 l'a fait pour moi aussi. Merci!
Comment avez-vous corrigé cela avec le numéro un? J'utilise Nshomedirectory à Swift. Quelqu'un peut-il poster un exemple GitHub?
# 1 pour moi aussi.
Je ne comprends pas # 1 - Pourquoi un fichier doit-il exister? Si j'enregistre une nouvelle vidéo, cela peut ne pas exister. Je n'ai jamais eu à "créer" le fichier d'abord sur une autre application que j'ai faite. --- Mise à jour --- Vous obtiendrez l'erreur si le fichier existe et que vous essayez d'écrire dessus. Essayez de renommer votre fichier de destination.
Pour tout le monde cherche toujours la solution: Premièrement, assurez-vous que votre avacetsetwriter fonctionne correctement en vérifiant son statut. J'ai eu ce problème et après avoir vérifié le statut, même si j'appelle commencer à commencer quelque chose, l'écrivain n'a pas encore commencé. (Dans mon cas, j'ai signalé le chemin d'écriture à un fichier existant, alors après avoir supprimé Cela fonctionne comme un charme) p>
Ça fonctionne quand il n'y a pas de fichier au OutputURL code> pour
Avaisetwriter code>.
let assetWriter = try? AVAssetWriter(outputURL: outputURL, fileType: .mov)
FileManager.default.removeItemIfExist(at: outputURL)
// do something
Bonjour, j'ai le même problème, vous avez trouvé une solution?
Pas vraiment. Je crée juste un tampon de pixel pour chaque cadre au lieu d'utiliser la piscine. :(
Ok, nous avons trouvé la même solution. Merci !
Salut @DavidMoles Avez-vous trouvé la solution ou avez-vous du code de travail avec "Création d'un tampon de pixel pour chaque cadre"?
@IraniyanayNesh désolé, je n'ai pas regardé cela dans des années. Mais le Documents pour Pixelbufferpool Dites maintenant "Cette propriété est null avant la Premier appel à StartSessatTime: sur l'objet Avaisetwriter associé. " Alors peut-être que c'était la question?