2014-10-06 13 views
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)"); 
         } 
        }); 

वहाँ एक रास्ता स्क्रॉल एक संग्रह देखें आदि की तरह उपयोगकर्ता इंटरफ़ेस कार्यों पर इस कार्य को प्राथमिकता देने की है? समझ की कमी के लिए माफ़ी मैं आईओएस के लिए काफी नया हूँ।

उत्तर

2

बाहर कर देता है UICollectionView मुख्य थ्रेड पर NSURLConnection के लिए प्रतिनिधि कॉल को अवरुद्ध किया गया था।

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
                  delegate:self]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
                  delegate:self 
                startImmediately:NO]; 
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] 
        forMode:NSRunLoopCommonModes]; 
[connection start]; 
करने के लिए बदल: यह समस्या हल
संबंधित मुद्दे