为什么Swift的AVPlayer中存在mp3延迟?

时间:2019-09-04 15:13:34

标签: ios swift mp3 avplayer

因此,我目前正在开发一个播放录制的音频的应用程序,但是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也会有这种延迟,而其他玩家却没有?

0 个答案:

没有答案