首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环播放反向播放的AVPlayer?

如何循环播放反向播放的AVPlayer?
EN

Stack Overflow用户
提问于 2020-05-06 08:02:45
回答 1查看 137关注 0票数 0

我正在使用AVPlayer播放mp3文件。我用这个代替AVAudioPlayer,因为它支持在0.0 ... 2.0范围之外的速度播放。但是,我希望音频不断循环,所以我使用AVQueuePlayer和AVPlayerLooper来播放该文件。当rate属性为正时,这会起作用,但是当反向播放到达文件开头时,它就会停止,而不是返回到文件结尾并继续反向播放。有什么方法可以让玩家保持循环吗?这是我正在尝试的:

代码语言:javascript
复制
 override func viewDidLoad() {
    super.viewDidLoad()

    //Initialize the audio file and audio player

    guard let path = Bundle.main.path(forResource: "sideAMusic.mp3", ofType: nil) else {
        Console.log("Uh oh - no path could be found for filename: \("sideAMusic")")
        return
    }
    let url = URL(fileURLWithPath: path)
    let playerItem = AVPlayerItem(url: url)
    self.sideAPlayer = AVQueuePlayer(playerItem: playerItem)
    sideALooper = AVPlayerLooper(player: sideAPlayer!, templateItem: playerItem)
    sideAPlayer?.volume = 1
    sideAPlayer?.play()
}

// Use a slider in the range of -4 ... 4 to set the playback speed
@IBAction func speedSlider(_ sender: UISlider) {
    self.sideAPlayer?.rate = sender.value
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-20 01:29:34

您应该添加一个周期性的时间观察者。以下是文档的link

你也应该检查一下here如何观察时间。

另外,这里有一个代码示例。

代码语言:javascript
复制
    func addPeriodicTimeObserver() {
        // Notify every 0.05 second
        let timeScale = CMTimeScale(NSEC_PER_SEC)
        let time = CMTime(seconds: 0.05, preferredTimescale: timeScale)

        timeObserverToken = player.addPeriodicTimeObserver(forInterval: time,
                                                          queue: .main) {
            [weak self] currentTime in
              if CMTimeCompare(currentTime, CMTime.zero) == 0 {
                   //The track reached the beginning, you should seek player to the end time
                   self?.player.seek(to: self?.playerItem.duration, toleranceBefore: .zero, toleranceAfter: .zero)
                   self?.player.play()
              }
        }
    }

    func removePeriodicTimeObserver() {
        if let timeObserverToken = timeObserverToken {
            player.removeTimeObserver(timeObserverToken)
            self.timeObserverToken = nil
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61625103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档