AVPLAYER 视频缓冲区已满??? (如何 Reset/Empty 缓冲区)

AVPLAYER VIDEO BUFFER FULL??? (How To Reset/Empty The Buffer)

所以我正在使用 AVPlayerViewController 并且我正在做的加载视频基本上是这样的:

我的数据库中有大量视频,我在当前视频播放完后调用数据库检索下一个视频,我认为问题可能与缓冲区已满有关?在堆栈和互联网上环顾四周后,我找不到对我有帮助的答案。

我正在尝试找出如何在播放每个视频后重置缓冲区,或者至少知道缓冲区何时超出 space 以便我可以在缓冲区中显示图像或其他内容负载,这样我就可以打电话继续显示视频。下面是我的 AVPlayerViewController 代码。

AVPlayerViewController *playerViewController = [[AVPlayerViewController 
alloc] init];

playerViewController.player = [AVPlayer @"www.videoURL.com"];

self.avPlayerViewcontroller = playerViewController;

[playerViewController.view setFrame: userView.bounds];

[userView addSubview:playerViewController.view];

self.avPlayerViewcontroller.player.volume = 0.0;
[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(volumeChanged:) 
name:@"AVSystemController_SystemVolumeDidChangeNotification" 
object:nil];


[playerViewController.player play];
[userImageView setHidden:NO];

编辑:1) 我将要播放大约 15-25 个视频,然后视频播放会显示以下内容:

编辑:2) 但是如果我关闭应用程序然后重新打开它,视频会在应用程序上正常播放。我不太确定发生了什么。

对于遇到相同情况的任何人,对我来说,问题出在我进行 API 调用的同一个块内 我正在初始化这个:

 AVPlayerViewController *playerViewController = 
[[AVPlayerViewController alloc] init];

AVPlayerViewController 是(强)引用,导致块内的保留周期,所以每次我调用 API 来获取新视频时,我都会初始化一个全新的 AVPlayerViewController 而不会释放前一个。除此之外,我发现 API 成功响应中的其他对象也被强引用。所以我回去做了一个弱参考然后我移动了

 AVPlayerViewController *playerViewController = 
[[AVPlayerViewController alloc] init];

视图没有加载方法,因此它被初始化一次,而不是每次有新视频 URL 出现时。

我花了一整天的时间才弄清楚这是怎么回事,因为在看到其他用户对此有问题之后,我非常专注于 "BUFFERING" 或 运行 缓冲之外的是罪魁祸首,但后来发现它只是对象和错位的错误实施。

祝未来的程序员好运。