播放长音乐时,AVPlayer 中的搜索时间更快
Faster seek time in AVPlayer when streaming long music
我正在使用 Jukebox 库来传输远程音乐。我播放的音乐有 60 分钟长。当我尝试寻找它们时,播放大约需要 30-40 秒。我更改了库中的一些代码,使它们第一次可以立即播放。可以用,但不能加快查找速度。
public func seek(toSecond second: Int, shouldPlay: Bool = false) {
guard let player = player, let item = currentItem else {return}
player.seek(to: CMTimeMake(Int64(second), 1))
item.update()
if shouldPlay {
if #available(iOS 10.0, *) {
player.playImmediately(atRate: 1.0)
} else {
player.play()
}
if state != .playing {
state = .playing
}
}
delegate?.jukeboxPlaybackProgressDidChange(self)
}
根据您的评论,我发现每次滑动滑块时都会调用该函数。例如,当您将滑块从 0 移动到 50 时,它会被调用 50 次。因此您需要创建一个事件处理程序,它会在用户停止滑动时看起来。
您可以从How to detect the end of slider drag个答案中得到答案。
我正在使用 Jukebox 库来传输远程音乐。我播放的音乐有 60 分钟长。当我尝试寻找它们时,播放大约需要 30-40 秒。我更改了库中的一些代码,使它们第一次可以立即播放。可以用,但不能加快查找速度。
public func seek(toSecond second: Int, shouldPlay: Bool = false) {
guard let player = player, let item = currentItem else {return}
player.seek(to: CMTimeMake(Int64(second), 1))
item.update()
if shouldPlay {
if #available(iOS 10.0, *) {
player.playImmediately(atRate: 1.0)
} else {
player.play()
}
if state != .playing {
state = .playing
}
}
delegate?.jukeboxPlaybackProgressDidChange(self)
}
根据您的评论,我发现每次滑动滑块时都会调用该函数。例如,当您将滑块从 0 移动到 50 时,它会被调用 50 次。因此您需要创建一个事件处理程序,它会在用户停止滑动时看起来。
您可以从How to detect the end of slider drag个答案中得到答案。