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" 或 运行 缓冲之外的是罪魁祸首,但后来发现它只是对象和错位的错误实施。
祝未来的程序员好运。
所以我正在使用 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" 或 运行 缓冲之外的是罪魁祸首,但后来发现它只是对象和错位的错误实施。
祝未来的程序员好运。