AVPlayer находится в состоянии ReadyToPlay, но не может начать воспроизведение - PullRequest
0 голосов
/ 24 мая 2018

Вот мой код для запуска видео:

let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let playerAV = AVPlayer(url: videoURL! as URL)
let playerLayerAV = AVPlayerLayer(player: playerAV)
playerLayerAV.frame = ...
self.view.layer.addSublayer(playerLayerAV)
playerAV.play()

Я вижу предварительный просмотр видео, я также вижу, что он загружается, я даже могу перемещать ползунок и видеть, что предварительный просмотр меняется навремя я выбираю.Но если я нажму на игру - ничего не произойдет.Я пытался вручную нажать кнопку «Play», я пытался программно вызвать .play, состояние кнопки «Play» меняется на «||»но затем сразу переключается на «>».

Я также отслеживаю отладочную информацию, связанную с состоянием игрока, и замечаю следующее.Право, когда я создал игрока, статус ниже:

Status: ReadyToPlay
TimeControl: WaitingToPlayAtSpecifiedRate
ReasonToWait: AVPlayerWaitingToMinimizeStallsReason
Time: {0/1 = 0.000}
Rate: 1
Loaded Time Ranges: [Location=0,Length=0]

И он почти мгновенно меняет свой TimeControl: Paused и Rate: 0:

Status: ReadyToPlay
TimeControl: Paused
ReasonToWait:
Time: {0/1 = 0.000}
Rate: 0
Loaded Time Ranges: [Location=0,Length=0]

В обоих случаях это показывает, чтоplayerItem.LoadedTimeRanges имеет один элемент, но длина и расположение равны 0, когда пользовательский интерфейс показывает, что видео полностью загружено и готово к воспроизведению.

enter image description here

1 Ответ

0 голосов
/ 25 мая 2018

Оказалось, что нет проблем с настройкой видео, просмотров или контроллеров.Видео загружено и готово к воспроизведению и сразу же приостановлено из-за режима общего доступа audioSession.Ранее было установлено значение .record для обработки другого варианта использования приложения.

Решение состоит в том, чтобы восстановить оригинальный режим audioSession, который включает воспроизведение, и видео будет воспроизводиться без проблем.

...