当创build了太多的AVPlayer实例时,AVPlayerItemStatusFailed错误

我正在创build一个iOS应用程序,该应用程序创build用户池提交的所有video的供稿,使用户能够浏览和查看其他人创build的video。 正如您所想象的,我需要能够支持Feed中的任意数量的video。

目前,我正在为每个video创build和保留一个AVPlayer实例,如下所示:

//inside the init method of a UIView //create the AVPlayer and store it in a strong property NSString * urlString = @"aRemoteURL.mov"; NSURL * movURL = [NSURL URLWithString:urlString]; _videoPlayer = [[AVPlayer alloc]initWithURL:movURL]; //register callbacks for handling buffering [_videoPlayer.currentItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; [_videoPlayer.currentItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; //add the AVPlayerLayer to the view so you can see the video AVPlayerLayer * playerLayer = [AVPlayerLayer playerLayerWithPlayer:_videoPlayer]; playerLayer.frame = self.frame; [self.layer addSublayer:playerLayer]; 

当用户点击UIView ,我打电话给_videoPlayer play ,一切正常。 也就是说,直到有足够的video提交给Feed

如果Feed中存在超过18个video, AVPlayer的新实例将不会播放,而_videoPlayer.currentItem.status将为AVPlayerItemStatusFailed ,并带有不明确的错误Code=-11800 "The operation could not be completed" 。 有趣的是,无论前18个video的长度和质量如何,它总是第一个突破的第19个video。

我认为我不应该创build所有这些AVPlayer实例。 我尝试使用AVPlayer单例包装,当用户想要播放video时,我将共享的AVPlayer实例传递给相关的UIView。 这消除了AVPlayerItemStatusFailed错误,但使播放无法使用laggy。

我一直无法find这个问题的任何其他帐户。 如果有人能提供一些更好的方法来解决这种情况,甚至可以指导我一个良好的AVPlayer教程的方向,我将非常感激。 谢谢!

如果有人遇到同样的问题,我最终创造了一个工作。 事实certificate,AVPlayer实例的数量受到iPhone硬件的限制,我希望苹果更加清楚。 这个问题涉及到这一点。

为了解决这个限制,我创build并保留了一个AVURLAsset以及一个AVPlayerItem用于我想播放的每个video。 在播放video的时候,我会立即创build一个AVPlayer实例(不是共享实例),将AVPlayerItem添加到它并播放video。 video播放完毕后,我销毁AVPlayer实例以释放硬件。 这对我和我的专业情况都很好,但是如果遇到上面提到的问题,一些变化也可以帮助你。

小咆哮:

在过去的几个月中,我一直在AVFoundation进行相当广泛的工作,以各种不同的方式操纵不同types的媒体。 我经常发现自己在诅咒苹果的AVFoundation框架相关的骨架文档和例子。 我希望他们能够支持他们的文件,因为很多框架是错综复杂和不直观的。 在互联网的一个尘土飞扬的angular落里这个小小的咆哮不会改变什么,但我想我只是发泄。

结束咆哮