Ho un decoder video che riproduce H264 utilizzando AVSampleBufferDisplayLayer e tutto funziona bene finché non faccio scorrere un UICollectionViewController sullo stesso controller di visualizzazione. Sembra che blocchi il thread principale causando l'arresto anomalo dell'app. Ho provato a inserire questo codice in un blocco su una coda separata utilizzando dispatch_async, ma ho ancora lo stesso problema di blocco insieme a ulteriori problemi di prestazioni sul decoder.Scrolling UICollectionView blocks main thread
dispatch_async(sampleQueue, ^{
[sampleBufferQueue addObject:(__bridge id)(sampleBuffer)];
if ([avLayer isReadyForMoreMediaData]) {
CMSampleBufferRef buffer = (__bridge CMSampleBufferRef)([sampleBufferQueue objectAtIndex:0]);
[sampleBufferQueue removeObjectAtIndex:0];
[avLayer enqueueSampleBuffer:buffer];
buffer = NULL;
NSLog(@"I Frame");
[avLayer setNeedsDisplay];
while ([sampleBufferQueue count] > 0 && [avLayer isReadyForMoreMediaData]) {
CMSampleBufferRef buffer = (__bridge CMSampleBufferRef)([sampleBufferQueue objectAtIndex:0]);
[sampleBufferQueue removeObjectAtIndex:0];
[avLayer enqueueSampleBuffer:buffer];
buffer = NULL;
NSLog(@"I Frame from buffer");
[avLayer setNeedsDisplay];
}
}
else {
NSLog(@"AVlayer Not Accepting Data (I)");
}
});
C'è un modo per assegnare a questa attività priorità su azioni dell'interfaccia utente come lo scorrimento di una vista raccolta ecc.? Scuse per mancanza di comprensione Sono ragionevolmente nuovo per IOS.