2017-08-06 51 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 = 所需的值