Macos AVPlayer seekToTime

Macos AVPlayer seekToTime,macos,audio,core-audio,avplayer,Macos,Audio,Core Audio,Avplayer,我正在使用periodicTimeObserverForInterval更新绘图以反映我当前的音频波形。这很有效,一直没有给我带来任何麻烦。它与暂停和启动保持同步。然而,当我试图在代码中引入任意搜索时,视频波形与播放音频不同步。这对我来说没有意义,除非调用seek函数后发送给观察者的时间是错误的 // timeScale = 22050 = sampleRate let timeScale = self.player.currentItem.ass

我正在使用periodicTimeObserverForInterval更新绘图以反映我当前的音频波形。这很有效,一直没有给我带来任何麻烦。它与暂停和启动保持同步。然而,当我试图在代码中引入任意搜索时,视频波形与播放音频不同步。这对我来说没有意义,除非调用seek函数后发送给观察者的时间是错误的

            // timeScale = 22050 = sampleRate
            let timeScale = self.player.currentItem.asset.duration.timescale;

            self.player.seekToTime(CMTimeMakeWithSeconds(Float64(time), timeScale), toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero, completionHandler: {
                (Bool) -> Void in
                self.player.play();
            });

我不明白为什么这个函数会导致视觉不同步。

看不出上面的内容会如何影响事情。你的观察者是独立的吗?是使用玩家的当前时间作为采样点,还是传递变量?过了一段时间它稳定下来了吗?我正在使用提供给观察者块的时间参数。使用audacity,我验证了某段音频从75秒开始。当我及时搜索到该位置时,波形在75秒时正确显示。但是,音频在另外2秒钟内不会开始播放。那么播放机的当前时间是否与提供给块的时间参数匹配?我已经有一段时间没有研究低水平的压缩音频了,但我可以想象,这和视频类似,它时不时地需要一个关键帧。读取恒定的音频流很容易,因为您的数据仅与之前的数据相关。当你跳到一个新的位置时,重建基线需要一段时间。最终我转到EZAudio,它使用AudioComponents进行播放,使用ExtFileServices进行搜索。我不知道AVPlayer出了什么问题。