一个 AVPlayerItem 一次只能占据玩家队列中的一个位置?
An AVPlayerItem can occupy only one position in a player's queue at a time?
我已经看到 many questions 并且 none 有解决方案。我得到:
An AVPlayerItem can occupy only one position in a player's queue at a time
在控制台中快速点击一个应具有以下两种状态之一的视图按钮后:
- 成功预加载视频
- 只有一个视频 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 的 currentItem(AVPlayerItem)(sub-class of AVPlayer),你会发现状态将为 0 或 1。对于参考:0 表示 status.unknown,1 表示 status.readyToPlay(您想要的那个)。因此,如果两次打印都为 0,则失败,这就是您收到错误的原因。该位置未知,但您正在尝试 .play() playerQueue,这当然会导致错误。
我对你的建议(修复)是找到一种方法来加快 AVPlayerItem 中媒体的加载速度(这可以通过将 URL 放入 AVAsset 而不是尝试立即将 URL 初始化为 AVPlayer),或者可以使用 KVO 来检测它何时完成加载(有点像 completionBlock-esque 解决方案)。
我已经看到 many questions 并且 none 有解决方案。我得到:
An AVPlayerItem can occupy only one position in a player's queue at a time
在控制台中快速点击一个应具有以下两种状态之一的视图按钮后:
- 成功预加载视频
- 只有一个视频 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 的 currentItem(AVPlayerItem)(sub-class of AVPlayer),你会发现状态将为 0 或 1。对于参考:0 表示 status.unknown,1 表示 status.readyToPlay(您想要的那个)。因此,如果两次打印都为 0,则失败,这就是您收到错误的原因。该位置未知,但您正在尝试 .play() playerQueue,这当然会导致错误。
我对你的建议(修复)是找到一种方法来加快 AVPlayerItem 中媒体的加载速度(这可以通过将 URL 放入 AVAsset 而不是尝试立即将 URL 初始化为 AVPlayer),或者可以使用 KVO 来检测它何时完成加载(有点像 completionBlock-esque 解决方案)。