AVPlayer,如何保存当前录制时间

AVPlayer, how to save the current recording time

当我按暂停再播放时,音乐又开始播放了怎么解决这个问题? 我知道我需要使用 seekTime(: CMTime),但我没有得到

Gif

都是代码

class ViewControllerAudioDetail: UIViewController {

@IBOutlet var list: TableViewControllerAudioList!

@IBOutlet weak var playChange: UIButton!
@IBOutlet weak var timeAudio: UILabel!
@IBOutlet weak var playbackSlider: UISlider!


var player = AVPlayer()

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.title = "БИБЛИОТЕКА"
   }

@IBAction func play(_ sender: Any) {
    if player.rate == 0 {

        let url = URL(string: ViewControllerAudioDetail.urlAudio[0])
        let playerItem = AVPlayerItem(url: url!)
        player = AVPlayer(playerItem:playerItem)
        player.rate = 1.0;
        player.play()
        playChange.setImage(UIImage(named:"Pause.png"), for: UIControlState.normal)

        let duration : CMTime = playerItem.asset.duration
        let seconds : Float64 = CMTimeGetSeconds(duration)
        playbackSlider.tintColor = UIColor.green

        let _ = player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main) { [weak self] (time) in
            self?.playbackSlider.value = Float(CMTimeGetSeconds(time)) / Float(seconds)

       }

    } else {

        playChange.setImage(UIImage(named:"Play.png"), for: UIControlState.normal)
        player.pause()

    }        
}


@IBAction func audioPlaybackSlider(_ sender: Any) {


    //перемотка аудиозвука
     let duration : CMTime = player.currentItem!.duration
    let totalDuration : Float64 = CMTimeGetSeconds(duration)

    let value = self.playbackSlider.value
    let durationToSeek = Float(totalDuration) * value
    player.seek(to: CMTimeMakeWithSeconds(Float64(durationToSeek),player.currentItem!.duration.timescale)) { [](state) in
    }

}


}

您的代码中的问题是,您总是在播放方法中创建一个新的播放器对象。这就是为什么它总是从音频的开头开始。

这应该可以解决您的问题

class ViewControllerAudioDetail: UIViewController {

    @IBOutlet var list: TableViewControllerAudioList!

    @IBOutlet weak var playChange: UIButton!
    @IBOutlet weak var timeAudio: UILabel!
    @IBOutlet weak var playbackSlider: UISlider!


    var player:AVPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "БИБЛИОТЕКА"
        setupAudioPlayer()

    }

    func setupAudioPlayer(){

        let url = URL(string: ViewControllerAudioDetail.urlAudio[0])
        let playerItem = AVPlayerItem(url: url!)
        player = AVPlayer(playerItem:playerItem)
        playbackSlider.tintColor = UIColor.green

        let _ = player!.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main) { [weak self] (time) in
            self?.updateSlider(time: time)
        }

    }

    func updateSlider(time:CMTime){

        let duration = CMTimeGetSeconds(player!.currentItem!.asset.duration)
        self.playbackSlider.value = Float(CMTimeGetSeconds(time)) / Float(duration)

    }

    @IBAction func play(_ sender: Any) {

        if player?.rate == 0 {

            player?.rate = 1.0;
            player?.play()
            playChange.setImage(UIImage(named:"Pause.png"), for: UIControlState.normal)

        } else {

            playChange.setImage(UIImage(named:"Play.png"), for: UIControlState.normal)
            player?.pause()

        }
    }

    @IBAction func audioPlaybackSlider(_ sender: Any) {

        //перемотка аудиозвука
        let duration = CMTimeGetSeconds(player!.currentItem!.asset.duration)
        let value = self.playbackSlider.value
        let durationToSeek = Float(duration) * value

        self.player?.seek(to: CMTimeMakeWithSeconds(Float64(durationToSeek),player!.currentItem!.duration.timescale)) { [](state) in

        }

    }

}