创建过多 AVPlayer 实例时出现 AVPlayerItemStatusFailed 错误

2023-12-14

我正在开发一个 iOS 应用程序,它创建用户池提交的所有视频的提要,使用户能够浏览和查看其他人创建的视频。正如您可以想象的那样,我需要能够支持 feed 中任意数量的视频。

目前,我正在为每个视频创建并保留一个 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];

I call play on _videoPlayer当用户点击UIView,一切都很完美。也就是说,直到有足够的视频提交到 feed 为止......

一旦 Feed 中存在超过 18 个视频,新的实例AVPlayer不会玩,并且_videoPlayer.currentItem.statusAVPlayerItemStatusFailed有一个不明确的错误Code=-11800 "The operation could not be completed"。有趣的是,无论前 18 个视频的长度和质量如何,第一个崩溃的总是第 19 个视频。

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

我还没有找到这个问题的任何其他帐户。如果有人可以提供一些关于解决这种情况的更好方法的见解,或者甚至为我指出一个好的 AVPlayer 教程的方向,我将非常感激。谢谢!


如果有人遇到同样的问题,我最终创建了一个解决方法。事实证明,AVPlayer 实例的数量受到 iPhone 硬件的限制,我希望苹果能更清楚地说明这一点。这个问题就涉及到这一点。

为了解决这个限制,我创建并保留了一个AVURLAsset以及一个AVPlayerItem对于我想播放的每个视频。当需要播放视频时,我创建一个AVPlayer动态实例(不是共享实例),添加AVPlayerItem并播放视频。视频播放完毕后,我销毁了AVPlayer实例来释放硬件。这对于我和我的特殊情况来说效果很好,但是如果您遇到上述问题,那么这种方法的一些变化也应该对您有所帮助。

小吐槽:

在过去的几个月里,我一直在与 AVFoundation 进行广泛的合作,以多种不同的方式操作不同类型的媒体。我经常发现自己咒骂苹果的框架文档和与 AVFoundation 框架相关的示例。我希望他们能够为此支持他们的文档,因为很多框架都是复杂且不直观的。在互联网尘土飞扬的角落里发出的小小的咆哮不会改变任何事情,但我想我只是在发泄。

end rant

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建过多 AVPlayer 实例时出现 AVPlayerItemStatusFailed 错误 的相关文章

随机推荐

  • 使用量角器从日历中选择 angular-ui 日期选择器值

    我的日期选择器结构如下所示
  • 如何以编程方式将字段添加到 Delphi 中的表格

    在我的 Delphi 2009 应用程序中 我需要检查某个字段是否存在以及在应用程序执行期间是否未添加该字段 我已经弄清楚了该字段的测试 但无法添加字段 我试过这个 var fld TStringField begin if not ADO
  • 如何在 Laravel 5.6 中正确使用可选路由参数?

    我正在尝试使用 Laravel 5 6 创建一个 API 但是 在我看来 不可能在参数之前 之后使用可选的路由参数 我想实现以下目标 Route get api lists id items as gt api lists items ge
  • 无法使用 VBA .find 查找日期

    tmpArr 1 j 可以是日期或字符串 如果它是一个日期 那么我需要在 Range i4 ck4 中找到它 此范围内的日期被格式化为日期 我下面的代码没有找到我的日期 我究竟做错了什么 Data是 A 列中的代码 由字母数字组成 长度可能
  • 如何知道thrust::partition_copy的结果中有多少个元素

    我正在尝试使用推力库的partition copy函数对数组进行分区 我见过传递指针的示例 但我需要知道每个分区中有多少个元素 我尝试的是将设备向量作为 OutputIterator 参数传递 如下所示 include
  • Kafka 服务器不返回任何内容

    Zookeeper 已在 Windows 环境中启动并运行 现在 当我使用以下命令启动 Kafka 服务器时 bin windows kafka server start bat config server properties 没有显示任
  • 编写 Hyperledger Fabric Chaincode 时应遵循的最佳实践

    为了避免错误并编写高效的 Hyperledger Fabric Chaincode 应该遵循哪些最佳实践 编写 Hyperledger Fabric 链码的一般指南 有关详细说明 请参阅以下链接 https gist github com
  • Mockito - 奇怪的包范围类继承问题

    发现非常有趣的问题 并在调试后找到了重现它的场景 因此 如果我有一个包范围 B 的类 该类具有一些公共方法和扩展它的公共类 A package somepackage class B public void someMethod throw
  • 多处理 AttributeError 模块对象没有属性“__path__”

    我有一个很长的脚本 最后需要对庞大列表的所有项目运行一个函数 这需要很长时间 例如考虑 input a 1 2 3 4 a lengthy computation on some data print test 1 for testing
  • 如何使用Python字典? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我发现在 python 中迭代字典很困难 我已经通过 CodeAcademy 完成了学习并独立学习 但仍然觉得翻字典很困难 除了 Python 官方
  • java.io.IOException:参数无效

    我有一个带有负载均衡器的以集群模式运行的 Web 应用程序 它由两个 Tomcat T1 和 T2 组成 仅寻址一个 DB T2 通过 nfs 安装到 T1 这是两个节点之间唯一的差异 我有一个生成一些文件的java方法 如果请求 在 T1
  • 无法设置音量,音量控制未转发到系统

    我尝试使用安卓MediaPlayer框架来发挥mp3 file 看到这个问题 在我设法使其工作后 我很快意识到 音量增大 减小事件被类捕获javafxports android KeyEventProcessor并且永远不会被转发 我试图规
  • 计算特定撞击角度的 box2d 冲量

    我有一个球 圆形的动态物体 它在重力条件下作用在表面 蹦床 上 当球撞击蹦床 图中从 A 点到 B 点绘制 时 我想向球施加一个脉冲 垂直于蹦床表面 问题是现在我使用 b2Vec2 impulse b2Vec2 0 self fullMas
  • Google 地图 API + Google 地图引擎/我的地图

    我已经使用 Google 地图引擎将带有图层和形状的自定义地图嵌入到我的网页中 但它即将停止使用 替代品是 Google 我的地图 它很轻量 但似乎可以满足我的需求 现在回答我的问题 我正在使用 Google 地图 API 在我的网页上显示
  • 检测文档就绪时自动填充的值

    我有一个登录页面 我试图在其中切换按钮的显示以允许用户修改其角色 从用户的可用角色列表中选择 我最初隐藏按钮并显示它 txtUsername blur 我的问题 有没有办法获取 Chrome 自动填充值 如果我尝试在文档准备好时触发它 则该
  • 从应用程序资源保存到 SD 卡的图像编号

    我的应用程序由天列表视图组成 每天都有其特定的图像放置在无限的图库类中 我想做的是 将具有序列号的图像从应用程序可绘制资源 无限图库类 保存到 SD 卡 我试图获取保存图像的顺序号 如下所示 第一张图片 Image 1 png 第二张图片
  • 键入 ruby​​ 新哈希值

    Ruby 1 9 2 的新哈希语法有一个奇怪的问题 在 1 9 2 中如何将任何对象作为哈希中的键 在 1 8 7 哈希中它的工作原理 a b a gt some a gt another value a gt 3rd value 但在 1
  • 使用 sklearn RandomizedPCA 处理稀疏矩阵和稠密矩阵时的不同结果

    当我得到不同的结果时Randomized PCA稀疏矩阵和稠密矩阵 import numpy as np import scipy sparse as scsp from sklearn decomposition import Rando
  • 删除所有属性

    是否可以使用 jQuery 一次删除所有属性 img src example jpg width 100 height 100 to img I tried img removeAttr 没有运气 任何人 一个不需要 JQuery 的简单方
  • 创建过多 AVPlayer 实例时出现 AVPlayerItemStatusFailed 错误

    我正在开发一个 iOS 应用程序 它创建用户池提交的所有视频的提要 使用户能够浏览和查看其他人创建的视频 正如您可以想象的那样 我需要能够支持 feed 中任意数量的视频 目前 我正在为每个视频创建并保留一个 AVPlayer 实例 如下所