title: AVVideoComposition Failure
body: <p>As in mine. To use it.</p>
  
  <p>I am string several different video clips together into an AVMutableComposition and attempting to correct their orientation if needed.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>composition = [[AVMutableComposition alloc] init];
  AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
  
  AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
  AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
  
  CMTime nextClipStartTime = kCMTimeZero;
  
  // orientation compensation vars
  AVMutableVideoCompositionInstruction *inst = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
  NSMutableArray *compInst = [[NSMutableArray alloc] init];
  
  // get view size
  CGSize viewSize = playerView.frame.size;
  
  // generate movie assets
  for (NSString* moviePath in [currentBlam valueForKey:@"movies"]) {
      NSURL *movieURL = [NSURL fileURLWithPath:moviePath];
      AVURLAsset *movieAsset = [AVURLAsset URLAssetWithURL:movieURL options:nil];  
  
      // scale asset to fit screen
  
      CMTimeRange tr = CMTimeRangeFromTimeToTime(CMTimeMakeWithSeconds(0.0f, 1), CMTimeMakeWithSeconds(0.0f, 1));
  
      //    create video track
      AVAssetTrack *clipVideoTrack = [[movieAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
      //    create audio track
      AVAssetTrack *clipAudioTrack = [[movieAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
  
      tr = CMTimeRangeFromTimeToTime(CMTimeMakeWithSeconds(0.0f, 1), CMTimeMakeWithSeconds(CMTimeGetSeconds([movieAsset duration]), 1));
  
      AVMutableVideoCompositionLayerInstruction *layerInst;
      layerInst = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack];
  
      int or = [self orientationForTrack:movieAsset];
      if (or==1) { 
          float rot = (0.0f);
          [layerInst setTransform:CGAffineTransformMakeRotation(rot) atTime:nextClipStartTime];
      } else if (or==2) { 
          float rot = (M_PI);
          [layerInst setTransform:CGAffineTransformMakeRotation(rot) atTime:nextClipStartTime];
      } else if (or==3) { 
          float rot = (M_PI*-0.5f);
          [layerInst setTransform:CGAffineTransformMakeRotation(rot) atTime:nextClipStartTime];
      } else if (or==4) { 
          float rot = (M_PI*0.5f);
          [layerInst setTransform:CGAffineTransformMakeRotation(rot) atTime:nextClipStartTime];
      }
  
      [layerInst setTransform:clipVideoTrack.preferredTransform atTime:nextClipStartTime];
      [compInst addObject:layerInst];
  
      //    insert video track
      [compositionVideoTrack insertTimeRange:tr 
                                     ofTrack:clipVideoTrack 
                                      atTime:nextClipStartTime 
                                       error:nil];
      //    insert audio track
      [compositionAudioTrack insertTimeRange:tr 
                                     ofTrack:clipAudioTrack 
                                      atTime:nextClipStartTime 
                                       error:nil];
  
      nextClipStartTime = CMTimeAdd(nextClipStartTime, tr.duration);
  }
  
  //set size and duration
  composition.naturalSize = viewSize;
  videoComposition.frameDuration = composition.duration;
  videoComposition.renderSize = viewSize;
  videoComposition.renderScale = 1.0f;
  
  //apply instructions
  inst.timeRange = CMTimeRangeMake(kCMTimeZero, composition.duration);
  inst.layerInstructions = compInst;
  videoComposition.instructions = [NSArray arrayWithObject:inst];
  
  playerItem = [[AVPlayerItem alloc] initWithAsset:composition];
  playerItem.videoComposition = videoComposition;
  [playerItem addObserver:self forKeyPath:@"status" options:0 context:&amp;ItemStatusContext];
  [[NSNotificationCenter defaultCenter] addObserver:self 
                                           selector:@selector(playerItemDidReachEnd:) 
                                               name:AVPlayerItemDidPlayToEndTimeNotification 
                                             object:playerItem];
  player = [AVPlayer playerWithPlayerItem:playerItem];
  
  [playerView setPlayer:player];
  </code></pre>
  
  <p>When I run this and populate with content nothing shows.</p>
  
  <p>This was working previously without the AVVideoComposition being applied to the player. In fact, commenting out the playerItem.videoComposition = videoComposition allows it to work, albeit without correcting the assets rotations.</p>
  
  <p>At this point I know I'm just misunderstanding something here. Can someone please point out what?</p>