我已经看到many questions了,都没有解决的办法。我得到:
AVPlayerItem一次只能占据玩家队列中的一个位置
在控制台中,快速点击查看按钮后,该按钮应该具有以下两种状态之一:
为什么会这样,我该如何解决?
这是我的代码,可以在过渡到VC时处理它:
if numberMedia == 0 {
if selectedPost!.interimMedia[numberMedia].playerLayer != nil {
playCurrentMediaVid(currentMedia: selectedPost!.interimMedia[numberMedia])
} else {
let videoURL = selectedPost!.interimMedia[numberMedia].videoURL
if videoURL != nil {
//if we did not preload the video but have the cached vidURL
preloadVideo(media: selectedPost!.interimMedia[numberMedia])
playCurrentMediaVid(currentMedia: selectedPost!.interimMedia[numberMedia])
} else {
//if we dont have the cached vid url
selectedPost!.interimMedia[numberMedia].videoURL = getVideoURL(stringUrl: selectedPost!.interimMedia[numberMedia].videoURLString)
preloadVideo(media: selectedPost!.interimMedia[numberMedia])
playCurrentMediaVid(currentMedia: selectedPost!.interimMedia[numberMedia])
}
}
}
答案 0 :(得分:1)
我调查了这个问题,发现了以下问题:
如果打印playerQueue的status.rawValue和AVPlayerQueue(AVPlayer的子类)的currentItem(AVPlayerItem),您会发现状态为0或1。供参考:0表示状态。未知,1表示status.readyToPlay(您想要的一种)。因此,如果两个打印都为0,则打印失败,这就是为什么会出现错误。该位置是未知的,但是您正在尝试.play()playerQueue,这当然会导致错误。
我对您的建议(修复)是找到一种方法来加快AVPlayerItem中媒体的加载速度(可以通过将URL放入AVAsset中来完成,而不是尝试立即将URL初始化为AVPlayer),也可以使用KVO来检测何时完成加载(有点像completeBlock式解决方案)。