title: AVFoundation to reproduce a video loop
body: <p>I need to reproduce a video indefinitely (restarting the video when it ends) in my OpenGL application.
  To do so I'm trying to utilize AV foundation. 
  I created an AVAssetReader and an AVAssetReaderTrackOutput and I utilize the copyNextSampleBuffer method to get CMSampleBufferRef and create an OpenGL texture for each frame.</p>
  
  <pre><code>    NSString *path = [[NSBundle mainBundle] pathForResource:videoFileName ofType:type];
      _url = [NSURL fileURLWithPath:path];
  
      //Create the AVAsset 
      _asset = [AVURLAsset assetWithURL:_url];
  
      //Get the asset AVAssetTrack
      NSArray *arrayAssetTrack = [_asset tracksWithMediaType:AVMediaTypeVideo];
      _assetTrackVideo = [arrayAssetTrack objectAtIndex:0];
  
      //create the AVAssetReaderTrackOutput
      NSDictionary *dictCompressionProperty = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id) kCVPixelBufferPixelFormatTypeKey];
      _trackOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:_assetTrackVideo outputSettings:dictCompressionProperty];
  
      //Create the AVAssetReader
      NSError *error;
      _assetReader = [[AVAssetReader alloc] initWithAsset:_asset error:&amp;error];
      if(error){
          NSLog(@"error in AssetReader %@", error);
      }
      [_assetReader addOutput:_trackOutput];
      //_assetReader.timeRange = CMTimeRangeMake(kCMTimeZero, _asset.duration);
  
      //Asset reading start reading
      [_assetReader startReading];
  </code></pre>
  
  <p>And in -update method of my GLKViewController I call the following:</p>
  
  <pre><code>if (_assetReader.status == AVAssetReaderStatusReading){
      if (_trackOutput) {
          CMSampleBufferRef sampleBuffer = [_trackOutput copyNextSampleBuffer];
          [self createNewTextureVideoFromOutputSampleBuffer:sampleBuffer]; //create the new texture
      }
  }else if (_assetReader.status == AVAssetReaderStatusCompleted) {
      NSLog(@"restart");
      [_assetReader startReading];
  }
  </code></pre>
  
  <p>All work fine until the AVAssetReader is in the reading status but when it finished reading and I tried to restart the AVAssetReading with a new call [_assetReader startReading], the application crash without output. 
  What I'm doing wrong? It is correct to restart an AVAssetReading when it complete his reading?</p>