AVPlayerViewController внутри представления не отображает элементы управления воспроизведением

Я работаю с Apple TV. У меня есть UIView внутри моего UIViewController. Я добавляю AVPlayerViewController в качестве подвида моего UIView. Кадр UIView — CGRect (x: 50, y: 50, ширина: 1344, высота: 756). Я устанавливаю кадр AVPlayerViewController равным кадру моего UIView.

Проблема в том, что видео нормально воспроизводится в своем кадре, но такие элементы управления, как пауза, воспроизведение, перемотка вперед и т. д., скрыты и не работают. Но когда я устанавливаю кадр как CGRect(x: 0, y: 0, ширина: 1920, высота: 1080), элементы управления видны и работают.

Мой код приведен ниже:

    let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
    let item = AVPlayerItem(url: url!)        
    self.player = AVPlayer(playerItem: item)
    self.avplayerController = AVPlayerViewController()
    self.avplayerController.player = self.player
    self.avplayerController.view.frame = videoPreviewLayer.frame
    self.avplayerController.showsPlaybackControls = true
    self.avplayerController.requiresLinearPlayback = true

    self.addChildViewController(self.avplayerController)
    self.view.addSubview(self.avplayerController.view)

    self.avpController.player?.play()

Пожалуйста помоги.


person Ruchi    schedule 24.03.2017    source источник


Ответы (2)


Это ожидаемое поведение:

AVPlayerViewController разработан таким образом, что в полноэкранном режиме доступны все возможности воспроизведения (прокрутка, доступ к информационной панели и т. д.). Когда пространство меньше полного экрана, предполагается, что это всего лишь один из нескольких интерактивных элементов на экране, и, таким образом, представление не должно поглощать все события сенсорной поверхности в качестве управления транспортом.

Подробнее об этом можно прочитать в этой теме: https://forums.developer.apple.com/thread/19526

person David Cordero    schedule 24.03.2017
comment
Эй, спасибо за разрешение, Дэвид. Могу ли я каким-либо образом показать элементы управления для avplayer, когда места меньше, чем полный экран? - person Ruchi; 27.03.2017
comment
@Ruchi да, вы можете сделать это, добавляя свои пользовательские представления к экземпляру AVPlayer, получая информацию из свойств AVPlayer, но невозможно использовать собственный AVPlayerViewController. - person David Cordero; 27.03.2017
comment
Ok. Знаете ли вы какие-либо сторонние библиотеки или фреймворки для этого? Я искал, но не смог найти ни одного. - person Ruchi; 27.03.2017

Мне удалось решить это с помощью этого кода:

let player = AVPlayer(url: self.videoUrl!)
let avPlayerController = AVPlayerViewController()

avPlayerController.player = player;
avPlayerController.view.frame = self.videoPlayView.bounds;

self.addChildViewController(avPlayerController)
self.videoPlayView.addSubview(avPlayerController.view);

Теперь AVPlayerViewController показывает большинство элементов управления воспроизведением, даже если они являются дочерними для uiview.

Предоставлено: https://www.techotopia.com/index.php/IOS_8_Video_Playback_using_AVPlayer_and_AVPlayerViewController

person Piyuesh    schedule 09.05.2018
comment
Я использовал это в представлении коллекции, которое находится в ячейке табличного представления. Элементы управления отображаются, но у меня не работают. - person Saeed Rahmatolahi; 08.05.2019