- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个 iOS 应用程序,该应用程序创建用户池提交的所有视频的提要,使用户能够浏览和查看其他人创建的视频。可以想象,我需要能够支持提要中任意数量的视频。
目前,我正在为每个视频创建并保留一个 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
,一切正常。也就是说,直到有足够多的视频提交给提要...
一旦提要中存在超过 18 个视频,AVPlayer
的新实例将不会播放,并且 _videoPlayer.currentItem.status
将为 AVPlayerItemStatusFailed
出现不明确的错误 Code=-11800 "The operation could not be completed"
。有趣的是,无论前 18 个视频的长度和质量如何,总是第 19 个视频最先崩溃。
我认为我不应该创建所有这些 AVPlayer 实例。我尝试使用 AVPlayer 单例包装器,当用户想要播放视频时,我将一个共享的 AVPlayer 实例传递给相关的 UIView 。这消除了 AVPlayerItemStatusFailed
错误,但使播放延迟无法使用。
我还没有找到关于此问题的任何其他说明。如果有人能提供一些关于这种情况的更好方法的见解,或者甚至能为我指明一个好的 AVPlayer 教程的方向,我将非常感激。谢谢!
最佳答案
如果有人遇到同样的问题,我最终创建了一个解决方法。事实证明,AVPlayer 实例的数量受 iPhone 硬件的限制,我希望 Apple 能更清楚地说明这一点。 This question touches on that.
为了绕过这个限制,我为每个要播放的视频创建并保留了一个 AVURLAsset
和一个 AVPlayerItem
。当需要播放视频时,我会即时创建一个 AVPlayer
实例(不是共享实例),将 AVPlayerItem
添加到其中,然后播放视频。视频播放完毕后,我销毁 AVPlayer
实例以释放硬件。这对我和我的特殊情况很有效,但如果您遇到上述问题,这种方法的一些变体也应该对您有所帮助。
小吐槽:
在过去的几个月里,我一直在与 AVFoundation 进行广泛的合作,以多种不同的方式处理不同类型的媒体。我经常发现自己在诅咒 Apple 的骨架文档和与 AVFoundation 框架相关的示例。我希望他们能为此加强他们的文档,因为很多框架都是令人费解和不直观的。在互联网尘土飞扬的角落里的这种小咆哮不会改变任何事情,但我想我只是在发泄。
结束咆哮
关于ios - 创建太多 AVPlayer 实例时出现 AVPlayerItemStatusFailed 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009913/
我有 2 个 View Controller ,第一个包含一个视频信息列表表,然后从列表中选择一个项目,通过导航打开详细 View Controller 。我在这个细节 Controller 上使用了
我正在开发一个 iOS 应用程序,该应用程序创建用户池提交的所有视频的提要,使用户能够浏览和查看其他人创建的视频。可以想象,我需要能够支持提要中任意数量的视频。 目前,我正在为每个视频创建并保留一个
有时 AVPlayer 会因 AVPlayerItemStatusFailed 而失败,并且在发生该失败后,AVPlayer 会继续因 AVPlayerItemStatusFailed 而失败。我试图
我是一名优秀的程序员,十分优秀!