这是一个非常奇怪的错误。
我有一个 tableView,每个单元格都使用一个AVPlayer
从远程服务器流式传输视频(想想类似 Vine 的时间轴)。因此,当我滚动时,被重复使用的单元格会使用新视频重新配置其播放器。
问题是:如果我非常快速地来回滚动,让相同的视频进出屏幕,AVPlayer 发送的请求最终会发生变化,包括 HTTP 标头If-None-Match
和If-Modified-Since
,其余时间都不存在。它系统地使服务器返回304 Not Modified
响应。
这似乎不喜欢 AVPlayer 的 playerItem,它将其状态更改为AVPlayerItemStatusFailed
(有趣的是,AVPlayer 的状态仍然是AVPlayerStatusReadyToPlay
)。错误是AVErrorUnknown
(-11800) 和 OSStatus -12983 (在任何地方都没有记录,并且在整个 iOS SDK 中没有标题)。
那是它变得奇怪的时候:无论我接下来做什么,AVPlayer 和它的 playerItem 都被不可撤销地烧毁了。即使我用其他资产重新配置它们,它们也只会返回此状态并显示黑框。更奇怪的是:即使我初始化了另一个 AVPlayer、AVPlayerItem和AVAsset,它也不会再播放了,我必须杀死并重新启动应用程序。
在这一点上,我很无知。知道这里发生了什么吗?阻止播放器在其连接中包含这些标头将修复它,但它不会暴露其请求序列化程序。