title: sequentially reading video files using AVAssetReader fails in OSX Lion
body: <p>I have a function to read H264 video files. I want to use it to sequentially read many video files. It seems to work for a files (random time), fails partially for a few files (reads some and not all the frames) and then completely fails (reading 0 frames). I tested this by looping over the same video file and so this uncertainty is strange. </p>
  
  <p>The error message I get is:</p>
  
  <p>Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x105d07480 {NSLocalizedFailureReason=An unknown error occurred (-6662), NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x100159350 "The operation couldn’t be completed. (OSStatus error -6662.)"}</p>
  
  <p>I use ARC and OSX Lion. Any help is much appreciated: </p>
  
  <pre><code>void uncompressMovie(NSString *moviePath) { 
  AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:moviePath]];
  
  NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
  AVAssetTrack *video_track = [video_tracks objectAtIndex:0];
  
  // Decompress to ARGB with the asset reader
  NSDictionary *decompressionVideoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                              [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32ARGB], (id)kCVPixelBufferPixelFormatTypeKey,
                                              [NSDictionary dictionary], (id)kCVPixelBufferIOSurfacePropertiesKey,
                                              nil];
  AVAssetReaderTrackOutput *asset_reader_output = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:video_track outputSettings:decompressionVideoSettings];
  
  NSError *error = [[NSError alloc] init];
  AVAssetReader *asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&amp;error]; 
  
  if ([asset_reader canAddOutput:asset_reader_output]) {
      [asset_reader addOutput:asset_reader_output];
  
      if ([asset_reader startReading] == YES) {
          int count = 0;
  
          while ( [asset_reader status]==AVAssetReaderStatusReading ) {
              sampleBuffer = [asset_reader_output copyNextSampleBuffer];
              if (sampleBuffer == NULL) {
                  if ([asset_reader status] == AVAssetReaderStatusFailed) 
                      break;
                  else    
                      continue;
              }
              count++;
  
              // Will do some work here            
  
              CFRelease(sampleBuffer);
          }
  
          if (count == 0) {
              NSLog(@"I am doomed %@", [asset_reader error]);
              exit(1);
          }
  
          NSLog(@"Processed %d frames from %@", count, moviePath);
      } else
          NSLog(@"Couldn't start");
  }
  
  if ([asset_reader status] != AVAssetReaderStatusCompleted)
      [asset_reader cancelReading];
  // unlink([moviePath UTF8String]);
  }
  </code></pre>