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

2024-06-08

我见过许多问题 https://stackoverflow.com/questions/6605771/an-avplayeritem-can-occupy-only-one-position-in-a-players-queue-at-a-time对此并没有一个解决方案。我正进入(状态:

一个 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])
                }
            }

        }

我研究了这个问题,发现了以下问题:

如果打印playerQueue的status.rawValue和AVPlayerQueue(AVPlayer的子类)的currentItem(AVPlayerItem),您会发现状态将为0或1。供参考:0表示status.unknown,1表示status.unknown表示 status.readyToPlay (您想要的)。因此,如果两次打印都为 0,则失败,这就是您收到错误的原因。该位置未知,但您正在尝试 .play() 玩家队列,这当然会导致错误。

我对您的建议(修复)是找到一种方法来更快地加载 AVPlayerItem 内的媒体(可以将 URL 放入 AVAsset 中,而不是尝试立即将 URL 初始化到 AVPlayer 中),或者可以使用 KVO 来检测它何时完成加载(有点像completionBlock 式的解决方案)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个 AVPlayerItem 一次只能在玩家队列中占据一个位置? 的相关文章

随机推荐