9
votes

AvaissetwriterinputpixelbufferAdaptor retourne Null Pixel Buffer Pool

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 - et Core Foundation est à peu près un livre fermé à moi. XXX


5 commentaires

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?


6 Réponses :


3
votes

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);


2 commentaires

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



0
votes

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

Voici le code dont vous avez besoin: xxx


2 commentaires

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.



2
votes

Selon la documentation:

"Cette propriété est nulle avant le premier appel à Démarrageattime: sur l'objet Avaisetwriter associé."

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.


1 commentaires

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.



17
votes

Lorsque le Pixelbufferpool renvoie NULL, vérifiez les éléments suivants:

    1. Le fichier de sortie de l'avaisetswriter n'existe pas.
      2. Utilisez le pixelbuffer après avoir appelé StartsessatTime: sur l'avaisetswriter.
        3. Les réglages d'AvaisetwriterInput et AvastewriterInputpixelbufferAdaptor sont corrects.
          4. Les temps actuels des utilisations des appendexelbuffer ne sont pas identiques.

5 commentaires

# 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.



1
votes

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)


0 commentaires

0
votes

Ç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


0 commentaires