AVQueuePlayer 从资产跳转到另一个资产时出现恼人的滞后
Annoying lag when AVQueuePlayer jumps from asset to another
我有一个 AVQueuePlayer
应该按顺序播放 AVURLAsset
的数组,代表一个连续视频的连续片段。
每当一个片段结束而另一个片段开始时,就会出现一个可以很好地注意到的小故障(帧保持约 0.2 秒,声音被静音)
我尝试研究如何解决该问题,但没有找到任何结果。我尝试通过使用 2 AVQueuePlayer
来解决它,并在每个片段结束前大约 0.2 秒之间切换。问题未解决。
知道如何解决这个问题吗?
注意:使用 mp4 连接器软件将 mp4 片段连接在一起时,输出是单个流畅的视频,没有任何毛刺。
完全经历过这个。无论您做什么,您都会遇到这种故障。原因是 AVQueuePlayer
是如何工作的。它在上一个项目结束时加载下一个项目。因此,如果您的视频很大,您可能还会看到 2-3 秒的空白屏幕。一种解决方案是您提到的,即使用两个 AVQueuePlayer
。但正如你所说,它不适合你,即使你让它工作,它也会很笨拙。
更好、更干净的解决方案是 AVMutableComposition
。起初它可能看起来很复杂,但它是快速且一次性的任务。您创建了所有视频的合成并以简单的 AVPlayer
播放。在你的情况下,我假设你只需要播放它,所以你甚至不必导出它。
要了解如何使用 AVMutableComposition
,请阅读此 link。它将用您需要的确切代码进行解释。
正如您所说,“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
应该按顺序播放 AVURLAsset
的数组,代表一个连续视频的连续片段。
每当一个片段结束而另一个片段开始时,就会出现一个可以很好地注意到的小故障(帧保持约 0.2 秒,声音被静音)
我尝试研究如何解决该问题,但没有找到任何结果。我尝试通过使用 2 AVQueuePlayer
来解决它,并在每个片段结束前大约 0.2 秒之间切换。问题未解决。
知道如何解决这个问题吗?
注意:使用 mp4 连接器软件将 mp4 片段连接在一起时,输出是单个流畅的视频,没有任何毛刺。
完全经历过这个。无论您做什么,您都会遇到这种故障。原因是 AVQueuePlayer
是如何工作的。它在上一个项目结束时加载下一个项目。因此,如果您的视频很大,您可能还会看到 2-3 秒的空白屏幕。一种解决方案是您提到的,即使用两个 AVQueuePlayer
。但正如你所说,它不适合你,即使你让它工作,它也会很笨拙。
更好、更干净的解决方案是 AVMutableComposition
。起初它可能看起来很复杂,但它是快速且一次性的任务。您创建了所有视频的合成并以简单的 AVPlayer
播放。在你的情况下,我假设你只需要播放它,所以你甚至不必导出它。
要了解如何使用 AVMutableComposition
,请阅读此 link。它将用您需要的确切代码进行解释。
正如您所说,“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