2017-08-06 55 views
1

我有AVPlayer的問題。此案是:我有一個功能,即設置AVPlayerAVPlayer選定的速度只有一次

func applyEffect(effectNumber : Int) { 
    switch effectNumber { 
    case 0: 
     self.AvPlayer.setRate(Float(1.0), time: kCMTimeInvalid, atHostTime: kCMTimeInvalid) 
    case 1: 
     self.AvPlayer.setRate(Float(1.5), time: kCMTimeInvalid, atHostTime: kCMTimeInvalid) 
    case 2: 
     self.AvPlayer.setRate(Float(0.5), time: kCMTimeInvalid, atHostTime: kCMTimeInvalid) 
    default: 
     self.AvPlayer.setRate(Float(1.0), time: kCMTimeInvalid, atHostTime: kCMTimeInvalid) 
    } 
} 

的速度對於我下載音頻文件到AVPlayerItem並將其保存爲數組每個響應。我已經得到了,如果AVPlayerItem.status改變它調用applyEffect功能項目的觀察員,否則立即應用效果:

if AVCurrentItem.status != AVPlayerItemStatus.readyToPlay { 
       AVCurrentItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil) 
       pushMessageLoading() 
      } else { 
       self.applyEffect(effectNumber: currentEffect) 
      } 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == "status" { 
     popMessageLoading() 
     self.applyEffect(effectNumber: currentEffect) 
     AVCurrentItem.removeObserver(self, forKeyPath: "status") 
    } 

} 

的AVPlayer財產「automaticallyWaitsToMinimizeStalling」是初始化時設置爲false。所以,第一次音頻播放的速度要求是1.0,但是所有的時間都是1.0。有什麼問題?

回答

0

罪惡的根源很簡單:我用AVPlayer.play相等於AVPlayer.rate = 1.0,而不是這個,你需要使用AVPlayer.rate = 所需的值