播放视频时,我看到AVPlayer
似乎与应用活动无关的费率更改通知。
当我的应用收到UIApplicationDidEnterBackgroundNotification
通知时,我告诉AVPlayer
to pause
。逻辑是它应该回到用户离开的同一个地方的前台。如果我在去后台时不调用pause
,则不会出现问题。
发送给玩家的事件序列是pause
, seekToTime:
, play
。通常,这可以正常工作,但是在应用程序被发送到后台然后返回到前台之后,每次play
调用都会导致AVPlayer
. -[AVPlayer play]
第一个是 1,第二个是紧随其后的 0。只要该播放器实例在使用中,每次调用都会继续这种模式 。
我可以设置断点,-[AVPlayer pause]
当速率变为 0 时,我看不到它被击中。如果我注释掉seekToTime:
调用,问题就会消失。如果我使用seekToTime:completionHandler:
,我也会遇到同样的问题,尽管我的块的finished
参数是YES
.
除了“我该如何解决这个问题”之外,我对有关如何检测与/AVPlayer
无关的利率变化原因的任何细节感兴趣。(似乎永远不会触发断点。)play
pause
-[AVPlayer setRate:]
(一种几乎可行的解决方法是在进入后台时保存播放器位置,让它播放,并在返回前台时固定位置。这也需要对音频电平进行一些操作,这可能是可行的,但另一个问题是并非所有背景通知都表明视图已被遮挡(例如,双击主页按钮)。这会导致我的解决方法在应用程序中断但仍可见时显示令人分心的移动图像。)
建议?
(最后一点额外信息:在我尝试过的所有情况下,如果我从后台返回并且然后进行了一次搜索。我可以做一些事情来降低它的频率,但除了摆脱 AVPlayer 并创建一个新实例之外,我可以做一些事情来消除它。这会导致很长的延迟,但比完全故障要好......我猜测。
我有一些证据表明寻道距离会影响结果,这表明错误可能出在底层缓冲机制中。在不知道导致速率变化的原因(播放/暂停除外)的情况下,我看不到进一步调查的方法。)