【发布时间】:2012-11-14 12:31:35
【问题描述】:
我创建了一个 AVMutableComposition,它由一堆在特定时间开始的音轨组成。从那里开始,按照 Apple 的建议,我将其转换为 AVComposition,然后再与 AVPlayer 一起播放。
播放此 AVPlayer 项目一切正常,但如果我暂停它然后继续,则合成中的所有曲目似乎相对于彼此滑回大约 0.2 秒(即,它们聚集在一起)。多次点击暂停和继续会复合效果,并且重叠更显着(基本上,如果我足够多地点击它,我最终会同时播放所有 8 首曲目)。
if (self.player.rate > 0.0) {
//if player is playing, pause
[self.player pause];
} else {
if (self.player) {
[self.player play];
return;
}
*/CODE CREATING COMPOSITION - missed out big chunk of code relating to finding the track and retrieving its position and scale/*
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVURLAsset *sourceAsset = [[AVURLAsset alloc] initWithURL:url options:options];
//calculate times
NSNumber *time = [soundArray1 objectAtIndex:1]; //this is the time scale - e.g. 96 or 120 etc.
double timenow = [time doubleValue];
double insertTime = (240*y);
AVMutableCompositionTrack *track =
[composition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
//insert the audio track from the asset into the track added to the mutable composition
AVAssetTrack *myTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
CMTimeRange myTrackRange = myTrack.timeRange;
NSError *error = nil;
[track insertTimeRange:myTrackRange
ofTrack:myTrack
atTime:CMTimeMake(insertTime, timenow)
error:&error];
[sourceAsset release];
}
}
AVComposition *immutableSnapshotOfMyComposition = [composition copy];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:immutableSnapshotOfMyComposition];
self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
NSLog(@"here");
[self.player play];
谢谢
【问题讨论】:
-
我在尝试解决类似问题时遇到了同样的问题。每次暂停时,我都不得不求助于创建一个新的 AVPlayerItem,然后当播放恢复时,声音不会被抵消。我认为 AVComposition 相当有问题。当您第一次开始播放时,我遇到了很多与 audioMix 相关的问题,并且音轨有时间偏移:stackoverflow.com/questions/14114542/…
标签: ios xcode audio avplayer avcomposition