首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查AVPlayer的播放状态

检查AVPlayer的播放状态
EN

Stack Overflow用户
提问于 2011-04-14 05:26:51
回答 5查看 109K关注 0票数 109

有没有办法知道AVPlayer播放是停止了还是结束了?

EN

回答 5

Stack Overflow用户

发布于 2012-02-15 14:05:58

您可以使用以下命令来判断它正在播放:

代码语言:javascript
复制
AVPlayer *player = ...
if ((player.rate != 0) && (player.error == nil)) {
    // player is playing
}

Swift 3扩展:

代码语言:javascript
复制
extension AVPlayer {
    var isPlaying: Bool {
        return rate != 0 && error == nil
    }
}
票数 342
EN

Stack Overflow用户

发布于 2015-12-17 04:59:09

NSNotification的一个更可靠的替代方法是将您自己添加为播放器的rate属性的观察者。

代码语言:javascript
复制
[self.player addObserver:self
              forKeyPath:@"rate"
                 options:NSKeyValueObservingOptionNew
                 context:NULL];

然后检查观察到的速率的新值是否为零,这意味着播放已经因为某种原因而停止,比如到达终点或因为缓冲区空而停止播放。

代码语言:javascript
复制
- (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的情况,为了了解到底是什么原因导致播放停止,您可以进行以下检查:

代码语言:javascript
复制
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;

票数 18
EN

Stack Overflow用户

发布于 2016-07-05 20:23:08

基于maz回答的Swift扩展

代码语言:javascript
复制
extension AVPlayer {

    var isPlaying: Bool {
        return ((rate != 0) && (error == nil))
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5655864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档