Note that there are some explanatory texts on larger screens.

plurals
  1. POAVVideoComposition Failure
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload