用AVPlayer播放AVMutableComposition?
我试图让两个video顺序播放。 我试过AVQueuePlayer,但两个剪辑之间有一个巨大的“打嗝”。 我需要他们不间断地玩。
所以我试图使用AVMutableComposition和一个AVPlayer,但不能把它正确的。
这是我的代码(忽略内存泄漏,只是在一个空的项目中testing..):
composition = [[AVMutableComposition alloc] init]; NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"]; NSURL * url = [NSURL fileURLWithPath:path]; AVURLAsset * asset = [[AVURLAsset alloc] initWithURL:url options:nil]; NSError * error = NULL; [composition insertTimeRange:CMTimeRangeMake(CMTimeMake(0,1000),CMTimeMake(4,1000)) ofAsset:asset atTime:CMTimeMake(0,1000) error:&error]; if(error) NSLog(@"error: %@",error); path = [[NSBundle mainBundle] pathForResource:@"chug1" ofType:@"mp4"]; url = [NSURL fileURLWithPath:path]; asset = [[AVURLAsset alloc] initWithURL:url options:nil]; error = NULL; [composition insertTimeRange:CMTimeRangeMake(CMTimeMake(0,1000),CMTimeMake(3,1000)) ofAsset:asset atTime:CMTimeMake(4.1,1000) error:&error]; if(error) NSLog(@"error: %@",error); AVPlayerItem * item = [[AVPlayerItem alloc] initWithAsset:composition]; AVPlayer * player = [AVPlayer playerWithPlayerItem:item]; AVPlayerLayer * layer = [AVPlayerLayer playerLayerWithPlayer:player]; [layer setFrame:CGRectMake(0, 0, 320, 480)]; [[[self view] layer] addSublayer:layer]; [player play];
该代码似乎对我来说。 每个video的第一帧实际上都呈现在屏幕上。 但video根本不播放。 我错过了什么? 我需要弄清楚如何使用MutableTrack的东西?
也许你使用错误的时间插入点和持续时间,都取决于实际的video资产。 我会写这样的东西:
CMTime insertionPoint = kCMTimeZero; NSError * error = nil; composition = [AVMutableComposition composition]; asset = /* obtain asset #1 */ if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofAsset:asset atTime:insertionPoint error:&error]) { NSLog(@"error: %@",error); } insertionPoint = CMTimeAdd(insertionPoint, asset.duration); asset = /* obtain asset #2 */ if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofAsset:asset atTime:insertionPoint error:&error]) { NSLog(@"error: %@",error); } ... /* playback stuff */