gpt4 book ai didi

ios - AVPlayer 中的 SeekToTime 在前进时停止播放流音频

转载 作者:行者123 更新时间:2023-11-30 13:19:27 26 4
gpt4 key购买 nike

我正在使用 AVPlayer 流式传输音频。它运作良好。但现在我需要制作一个 slider 来向前和向后移动音频,就像典型的音乐播放器一样。我使用了 seekToTime 函数,它非常适合本地音频文件。但是,当我从 Web url 流式传输歌曲时,当我将 slider 向前移动较大范围时,该功能会停止音频。

我的猜测是,歌曲正在下载,如果我将 slider 向前移动较大范围,那么可能是系统当时尚未下载歌曲数据包,因此它会停止播放器。

假设我只是按了一个按钮来播放歌曲,但现在我在第 0 秒到第 100 秒时立即移动 slider 。在这种情况下,系统无法工作并停止播放器。由于当时缺少数据包。

有谁知道如何解决这个问题或者有其他方法吗?我正在使用 SWIFT 进行开发。如果任何库都能快速运行,我也愿意使用它。这是我的功能:

func forward () {
timeGap = slider.value
let preferredTimeScale : Int32 = 1
let targetTime : CMTime = CMTimeMake(timeGap, preferredTimeScale)

player.seekToTime(targetTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)

}

提前致谢。

最佳答案

这个答案很大程度上基于这个:https://stackoverflow.com/a/7195954/765298 。所有的功劳都应该放在那里,因为这只是 swift 的翻译。

您的假设是正确的,当向前寻找尚未缓冲的部分时,播放器会停止。问题是它仍然缓冲数据,但在准备好时不会自动启动。因此,重新表述 swift 的链接答案:

设置观察者:

player.currentItem?.addObserver(self, forKeyPath: "playbackBufferEmpty", options: .New, context: nil)
player.currentItem?.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .New, context: nil)

请注意,为了能够观察值,传递的 self 需要继承自 NSObject

并处理它们:

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

guard keyPath != nil else { // a safety precaution
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
return
}

switch keyPath! {
case "playbackBufferEmpty" :
if player.currentItem!.playbackBufferEmpty {
print("no buffer")
// do something here to inform the user that the file is buffering
}

case "playbackLikelyToKeepUp" :
if player.currentItem!.playbackLikelyToKeepUp {
self.player.play()
// remove the buffering inidcator if you added it
}
}
}

您还可以从当前正在播放的 AVPlayerItem 获取有关可用时间范围的信息(如果您自己没有创建的话,可以通过 player.currentItem 访问它)。这使您能够向用户指示文件的哪些部分已准备就绪。

一如既往,您可以在文档中阅读更多内容:AVPlayerItemAVPlayer

要了解有关键值观察 (KVO) 的更多信息:here

关于ios - AVPlayer 中的 SeekToTime 在前进时停止播放流音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com