直播流⻚⾯内存优化⽅案

文章讲述了项目中直播流图片展示的问题,涉及内存占用过高导致的崩溃。通过降低图片分辨率、避免快速滑动下载、使用NSCache管理内存、切换到GPUImage处理高斯模糊等措施,成功优化内存消耗并提高性能,节省了10MB内存和8ms处理时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2cced4ed02218b3e72a84ca34db28547.jpeg

788fe83b22785ab351aa2c8b07160006.gif

本文字数:6628

预计阅读时间:39分钟

39df7d8ea6a00d35aa5504e484327709.png

01

项目背景介绍

项目中直播流每场直播由一张直播图片作为展示入口,用于提示用户此直播的概要。如下图: 

4d81e19a6daeac8fe1a278146e153e49.jpeg

然而直播图片和容器的宽高比例出现不一致的情况。针对此情况,采取背景图 contentmode展示为 aspectFill 且高斯模糊,上层高清图为 aspectfit,给用户一种图片填满且能清除获取信息的视觉体验。如下图:

332bea55ec02c3adbdee597e366704bf.jpeg

然而服务端下发直播的图片分辨率在1000 * 2000byte左右,占用内存大小为1000 * 2000 * 4,约为 2M 大小。资深直播用户最多有一千场直播。使用 sd_webImage 下载图片并缓存在内存中,查看足够多的直播封面时,在iPhone 13机型,iOS15的手机,滑动到400场直播时,就会产生内存不足崩溃。且崩溃堆栈展示在进行高斯模糊的方法中。

02

分析问题

经过初步分析,得出影响内存的原因有以下几方面。

  • 图片分辨率高,高斯模糊占用的内存越高。因为需要对进行大量模糊计算;

  • 用户快速滑动直播流,正常的下载图片速度会展示所有划过的图片,高斯模糊在图片下载完成 block 中执行,即使划过的直播图,也会继续高斯模糊直至返回。这样会导致用户大量无意义图片占用大量内存;

  • 两张 ImageView 需要在内存中加载两张一样的图片,是一种内存浪费;

  • 为了用户查看图片的及时性和流畅性,项目中没有设置存储高斯模糊图片最大占用内存。这会导致图片内存只会在内存警告时被清除。导致高斯模糊不能获取足够的内存而崩溃;

  • 高斯模糊采用 vImage 方案,占用 CPU 进行高斯模糊计算,CP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值