AVPlayerLayer, существующий даже после вызова метода viewDidDisappear в iOS

В моем приложении я использую AVPlayer для воспроизведения видео на YouTube с помощью библиотеки HCYoutubeParser.

У меня вопрос, когда я загружаю новый контроллер представления, я все еще слышу звук воспроизводимого видеофайла.

Я попытался загрузить следующее представление двумя разными способами, но результат был тот же.

Способ 1

FourthViewController *fourthViewCont = [self.storyboard instantiateViewControllerWithIdentifier:@"FourthViewControllerID"];
[self.navigationController pushViewController:fourthViewCont animated:YES];

Способ 2

Использование раскадровки

Я могу избавиться от этой проблемы, добавив следующий код внутри метода viewDidDisappear

[avPlayerLayer removeFromSuperlayer];
avPlayerLayer = nil;

Но что мне нужно знать, даже когда представление исчезает, почему экземпляр avPlayerLayer имеет ссылку?

Я добавляю слой игрока, как показано ниже

[_playerContainerView.layer addSublayer:avPlayerLayer];

_playerContainerView - это не основной UIView, а UIView, расположенный внутри основного UIView.

Я объявил переменную AVPlayerLayer в расширении класса, как показано ниже

@interface PlayerViewController ()
{
    AVPlayerItem *avPlayerItem;
    AVPlayerLayer *avPlayerLayer;
}

а также AVPlayer и вид контейнера имеют слабые ссылки

@property (weak, nonatomic) AVPlayer *avPlayer;
@property (weak, nonatomic) IBOutlet UIView *playerContainerView;

Моя путаница еще больше возрастает в следующем сценарии: когда я возвращаюсь из PlayerViewController к своему предыдущему виду, проигрыватель корректно останавливается без какого-либо фонового звука.

Кто-нибудь может объяснить эту ситуацию?

Редактировать:

Вот как я инициализировал AVPlayer и AVPlayerLayer

_avPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem];
avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:_avPlayer];

После этих инициализаций я добавил подслой и все эти коды внутри блока завершения.

[HCYoutubeParser h264videosWithYoutubeURL:youtubeUrl completeBlock:^(NSDictionary *videoDictionary, NSError *error) {
// ...

0 ответов

Другие вопросы по тегам