5
我有一个使用AVSampleBufferDisplayLayer播放H264的视频解码器,并且一直运行良好,直到我在相同的视图控制器上滚动UICollectionViewController。这似乎阻止了导致应用程序崩溃的主线程。我曾尝试将此代码放在使用dispatch_async的单独队列中的一个块中,但仍具有相同的阻塞问题以及解码器上的进一步性能问题。滚动UICollectionView块主线程
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)");
}
});
有没有办法让这个任务优先于滚动Collection View等用户界面动作?对于缺乏理解的道歉我对IOS很新。