2014-10-06 20 views
5

Tôi có một bộ giải mã video chơi H264 sử dụng AVSampleBufferDisplayLayer và tất cả hoạt động tốt cho đến khi tôi cuộn một UICollectionViewController trên cùng một View Controller. Điều này dường như chặn chuỗi chính khiến ứng dụng gặp sự cố. Tôi đã thử đặt mã này trong một khối trên một hàng đợi riêng biệt bằng cách sử dụng dispatch_async nhưng vẫn có cùng một vấn đề chặn cùng với các vấn đề hiệu suất hơn nữa trên bộ giải mã.Cuộn UICollectionView khối chính chủ đề

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ó cách nào để ưu tiên nhiệm vụ này hơn các hành động của Giao diện người dùng như cuộn Chế độ xem bộ sưu tập v.v. không? Xin lỗi vì thiếu hiểu biết tôi mới hợp lý với IOS.

Trả lời

2

Tắt UICollectionView đã chặn cuộc gọi đại biểu cho NSURLConnection trên chuỗi chính. Đây đã giải quyết được vấn đề:

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

đổi thành

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
                  delegate:self 
                startImmediately:NO]; 
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] 
        forMode:NSRunLoopCommonModes]; 
[connection start]; 
Các vấn đề liên quan