因此,我目前正在开发一个播放录制的音频的应用程序,但是Swift AVPlayer似乎会大量延迟.mp3的某些部分。
例如https://drive.google.com/file/d/1w0pwpeVnwQ199Ly4pzTfoIw1dJ5jIsaH/view?usp=sharing
通过网络播放器播放此文件时,我可以在1:10:02开始听到声音,但是直到20秒后才可以通过我的应用听到相同的声音!
摆弄文件时,我注意到在Mac上尝试通过QuickTime Player播放文件时也注意到了一些延迟,但是通过其他浏览器或iTunes播放器打开文件时却没有看到相同的延迟。
我不太确定这是什么意思,google的略微浏览似乎表明itunes播放器使用QuickTime播放器,所以10秒钟以上的延迟对我来说似乎是疯狂的。
下面的实现。
class MP3Player {
private var player: AVPlayer?
private var observer: NSKeyValueObservation?
private var startedPlayingAction: () -> Void = {}
private var currentURL: URL?
private var isPlaying: Bool {
guard let player = player else { return false }
return player.rate != 0 && player.error == nil
}
func pause() {
self.player?.pause()
}
func play(url: URL, offset: Milliseconds, completion: @escaping () -> Void) {
if url != currentURL {
self.observer = nil
let player = AVPlayer(url: url)
self.player = player
self.observer = player.observe(\.rate) { player, _ in
if player.rate > 0 {
self.startedPlayingAction()
}
}
}
self.startedPlayingAction = completion
self.player?.seek(
to: CMTime(
seconds: offset / 1000,
preferredTimescale: player?.currentItem?.currentTime().timescale ?? CMTimeScale(1.0)
),
completionHandler: { _ in
self.player?.play()
}
)
}
}
使用此代码,我得到了多个点的大量延迟,其中最明显的延迟是在1:10:02左右。谁能解释为什么存在这种延迟?为何地球上的QuickTime Player也会有这种延迟,而其他玩家却没有?