Ответ 1
Обнаружено, что это было результатом использования AutoLayout
. В viewDidLoad
self.playerContainer.bounds
есть CGRectZero
.
Мне пришлось назначить фрейм playerLayer в viewDidAppear
, чтобы он соответствовал контейнеру игрока.
Я переключаюсь с MPMoviePlayerController
на AVPlayer
, так как мне нужен более тонкий контроль над обменом видео. Файл .mov
, который я играл с MPMoviePlayerController
, воспроизводился нормально, но после переключения на AVPlayer
я слышу звук из видео, но на видео просто отображается фон представления, в который я добавил AVPlayerLayer
to. Вот как я инициализирую AVPlayer
.
self.player = [[AVPlayer alloc] initWithURL:video];
AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
playerLayer.frame = self.playerContainer.bounds;
[self.playerContainer.layer addSublayer:playerLayer];
Затем я просто выдаю a.
[self.player play];
Когда воспроизводится видео, я слышу звук, но не вижу видео. Я также попытался установить zPosition на неудачу.
playerLayer.zPosition = 1;
Обнаружено, что это было результатом использования AutoLayout
. В viewDidLoad
self.playerContainer.bounds
есть CGRectZero
.
Мне пришлось назначить фрейм playerLayer в viewDidAppear
, чтобы он соответствовал контейнеру игрока.
Поскольку мы используем AVPlayerLayer (подкласс CALayer), нам нужно установить фрейм
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.avPlayerLayer.frame = self.movieContainerView.bounds;
}
Убедитесь, что вы выполняете видеоролик:
[self.player play]
вызывается из основной очереди отправки (Swift 3):
DispatchQueue.main.async {
self.player.play()
}