AVPlayerItem может одновременно занимать только одну позицию в очереди игрока?

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

AVPlayerItem может одновременно занимать только одну позицию в очереди игрока.

В консоли после быстрого нажатия кнопки просмотра, которая должна иметь одно из двух состояний:

  1. Видео успешно загружено
  2. только видеоURL, который затем будет загружен в другой ВК.

Почему это происходит и как это исправить?

Это мой код, который обрабатывает это при переходе на 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])
                }
            }

        }

person Community    schedule 11.06.2019    source источник


Ответы (1)


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

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

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

person Community    schedule 11.06.2019