UICollectionViewCell中的AVPlayerLayer或如何将gif加载为WhatsApp

时间:2018-07-02 20:43:32

标签: ios swift xcode avfoundation avplayer

在应用程序中,我有一个UICollectionView,其项目大小为大约20个项目同时显示在屏幕上。我要在每个单元格中显示的内容是从Giphy / Tenor下载的Gif图像。

但是,我意识到gif文件比Tenor和Giphy都为每个动画图像提供的相对mp4文件占用更多的空间(和加载时间),这实际上是显而易见的,这导致mp4文件格式具有压缩逻辑并且像那样的东西。抱歉,如果我使用错误的术语。

为了更快地加载列表,我决定将带有UIImageView的GIF图像切换为AVPlayerLayer,因为mp4文件的亮度比GIF图像小10倍。但是我遇到了与HERE类似的性能问题。流程基本相同,我可以同时看到20多个项目,但是由于硬件限制,它只能显示16个视频。我找不到任何变通办法或任何其他框架可以同时显示16个以上的AVPlayerLayer视频。

我想知道 WhatsApp 应用程序如何工作并处理这种逻辑。它还具有Tenor的GIF选择。我已经检查并发现WhatsApp下载的是小视频文件,而不是gif图像。这就是为什么它加载速度非常快的原因。但是我不知道他们如何同时显示20多个项目。这就是在WhatsApp-https://media.giphy.com/media/33E84h3RAVn0vQWZak/giphy.gif中的工作方式。另外,我注意到在滚动过程中会显示小的静态预览,但是我看不到应用程序对此提出要求。可能他们会动态获取gif的第一帧,而不会在主线程中造成任何延迟。

我也尝试过,但是即使我在后台线程中制作了所有东西,而主线程上的唯一一行是“ self.imageView.image = myImage”,但是如果我有8个项目,那还是有点儿费劲例如该行中的内容,并且滚动速度非常快。

我只看到2种可能的解决方案来使其快速加载(因此,我们绝对需要加载mp4而不是gif),并且滚动流畅且没有凸耳: 1. WhatsApp使用其自己的自定义视频核心在UICollectionViewCell中显示视频。
2. WhatsApp下载视频以加快下载过程,但随后将mp4文件即时编码为gif,并使用常规的动画UIImageView显示输出的gif文件。但是,在“大量”滚动期间,如果没有拖拉,我无法使此流程非常快速地运行

是否有任何关于如何实现与WhatsApp一样快速流畅的想法?我无法检查它如何处理下载的信息,但是可以确定它会下载mp4文件并不是gif。

0 个答案:

没有答案
相关问题