AVFoundation: Compositing 2 videos shows twice the same
| Originator: | mc | ||
| Number: | rdar://10657677 | Date Originated: | 2012-01-07 |
| Status: | Open | Resolved: | |
| Product: | iPhone SDK | Product Version: | 5.0 |
| Classification: | Other Bug | Reproducible: | Always |
I'm not 100% sure it's a bug, but anybody I ask tells me I did it "right", but I still have twice the same videos on top of each other, instead of 2 different. Code NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], AVURLAssetPreferPreciseDurationAndTimingKey, nil]; AVMutableComposition *composition = [AVMutableComposition composition]; CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(4, 1)); AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition]; // Track B NSURL *urlVideo2 = [NSURL URLWithString:@"file://localhost/Users/me/Movies/Temp/IMG_1388.m4v"]; AVAsset *video2 = [AVURLAsset URLAssetWithURL:urlVideo2 options:options]; AVMutableCompositionTrack *videoTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:0]; NSArray *videoAssetTracks2 = [video2 tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack *videoAssetTrack2 = ([videoAssetTracks2 count] > 0 ? [videoAssetTracks2 objectAtIndex:0] : nil); [videoTrack2 insertTimeRange:timeRange ofTrack:videoAssetTrack2 atTime:kCMTimeZero error:&error]; AVMutableVideoCompositionLayerInstruction *to = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoAssetTrack2]; [to setOpacity:.5 atTime:kCMTimeZero]; [to setTransform:CGAffineTransformScale(videoAssetTrack2.preferredTransform, .5, .5) atTime:kCMTimeZero]; // Track A NSURL *urlVideo = [NSURL URLWithString:@"file://localhost/Users/me/Movies/Temp/IMG_1383.MOV"]; AVURLAsset *video = [AVURLAsset URLAssetWithURL:urlVideo options:options]; AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:1]; NSArray *videoAssetTracks = [video tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack *videoAssetTrack = ([videoAssetTracks count] > 0 ? [videoAssetTracks objectAtIndex:0] : nil); [videoTrack insertTimeRange:timeRange ofTrack:videoAssetTrack atTime:kCMTimeZero error:nil]; AVMutableVideoCompositionLayerInstruction *from = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoAssetTrack]; [from setOpacity:.5 atTime:kCMTimeZero]; // Video Compostion AVMutableVideoCompositionInstruction *transition = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; transition.backgroundColor = [[UIColor clearColor] CGColor]; transition.timeRange = timeRange; transition.layerInstructions = [NSArray arrayWithObjects:to, from, nil]; videoComposition.instructions = [NSArray arrayWithObjects:transition, nil]; videoComposition.frameDuration = CMTimeMake(1, 30); videoComposition.renderSize = CGSizeMake(480, 360); // Export NSURL *outputURL = [NSURL URLWithString:@"file://localhost/Users/me/Movies/Temp/export.MOV"]; AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:[[composition copy] autorelease] presetName:AVAssetExportPresetHighestQuality]; [exportSession setOutputFileType:@"com.apple.quicktime-movie"]; exportSession.outputURL = outputURL; exportSession.videoComposition = videoComposition; [exportSession exportAsynchronouslyWithCompletionHandler:nil]; // Player AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:composition]; playerItem.videoComposition = videoComposition; AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!