有没有办法知道AVPlayer
播放是停止了还是结束了?
发布于 2012-02-15 14:05:58
您可以使用以下命令来判断它正在播放:
AVPlayer *player = ...
if ((player.rate != 0) && (player.error == nil)) {
// player is playing
}
Swift 3扩展:
extension AVPlayer {
var isPlaying: Bool {
return rate != 0 && error == nil
}
}
发布于 2015-12-17 04:59:09
NSNotification
的一个更可靠的替代方法是将您自己添加为播放器的rate
属性的观察者。
[self.player addObserver:self
forKeyPath:@"rate"
options:NSKeyValueObservingOptionNew
context:NULL];
然后检查观察到的速率的新值是否为零,这意味着播放已经因为某种原因而停止,比如到达终点或因为缓冲区空而停止播放。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context {
if ([keyPath isEqualToString:@"rate"]) {
float rate = [change[NSKeyValueChangeNewKey] floatValue];
if (rate == 0.0) {
// Playback stopped
} else if (rate == 1.0) {
// Normal playback
} else if (rate == -1.0) {
// Reverse playback
}
}
}
对于rate == 0.0
的情况,为了了解到底是什么原因导致播放停止,您可以进行以下检查:
if (self.player.error != nil) {
// Playback failed
}
if (CMTimeGetSeconds(self.player.currentTime) >=
CMTimeGetSeconds(self.player.currentItem.duration)) {
// Playback reached end
} else if (!self.player.currentItem.playbackLikelyToKeepUp) {
// Not ready to play, wait until enough data is loaded
}
别忘了在结束的时候让你的玩家停下来:
self.player.actionAtItemEnd = AVPlayerActionAtItemEndPause;
发布于 2016-07-05 20:23:08
基于maz回答的Swift扩展
extension AVPlayer {
var isPlaying: Bool {
return ((rate != 0) && (error == nil))
}
}
https://stackoverflow.com/questions/5655864
复制相似问题