AVPlayerItem может занимать только одну позицию в очереди игрока за раз? - PullRequest
0 голосов
/ 11 июня 2019

Я видел много вопросов по этому вопросу, и ни у одного не было решения.Я получаю:

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 Ответ

1 голос
/ 12 июня 2019

Я изучил эту проблему и обнаружил следующую проблему:

Если вы напечатаете status.rawValue playerQueue и currentItem (AVPlayerItem) AVPlayerQueue (подкласс AVPlayer), вы обнаружите, что состояние будет 0 или 1. Для справки: 0 означает состояние. неизвестно, а 1 означает status.readyToPlay (тот, который вы хотите). Так что, если оба отпечатка равны 0, это не удастся, поэтому вы получите ошибку. Позиция неизвестна, но вы пытаетесь .play () playerQueue, что, конечно, приводит к ошибке.

Моя рекомендация для вас (исправление) состоит в том, чтобы либо найти способ ускорить загрузку мультимедиа внутри AVPlayerItem (что может быть сделано путем помещения URL-адреса в AVAsset вместо попытки немедленно инициировать URL-адрес в AVPlayer), или может использовать KVO, чтобы определить, когда он завершил загрузку (что-то вроде решения, завершающего блокировку).

...