0

在我的应用程序中,我使用 AVPlayer 在HCYoutubeParser library的帮助下播放 YouTube 视频。

我的问题是,当我加载一个新的视图控制器时,我仍然可以听到播放视频文件的声音。

我尝试用两种不同的方法加载下一个视图,但结果仍然相同。

方法一

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

方法二

使用故事板转场

我可以通过在 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) {
// ...
4

0 回答 0