AVPlayer中的SeekToTime在前进时停止播放流式音频
我正在使用AVPlayer传输音频。 它运作良好。 但是现在我需要制作一个滑块来向前和向后移动音频,就像典型的音乐播放器一样。 我使用了seekToTime
函数,它可以很好地处理本地音频文件。 但是当我从url流传输歌曲时,当我转发大范围的滑块时,该function会停止音频。
我的猜测是正在下载歌曲,如果我向前移动大范围的滑块,那么系统可能没有下载当时的歌曲数据包,所以它会停止播放器。
让我们说我只是按一个按钮来播放歌曲,但现在我立即在0到100秒移动滑块。 在这种情况下,系统无法正常工作并停止播放器。 由于当时缺少数据包。
有谁知道如何克服这个问题或有任何其他方法。 我正在使用SWIFT进行开发。 如果它可以在swift中工作,我也可以使用任何库。 这是我的function:
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
inheritance。
并处理它们:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { 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
它)。 这使您可以向用户指示文件的哪些部分已准备就绪。
与往常一样,您可以在文档中阅读更多内容: AVPlayerItem和AVPlayer
要阅读有关键值观测(KVO)的更多信息,请访问: 此处
- Swift 3 – 如何使计时器在后台工作
- 应用程序只启用肖像,但UIImagePickerController在iOS6中旋转
- 如何正确使用“openParentApplication”和“handleWatchKitExtensionRequest”以便“reply()”被调用?
- 在iOS 7中检测(侦听)audio路由更改
- 有趣的事情-6月6日
- swift iOS – 在快速滚动后混合了UICollectionView图像
- Objective-C中Singleton的替代scheme,用于更好的应用程序devise
- 如何在不指定大小的情况下为整个iOS应用程序设置自定义字体
- 如何乘以两列,并在CoreData中求和?