func configurePlayer() {
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
var timeNow = Int(self.player.currentTime().value) / Int(self.player.currentTime().timescale)
var currentMins = timeNow / 60
var currentSec = timeNow % 60
var duration: NSString = "\(currentMins):\(currentSec)"
self.durationOutlet.text = duration // <<- Green line here
self.sliderOutlet.value = Float(timeNow)
}
}
我正在创建一个音乐播放器并且一切正常,但是当我尝试将持续时间计时器计数或滑块设置为动画时,它会崩溃。它工作正常2秒,但随后崩溃。我在viewDidLoad
中调用此方法。除了我在上面指出的绿线外,没有任何错误。
答案 0 :(得分:0)
答案 1 :(得分:0)
当您将作为Int64的CMTimeValue的time.value转换为Int时,它会崩溃。它只会在您使用32位设备时崩溃。所以我使用Int64代替Int,它对我有用。不过,我仍然不确定它为什么会起作用。所以我建议你尝试这样的事情:
let timeNow = Int64(time.value) / Int64(time.timescale)
答案 2 :(得分:0)
如果不了解播放器的设置方式,很难说清楚。我不相信您可以使用AVAudioPlayer流式传输托管在远程服务器上的文件。为此你必须使用AVPlayer。您可能希望添加一些日志记录以打印出现在的内容,以便查看它在中断时的值。如果您使用的是AVPlayer,则需要检查AVPlayerItem的状态是否为ReadyToPlay。尝试这样的事情:
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
if self.player.currentItem?.status == .ReadyToPlay {
var timeNow = Int(self.player.currentTime().value) / Int(self.player.currentTime().timescale)
var currentMins = timeNow / 60
var currentSec = timeNow % 60
var duration: NSString = "\(currentMins):\(currentSec)"
self.durationOutlet.text = duration // <<- Green line here
self.sliderOutlet.value = Float(timeNow)
}
}
答案 3 :(得分:0)
以下是播放器处于播放模式时swift更新滑块的代码。
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
if self.player.currentItem?.status == .ReadyToPlay {
let thePlayerItem : AVPlayerItem = self.player.currentItem!
let duration : Float64 = CMTimeGetSeconds(thePlayerItem.duration);
let time : Float64 = CMTimeGetSeconds(self.player.currentTime());
self.sliderVideoPlayer.value = Float (time / duration);
}
}