我正在使用AVPlayer,我只是试图正确地切换我的播放/暂停按钮 . 我不能只根据用户操作进行切换,因为我有时会自动启动/停止播放器 .
所以我正在观察AVPlayer的 rate
键,当发送通知时,我检查了 rate
.
-
如果为0,则显示"play"按钮 . (播放器已暂停)
-
如果为1,则显示"pause"按钮 . (玩家正在玩)
除了一种情况外,这种方法很有效 . 当应用程序进入后台然后再次变为活动状态时,速率首先变为“1”然后变为“0” . 所以按钮从“暂停”变为“播放” .
但是,视频继续播放,但我从未收到"1"的另一个通知 .
我甚至将此添加到了观察 rate
的代码块:
[self performSelector:@selector(logRate) withObject:nil afterDelay:3.0];
我只是在观察到最后一次“0”速率变化后3秒再次检查速率 . 视频仍在播放,但速率仍为“0” .
有谁知道:1 . 为什么会这样? 2.除了 rate
之外,有没有更好的方法来观察AVPlayer是播放还是暂停?
1 回答
我不知道为什么会发生这种情况,但我确实找到了一个孤立的解决方案,也可以帮助更有知识的人解决这个问题 .
我发现如果我在前往背景之前“暂停”播放器,当我走到前台并恢复“播放”时,我从未将速率从“1”变为“0” . 它去了“1”并留在那里 .
所以对于我的情况我只是添加了一个观察:
我现在暂停播放器
willResignActive:
.这告诉我的是,在
AVPlayer
播放时进入后台会使AVPlayer
处于导致我询问的错误的状态,但我现在还不知道任何进一步的细节 .