播放器视频缓冲充分??? (如何重置/清空缓冲区)

时间:2017-09-29 10:07:50

标签: ios objective-c xcode8 avplayer avplayerviewcontroller

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

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

我试图找出每个视频播放后如何重置缓冲区,或者至少知道缓冲区空间不足以便我可以在缓冲区加载时显示图像或其他东西,这样我就可以了拨打电话继续显示视频。下面是我的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个视频:

enter image description here

编辑:2)但是,如果我关闭应用程序然后重新打开它,那么视频会在应用程序上播放,就像错误一样。我不确定最新情况。

1 个答案:

答案 0 :(得分:0)

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

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

AVPlayerViewController是(STRONG)引用导致块内的保留周期,因此每次我进行API调用以获取新视频时,我都会初始化一个全新的AVPlayerViewController而不释放前一个。与此同时,我发现我在API成功响应中有其他对象也被强引用。所以我回去做了那些弱的参考,然后我搬了

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

对视图执行了加载方法,因此它初始化为ONCE而不是每次新的视频URL都通过。

我花了一整天的时间才弄明白发生了什么,因为在看到其他用户遇到问题之后,我如此专注于“缓冲”或者用尽缓冲是罪魁祸首,但是要找出它只是对象和错位的糟糕实现。

祝未来的程序员好运。