iOS:AVPlayerItem在收到“304未修改”响应时出现错误

iOS:AVPlayerItem在收到“304未修改”响应时出现错误,ios,avfoundation,avplayer,avasset,avplayeritem,Ios,Avfoundation,Avplayer,Avasset,Avplayeritem,这是一个非常奇怪的错误 我有一个tableView,每个单元格使用AVPlayer从远程服务器流式传输视频(想象一个类似藤蔓的时间轴)。所以当我滚动时,被重复使用的细胞会用新的视频重新配置他们的播放器 问题是:如果我快速地来回滚动,在屏幕上输入和输出相同的视频,AVPlayer发送的请求最终会改变,如果不匹配,则包含HTTP头,如果自以来修改,则包含,其余时间都不存在。它系统地使服务器返回一个304 Not Modified响应 这似乎不符合AVPlayer的playerItem,它将其状态更改

这是一个非常奇怪的错误

我有一个tableView,每个单元格使用
AVPlayer
从远程服务器流式传输视频(想象一个类似藤蔓的时间轴)。所以当我滚动时,被重复使用的细胞会用新的视频重新配置他们的播放器

问题是:如果我快速地来回滚动,在屏幕上输入和输出相同的视频,AVPlayer发送的请求最终会改变,如果不匹配,则包含HTTP头
,如果自
以来修改,则包含
,其余时间都不存在。它系统地使服务器返回一个
304 Not Modified
响应

这似乎不符合AVPlayer的playerItem,它将其状态更改为
AVPlayerItemStatusFailed
(有趣的是,AVPlayer的状态仍然是
AVPlayerStatusReadyToPlay
)。OSStatus-12983的错误为
AVErrorUnknown
(-11800)(在任何地方都没有记录,在整个iOS SDK中也没有头)

这就是它变得奇怪的时候:无论我接下来做什么,AVPlayer和它的playerItem都被不可挽回地烧掉了。即使我用另一个资源重新配置它们,它们也只会返回此状态并显示黑色边框。更奇怪的是:即使我初始化了另一个AVPlayer,AVPlayerItem和AVAsset,它也不会再玩了,我必须杀掉并重新启动应用程序

在这一点上,我相当无知。知道这里发生了什么吗?阻止播放机在其连接中包含这些头将修复它,但它不会公开其请求序列化程序。

304未修改 我遇到了
304 Not Modified
响应,当AVPlayer重放同一视频时会发生这种情况,
AVPlayerItem.status
变为
失败
,详细错误是
内容范围不匹配-应该是起始0长度2是起始0长度1048575
但是,区别在于如果
AVPlayer
切换到播放其他视频,则播放是正常的

详细Http请求和响应示例:

请求部分
如果修改时间:2017年6月24日星期六03:41:12 GMT
范围:字节=0-1

响应部分
HTTP/1.1 304未修改
内容范围:字节0-1048575/1385254

解决方案

修改服务器端逻辑,将
内容范围
值更改为
字节0-1/1385254
或直接删除
内容范围
,然后播放将正常开始。

我遇到了同样的问题。所以我添加
如果没有匹配:${unique value}
头以防止返回304。这对我有用

var-player=AVQueuePlayer()
func播放(url:字符串){
让标题=[“如果没有匹配”:“1”]
let options=[“avurlassehttpheaderfieldskey”:标题]
让asset=avurlaste(url:url(string:url)!,选项:options)
let playItem=AVPlayerItem(资产:资产)
player.replaceCurrentItem(带:playItem)
player.automaticallyWaitsToMinimizeStalling=false
玩家。立即播放(atRate:1)
}