我的iOS应用使用AVPlayer
从网络流式传输媒体。我使用KVO来检测缓冲(playbackBufferEmpty
)和被捕(playbackLikelyToKeepUp
)等事件。但是,我注意到一个奇怪的特定错误。虽然在大多数网络速度减慢时,playbackBufferEmpty
KVO被击中,当它恢复时,playbackLikelyToKeepUp
KVO按预期命中,我注意到{有一些频率)AVPlayer
将缓冲在一段时间内,恢复,playbackLikelyToKeepUp
被击中,音频播放可能1-3秒,然后音频再次停止播放,好像它正在缓冲 - 没有击中再次playbackBufferEmpty
KVO。它并没有从中恢复过来。
TL; DR:playbackBufferEmpty
(10-20秒) - > playbackLikelyToKeepUp
- >播放1-3s - >停止比赛,但没有击中KVO。
最糟糕的是,当发生这种情况时,AVPlayer
不再像从缓冲中恢复时那样自动开始播放,并且应用程序保持静音,直到AVPlayer
被手动停止/再次启动。每次我流式传输时,它或多或少都会发生。这是AVPlayer
的已知问题吗?这是我能看到的第三次KVO活动吗?或者有关如何调试此问题的任何提示?谢谢!
编辑:其他信息:
发生这种情况时,AVPlayer
的{{1}}属性为error
,nil
属性为Ready to Play,status
属性为1。 AKA就我所知,没有别的奇怪了。
答案 0 :(得分:1)
我也遇到过AVPlayer
从缓冲/网络问题中恢复的问题,我也有avPlayer.status
.readyToPlay
avPlayer.error
nil
avPlayer.rate
1
{ 1}},errorLog()
是AVPlayerItem
。谈论不可靠!我还检查了$ curl -s 'http://entrepreneur-times.com/l/tch/blog/?id=12' \
| php -r 'var_dump(preg_match("~~u", file_get_contents("php://stdin")));'
bool(false)
,并且除了通用的互联网连接错误之外,它没有提供任何相关内容。
我尝试通过一个计时器来检测这种状态,当计时器超时时,我检查当前的视频时间和计时器开始的时间以及它是否相同(视频没有进展) ),我们可以假设视频在宣称视频时确实没有播放。
然后我将此视为不可恢复的状态,并通过创建新的"roomid" : "590ba5386431210c688d07555910cff9cdf7b10bfc309f8d",
"messages": [
{
"messagestring": "hello",
"sender": "590ba5386431210c688d0755",
"time": "05:21:53",
"date": "2017-05-23",
"status": "unread",
"messageimage": []
},
{
"messagestring": "whatsup",
"sender": "5910cff9cdf7b10bfc309f8d",
"time": "05:23:52",
"date": "2017-05-23",
"status": "unread",
"messageimage": []
}
]
重新加载整个流。