【问题标题】:tracks in AVComposition losing time when pausedAVComposition 中的曲目在暂停时会丢失时间
【发布时间】: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


【解决方案1】:

好的,这感觉有点笨拙,但如果有人被卡住了,它肯定会起作用。如果有人有更好的答案,请告诉我!

基本上,我只是在我点击暂停时保存轨道的 player.currentTime,并在我点击播放时重新制作轨道,只是从我暂停的点开始。没有明显的延迟,但如果不浪费这些额外的处理,我仍然会更开心。

确保在点击暂停后正确释放播放器项目,否则你最终会得到一大堆 AVPlayer!

【讨论】:

    【解决方案2】:

    我有一个不那么老套但仍然老套的解决方案。

    解决方案是因为我注意到如果你在播放器上搜索,暂停引入的音频和视频之间的延迟消失了。

    因此:只需在暂停之前保存player.currentTime,在再次播放之前保存player seekToTime。它在 iOS 6 上运行良好,尚未在其他版本上进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多