Передача ссылки на AVPlayer из ячейки в контроллер просмотра замораживает видео, но звук продолжается

#ios #swift #uicollectionviewcell #avplayer #avplayerviewcontroller

#iOS #swift #uicollectionviewcell #avplayer #avplayerviewcontroller

Вопрос:

У меня есть AVPlayer подкласс внутри UICollectionViewCell . У меня есть кнопка, которая при нажатии на нее должна отображать то же самое видео в полноэкранном режиме. Что я думал, я мог бы сделать, так это представить UIViewController и передать ему ссылку на AVPlayer , чтобы он мог добавить ее в качестве подпросмотра и продолжить воспроизведение. Однако происходит то, что он добавляет его в качестве подпросмотра, видео приостанавливается, но воспроизведение звука продолжается. Почему? Как я могу это решить?

Комментарии:

1. ваша проблема решена? поскольку я также сталкиваюсь с такой же проблемой

2. @Van Да, я забыл отметить свой ответ как решенный, см. Ниже.

Ответ №1:

Оказывается, если вы передаете AVPlayer другому контроллеру просмотра, вам нужно удалить исходную строгую ссылку на него. У вас может быть только одна ссылка на AVPlayer , иначе она начинает зависать и становится странной.

Комментарии:

1. даже после удаления ссылки из ячейки происходит ее замораживание.. Я добавил проигрыватель в avplayerlayer в ячейку таблицы, и при переходе к контроллеру проигрывателя я устанавливаю cell.player = nil. Можете ли вы, пожалуйста, помочь мне в этом?

Ответ №2:

Для этого используйте AVPlayerController. Всякий раз, когда вы нажимаете на кнопку, просто предоставляйте AVPlayerController тот же экземпляр.

     @IBAction func buttonTap(_ sender: Any) {
      let vc = storyboard?.instantiateViewController(withIdentifier:"FullScreenPlayer") as! FullScreenPlayerViewController
      vc.player = playerInCell
      present(vc, animated: false)
}
  

Примечание: FullScreenPlayerController является подклассом AVPlayerViewController

Комментарии:

1. По сути, это то, что я уже сделал, но я хочу сказать, что при представлении этого vc видео зависает, а аудио продолжает воспроизводиться.

2. Возможно, что-то не так с вашим AVPlayerLayer. Не могли бы вы опубликовать код.