2017-01-09 44 views
0

我試圖讓Avplayer簡歷從停止的地方,通過使型CMtime的全球價值和CURRENTTIME存儲然後用它來從恢復啓動停止的地方Avplayer總是從開始

我的代碼:

override func viewDidLoad() { 
     super.viewDidLoad()  

      url = URL(string: "https://s3.amazonaws.com/kargopolov/kukushka.mp3")! 
      let playerItem:AVPlayerItem = AVPlayerItem(url: url as URL) 
      player = AVPlayer(playerItem: playerItem) 


      let duration : CMTime = playerItem.asset.duration 
      let seconds : Float64 = CMTimeGetSeconds(duration) 

      playbackSlider!.maximumValue = Float(seconds) 

      playbackSlider?.addTarget(self, action: #selector(playbackSliderValueChanged(_:)), for: .valueChanged) 
      self.view.addSubview(playbackSlider!) 


      player!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in 
       if player!.currentItem?.status == .readyToPlay { 
        let time : Float64 = CMTimeGetSeconds(player!.currentTime()) 

        self.playbackSlider!.value = Float (time) }} 


@IBAction func playbackSliderValueChanged(_ sender: UISlider) { 

     let seconds : Int64 = Int64(playbackSlider.value) 
     let targetTime:CMTime = CMTimeMake(seconds, 1) 

     player!.seek(to: targetTime) 

     if player!.rate == 0 
     { 
      player?.play() 
     } 

    } 

當我嘗試使用seek(至:) 沒有任何改變,它也從頭開始!

我嘗試使用

if let currentTime = player?.currentTime() { 
     player?.seek(to: times2! ) 
    } 

改變CURRENTTIME我不知道爲什麼它總是從開始我用AVAudioPlayer 開始,它比AVplayer 容易得多,而是因爲我需要流音頻I將其更改爲AVplayer

回答

0

我找到了解決辦法,

  1. 我使用THI有3秒鐘從CMtime S碼,並將其添加在開卷賽格瑞功能

    let t1 = Float((player?.currentTime().value)!) 
    let t2 = Float((player?.currentTime().timescale)!) 
    times2 = t1/t2 
    // time2 is a global value of type float 
    
    nameOfTheAudioWasPlaying = Array[SelectedRow].Title!  // nameOfTheAudioWasPlaying is also a global value of type String 
    

2.in viewDidLoad中我使用此代碼

if Array[SelectedRow].Title! == nameOfTheAudioWasPlaying { 
     player?.seek(to: CMTimeMakeWithSeconds(Float64(times2), 1)) 
     player?.play() 


    }else { 
     player?.play() 

    } 

這是一個解決方案,但沒有一個完美的解決方案,每次它重新下載一個音頻文件恢復它,這意味着如果我播放一個文件,然後返回到tableview然後返回,它將錢包並等待一秒鐘,然後從它停止的地方播放它。