AVPlayerItem一次只能占据玩家队列中的一个位置吗?

时间:2019-06-11 20:12:00

标签: ios swift avplayeritem avqueueplayer

我已经看到many questions了,都没有解决的办法。我得到:

  

AVPlayerItem一次只能占据玩家队列中的一个位置

在控制台中,快速点击查看按钮后,该按钮应该具有以下两种状态之一:

  1. 成功加载了视频
  2. 只有一个videoURL,然后将其加载到另一个VC中。

为什么会这样,我该如何解决?

这是我的代码,可以在过渡到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])
                }
            }

        }

1 个答案:

答案 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式解决方案)。