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