7
Bazı ses dosyalarını dönüştürmede sorun yaşıyorum. Dönüştürürken büyük bir bellek sızıntısı alıyorum ve bu kod satırlarından geliyor. CMSampleBufferDaha fazla bellek sızıntısı
dispatch_queue_t mediaInputQueue = dispatch_queue_create("mediaInputQueue", NULL);
[assetWriterInput requestMediaDataWhenReadyOnQueue:mediaInputQueue
usingBlock:^
{
while (assetWriterInput.readyForMoreMediaData)
{
CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];
if (nextBuffer)
{
[assetWriterInput appendSampleBuffer: nextBuffer];
nextBuffer = NULL;
}
else
{
// done!
[assetWriterInput markAsFinished];
[assetWriter finishWriting];
[assetReader cancelReading];
NSDictionary *outputFileAttributes = [[NSFileManager defaultManager]
attributesOfItemAtPath:exportPath
error:nil];
NSNumber *doneFileSize = [NSNumber numberWithLong:[outputFileAttributes fileSize]];
[self performSelectorOnMainThread:@selector(updateCompletedSizeLabel:)
withObject:doneFileSize
waitUntilDone:NO];
// release a lot of stuff
[assetReader release];
[assetReaderOutput release];
[assetWriter release];
[assetWriterInput release];
[exportPath release];
break;
}
}
}];
sızıntılara sebep görünmektedir hattıdır
: CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];
Bu konuda kayboldum herhangi bir yardım büyük takdir edilecektir.
CEVAP: Düzeltildi - Yalnızca bu satırları if/else ifadesinin sonuna ekleyin.
Neden "CFRelease" den önce "CMSampleBufferInvalidate" diyorsunuz? – Meekohi
@Meekohi, bu kesin siparişe ihtiyaç duymayabilir, bunu zaman zaman yaptım ve emin olmadım, biliyorum ki combo işi yaptı. – Krzemienski
Örnek arabellek üzerinde CFRelease çağrısı, CMSampleBufferInvalidate ve sampleBuffer = NULL olmadan kullanıldığında bile benim için bir çakışma neden olur. CMSampleBufferInvalidate (nextBuffer) kullanmanız önerilir; nextBuffer = NULL; – Zigglzworth