Sta*_*nov 9 xcode avfoundation ios avplayer swift
在应用程序中,我有一个UICollectionView项目大小,以便在屏幕上同时可以看到约20项.我想在每个单元格中显示的内容是从Giphy/Tenor下载的Gif图像.
但是,我意识到gif文件比Tenor和Giphy为每个动画图像提供的相对mp4文件占用更多空间(和加载时间),这实际上是显而易见的,因为mp4文件格式具有压缩逻辑和类似的东西.抱歉,如果我使用错误的条款.
为了让列表加载更快,我决定使用UIImageViewGIF图像切换AVPlayerLayer,导致mp4文件比GIF图像轻10倍.但是我遇到了类似于HERE所描述的性能问题.流量大致相同,我同时可以看到20多个项目,但由于硬件限制,它只显示16个视频.我找不到任何解决方法或任何其他允许同时AVPlayerLayer显示超过16个视频的框架.
我想知道WhatsApp应用程序如何工作并处理这个逻辑.它还有Tenor的GIF选择.我已经检查并发现WhatsApp下载的是小视频文件,而不是gif图像.这就是它加载速度非常快的原因.但我不知道他们如何同时展示20多件商品.这是在WhatsApp中的工作原理 - https://media.giphy.com/media/33E84h3RAVn0vQWZak/giphy.gif.此外,我在滚动期间注意到小静态预览正在显示,但我没有看到应用程序请求它.可能他们在飞行中获得了gif的第一帧,而主线程没有任何延迟.
我也尝试过,但是即使我在后台线程中创建了所有内容,并且主线程上的唯一一行是"self.imageView.image = myImage",如果我在行中有8个项目,那么无论如何它还是拖了一下例如,滚动非常快.
我看到只有两种可能的解决方案让它加载速度快(因此我们肯定需要加载mp4而不是gif),并且滚动平滑且没有凸耳:
1.WhatsApp使用自己的自定义视频核心在UICollectionViewCell中显示视频.
2. WhatsApp下载视频以加快下载过程,但随后将mp4文件编码为gif,并使用常规动画UIImageView显示输出gif文件.然而,在"大规模"滚动期间,如果没有拖拽,我无法让这个流程工作得非常快
有关如何实现相同的想法,使其像WhatsApp一样快速顺畅地工作?我无法检查它如何处理下载的信息,但肯定它下载mp4文件而不是gif文件.
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |