【问题标题】:Controlling the pre-buffering of items in the avqueueplayer控制 avqueueplayer 中项目的预缓冲
【发布时间】:2011-09-12 08:41:44
【问题描述】:

请有人告诉我是否有办法选择性地预缓冲 AVQueuePlayer 数组中的 avplayeritems,而不是将其留给 AVQueuePlayer 自动方式,仅在第一个项目完成时加载下一个项目玩。

我正在加载一个由 4 个短片组成的序列,我想在告诉 AVQueuePlayer 播放数组之前预先缓存它们。实际上有没有一种方法可以深入 avqueueplayer 并根据需要控制预缓冲?

现在,凭借其默认的延迟加载行为,我在播放中遇到了一些问题,剪辑甚至无法正常播放,因为AVQueuePlayer 正在尝试在播放时加载下一个剪辑。我在部署到实际设备的 iPad 上执行此操作,而不是使用模拟器。

您可以通过调用[player prepareToPlay]; 来使用mpmovieplayer 执行此操作,这基本上是手动启动您想要的每个视频文件的加载,然后您可以通过查看mpmovieplayerLoadstateDidChange 通知并测试@987654327 来检查加载是否完成@value 看它是否已经完全加载,然后告诉 mpmovieplayer 播放。您如何使用AVQueuePlayer 有效地做类似的事情?

这是否可能,或者我是否发现了AVQueuePlayer 的主要缺点之一?


playerObserver Stephen 的建议不错,但需要的是您需要能够明确地将单个项目加载到内存中,然后告诉 AVQueuePlayer '不要播放数组中的第一个项目直到数组中的所有项目都加载到内存中'目前似乎没有办法开始加载数组中的第二个项目,直到第一个项目即将结束!

作为一个稍微独立的问题,我还注意到 AVQueuePlayer 中的一些奇怪之处,如果您将两个相同的源视频文件加载到数组中(两者都引用为两个完全独立的 AVPlayerItems,您应该这样做) 当您一直播放数组中的视频剪辑时,第一次播放剪辑正常,但是当再次播放同一剪辑时(作为单独的AVPlayerItem),它会非常快速地播放直到视频中的某个点最终从那里开始以正常速度播放。

有其他人注意到这种行为吗?

【问题讨论】:

    标签: ios ipad avfoundation avplayer avqueueplayer


    【解决方案1】:

    Apple 开发人员支持刚刚向我确认 AVQueuePlayer 不缓冲视频项。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。我希望 AV Foundation 有资产满载通知之类的东西。

      以下代码可能部分解决问题:

      Float64 durationSeconds = CMTimeGetSeconds([<#An asset#> duration]);
      CMTime secondThird = CMTimeMakeWithSeconds(durationSeconds*2.0/3.0, 1);
      NSArray *times = [NSArray arrayWithObjects:[NSValue valueWithCMTime:secondThird], nil];
      
      self.playerObserver = [<#A player#> addBoundaryTimeObserverForTimes:times queue:NULL usingBlock:^{
      }];
      

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 2014-08-13
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多