【问题标题】:AVPLAYER VIDEO BUFFER FULL??? (How To Reset/Empty The Buffer)AVPLAYER 视频缓冲区已满??? (如何重置/清空缓冲区)
【发布时间】:2017-09-29 10:07:49
【问题描述】:

所以我正在使用 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 个视频:

编辑:2) 但是如果我关闭应用程序然后重新打开它,视频会在应用程序上播放,就像没有任何问题一样。我不太确定发生了什么。

【问题讨论】:

    标签: ios objective-c xcode8 avplayer avplayerviewcontroller


    【解决方案1】:

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

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

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

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

    视图确实加载了方法,因此它会被初始化一次,而不是每次通过新的视频 URL 时。

    我花了一整天的时间才弄清楚发生了什么,因为在查看了其他用户对此有问题后,我非常专注于“缓冲”或缓冲用尽是罪魁祸首,但后来发现它只是对象和错位的错误实现。

    祝未来的程序员好运。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多