2015-12-22 11 views
5

Sto costruendo una funzione di esportazione video per una delle mie app. In sostanza, il video è una serie di sei immagini diverse che durano per diverse (brevi) durate.Errore OSStatus sottostante sconosciuto -16364 quando si utilizza AVAssetWriter

L'esportazione funziona bene quando esporto qualcosa contenente 283 immagini di durate variabili, ma quando provo ad esportare uno degli 803, ottengo il temuto errore "L'operazione non può essere completata" (AKA "non abbiamo idea di cosa appena fatto esplodere perché la segnalazione degli errori di AVFoundation è orribile ").

Quando provo ad aggiungere il telaio 754a (sempre il telaio 754a) usando i miei AVAssetWriterInputPixelBufferAdaptor, appendPixelBuffer:withPresentationTime: rendimenti NO, lo stato di 's il AVAssetWriter è fallito e il suo errore è questo:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)} 

non posso per la vita di me capisco che cos'è l'errore sottostante (OSStatus -16364). www.osstatus.com non ha idea, macerror dice che non esiste nulla di simile, e this lo script Python per cercare le intestazioni SDK non trova nulla. Non è nemmeno un codice di quattro caratteri come alcuni errori OSStatus (a meno che non abbia incasinato questo controllo).

Ho escluso tutte le cause comuni di errori "L'operazione non può essere completata" che ho trovato. Non è correlato alle autorizzazioni del filesystem o alla sovrascrittura, non esistono due chiamate di appendPixelBuffer con lo stesso tempo di presentazione.

Non è un ricordo (l'utilizzo della memoria rimane piatto a 165 MB durante l'esportazione video) e la CPU rimane vicino al 3%.

Se si tratta di alcuna importanza, mi riutilizzare lo stesso 6 CVPixelBuffer s più e più volte per i 6 immagini invece di crearne di nuovi da UIImage s ogni volta. Questo sembra aiutare le prestazioni, e cambiandolo ogni volta non sembra cambiare nulla (tranne farlo fallire sul frame 753), ma chi lo sa.

Qualcuno ha qualche idea di cosa potrebbe essere?

+0

forse questo ti aiuterà https://github.com/BradLarson/GPUImage/issues/2135 – azimov

+0

@azimov: Non sto usando GPUImage, ma forse quella correzione che coinvolge il thread mi porta da qualche parte. Grazie. – Linuxios

+0

Sì, ho visto che non è la stessa cosa, ma l'autore sta indicando AVAssetWriter nei suoi commenti e riceve lo stesso codice di errore. – azimov

risposta

7

OK. Finalmente capito.

A causa dell'arrotondamento (arrotondando i valori di piccola durata nella scala cronologica di 30 FPS, che li ha fatti diventare 0/30), veniva chiamato due volte con lo stesso presentationTime in circostanze specifiche. AVFoundation non si accorse del problema fino a 7 fotogrammi più tardi, quando si genera l'errore:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)} 

Utilizzando 60 FPS al posto di 30 FPS impedito questa particolare situazione da arrotondamento per una durata pari a zero, ma la soluzione generale è stato quello di eliminare fotogrammi con durate arrotondate a zero.

+0

nice - boo ai messaggi di errore di 'AVFoundation'. puoi accettare la tua risposta? –

+0

@RhythmicFistman: fatto. Sai, mantenere due app utilizzando AVFoundation è un incubo. – Linuxios

+0

che tipo di problemi stai avendo? –

Problemi correlati