【发布时间】:2017-08-02 06:30:57
【问题描述】:
(注意:我正在运行 iOS 9 并且正在进行 HTTP 直播)
我有一个AVPlayer,想在播放器缓冲时显示一个加载指示器。当播放器开始使用慢速连接播放时,KVO 会调用这些属性:
isPlaybackBufferEmpty
isPlaybackLikelyToKeepUp
isPlaybackBufferFull
问题是,当缓冲完成时,这些相同的属性不会再次被调用(当我说完成时,我的意思是视频可以再次播放。)我的目标是在正确的时间隐藏加载指示器,但是这些不要再被叫了。
我在网上搜索,发现了这个雷达:http://www.openradar.me/25931165 不确定它是否 100% 相关
有什么想法吗?
// MARK: - Key-Value Observing Method
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(AVPlayerItem.status) {
switch playerItem.status {
case .unknown:
break
case .readyToPlay:
player.play()
case .failed:
postPlaybackDidFailWithErrorNotification(error: error)
}
}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackBufferEmpty) {
guard let currentItem = player.currentItem else {
return
}
if currentItem.isPlaybackBufferEmpty {
print("isPlaybackBufferEmpty = YES")
} else {
print("isPlaybackBufferEmpty = NO")
}
}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackLikelyToKeepUp) {
guard let currentItem = player.currentItem else {
return
}
if currentItem.isPlaybackLikelyToKeepUp {
print("isPlaybackLikelyToKeepUp = YES")
//player.play()
} else {
print("isPlaybackLikelyToKeepUp = NO")
}
}
else if keyPath == #keyPath(AVPlayer.currentItem.isPlaybackBufferFull) {
guard let currentItem = player.currentItem else {
return
}
if currentItem.isPlaybackBufferFull {
print("isPlaybackBufferFull = YES")
//player.play()
} else {
print("isPlaybackBufferFull = NO")
}
}
else if keyPath == #keyPath(AVPlayer.currentItem) {
// Cleanup if needed.
if player.currentItem == nil {
video = nil
playerItem = nil
}
}
else if keyPath == #keyPath(AVPlayer.rate) {
updateMetadata()
NotificationCenter.default.post(name: AssetPlaybackManager.NotificationName.playerRateDidChangeNotification, object: nil)
}
else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
【问题讨论】:
-
这方面有什么进展吗?与此同时,我发现了这个stackoverflow.com/questions/38867190/…
标签: ios swift avfoundation avplayer