Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayerItem在玩家中只能占据一个位置';一次排队吗?_Ios_Swift_Avplayeritem_Avqueueplayer - Fatal编程技术网

Ios AVPlayerItem在玩家中只能占据一个位置';一次排队吗?

Ios AVPlayerItem在玩家中只能占据一个位置';一次排队吗?,ios,swift,avplayeritem,avqueueplayer,Ios,Swift,Avplayeritem,Avqueueplayer,我已经看到了这一点,没有人有解决办法。我得到: AVPlayerItem一次只能占据玩家队列中的一个位置 在控制台中快速点击视图按钮后,该按钮应具有以下两种状态之一: 已成功预加载视频 只有一个视频URL,然后将加载到另一个VC中 为什么会发生这种情况?我如何解决它? 这是我的代码,它在转换到VC时处理了这个问题: if numberMedia == 0 { if selectedPost!.interimMedia[numberMedia].playerLayer !

我已经看到了这一点,没有人有解决办法。我得到:

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

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

  • 已成功预加载视频
  • 只有一个视频URL,然后将加载到另一个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.readyToPlay(您想要的)。因此,如果两次打印都为0,则会失败,这就是为什么会出现错误。位置未知,但您正在尝试对playerQueue执行.play(),这当然会导致错误

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