AVQueuePlayer 从资产跳转到另一个时令人讨厌的延迟

Posted

技术标签:

【中文标题】AVQueuePlayer 从资产跳转到另一个时令人讨厌的延迟【英文标题】:Annoying lag when AVQueuePlayer jumps from asset to another 【发布时间】:2015-07-24 02:41:42 【问题描述】:

我有一个AVQueuePlayer,它应该按顺序播放一组AVURLAsset,代表一个连续视频的连续片段。

每当一个片段结束而另一个片段开始时,都会有一个很明显的小故障(帧保持约 0.2 秒,声音会静音)

我尝试研究如何解决该问题,但没有发现任何问题。我尝试通过使用 2 个AVQueuePlayer 来解决它,并在每个片段结束前大约 0.2 秒之间切换。问题未解决。

知道如何解决这个问题吗?

注意:使用 mp4 joiner 软件将 mp4 片段连接在一起时,输出是一个流畅的视频,没有任何故障。

【问题讨论】:

这个答案对你有帮助吗? ***.com/questions/28659404/… 【参考方案1】:

确实经历过这一切。无论您做什么,您都会遇到这种故障。原因是AVQueuePlayer 的工作原理。当前一个项目结束时,它会加载下一个项目。因此,如果您的视频很大,您可能还会看到 2-3 秒的空白屏幕。您提到的一种解决方案是,即使用两个AVQueuePlayer。但正如你所说,它不适合你,即使你让它工作,它也会很笨拙。

更好更干净的解决方案是AVMutableComposition。一开始它可能看起来很复杂,但它的快速且一次性的任务。您可以创建所有视频​​的合成并以简单的AVPlayer 播放。在你的情况下,我假设你只需要播放它,所以你甚至不必导出它。

要了解如何使用AVMutableComposition,请浏览此link。它将用您需要的确切代码进行解释。

【讨论】:

【参考方案2】:

正如您所说,“2 AVQueuePlayers”方式仍然存在问题(一些声音故障)。 我遇到了同样的问题并通过使用 HLS 解决了它。

可以播放本地TS文件。

首先,从原始电影文件制作 m3u8 和 TS 文件。

例如

mediafilesegmenter -t 10 sample.mp4

然后,将资源文件添加到 ios 设备。您可以从 iTunes 添加文件,添加为资源,或制作下载功能并从您的应用中获取。

运行一个 http 服务器,然后将本地 URL 传递给 AVPlayerController。我用的是 cocoaHttpServer。

我在这里举个简单的例子。

https://github.com/satoshi0212/samples/tree/master/TSPlaySample

【讨论】:

以上是关于AVQueuePlayer 从资产跳转到另一个时令人讨厌的延迟的主要内容,如果未能解决你的问题,请参考以下文章

iframe从一个页面跳转到另一个页面

android 程序 如何从一个ACTIVITY跳转到另一个ACTIVITY,我的两个activity都在manifest上定义过的

html中怎么从一个页面跳转到另一个页面

PHP页面如何自动跳转到另一个页面底部

从jsp页面跳转到另一个jsp页面怎么传递参数

vue从一个页面跳转到另一个界面,带参数跳转