当AVPlayer播放来自网络流的资源时,它会在到达下载内容的末尾时暂停.
所以,我的问题是,如何知道它因网络不良而停止了?如何在下载之后播放它,比方说,下一个10秒的资产?
解决方法
您可以在AVPlayer获取空缓冲区时添加观察者:
[[self.tracksPlayer currentItem] addobserver:self
forKeyPath:@"playbackBufferEmpty"
options:NSkeyvalueObservingOptionNew
context:nil];
还有一个观察者,这样你就可以知道AVPlayer何时缓冲到足以跟上:
[[self.tracksPlayer currentItem] addobserver:self
forKeyPath:@"playbackLikelyToKeepUp"
options:NSkeyvalueObservingOptionNew
context:nil];
然后在KVO回调中检查一下:
- (void)observeValueForKeyPath:(Nsstring *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if (object == [self.tracksPlayer currentItem] &&
[keyPath isEqualToString:@"playbackBufferEmpty"]) {
if ([self.tracksPlayer currentItem].playbackBufferEmpty) {
NSLog(@"Buffer Empty");
}
} else if (object == [self.tracksPlayer currentItem] &&
[keyPath isEqualToString:@"playbackLikelyToKeepUp"]) {
if ([self.tracksPlayer currentItem].playbackLikelyToKeepUp) {
NSLog(@"LikelyToKeepUp");
}
}
}