spice图片渐进发送方案

本文地址:https://blog.csdn.net/MagicFMan/article/details/127831260 严禁转载,后果自负

背景

最近一直在看压缩算法方面,没能找到一个研究性的方向,在研究的同时,有产生一个想法,想讨论下该想法涉及的方案的可行性,同时也希望通过该方案,打开算法研究的一个突破口,进一步在算法上对我们产品进行更深层次的优化。

原理

当前我们研究算法的一个主要目的之一是降低带宽峰值,我们已经研究过各种开源的压缩算法来使得图片编码后变得更小,如jpeg2000、webp、mozjpeg等,他们可以使的图片编码后相对于jpeg-turbo小20%-50%,但是这些算法耗时是jpeg-turbo的20倍以上,因为耗时过大而无法被采用,所以在降低数据发送量的方式上我们遇到了瓶颈。

现在我想不通过降低发送的量,而是将发送的量进行时间区域分布,达到降低某一时刻带宽的峰值,如下图所示,通过模式1或者模式2或者其他的分配模式降低峰值。
在这里插入图片描述

场景有益性

  1. 数据较大,而且还处于流控检测阶段,数据分次下发,降低带宽峰值;
  2. 控制峰值,根据带宽情况,通过配置文件,控制峰值、清晰度。(需要调研算法)
  3. 通过渐进从模糊到清晰,相对当前流控的直接在一瞬间从模糊到清晰,更为人眼所接受。

对算法的需求

希望通过研究找到一种算法,让图片可以进行渐进分包:

  1. 在一段时间内分次发送这些分包,达到图片在一段时间内从模糊到清晰;
  2. 算法分包耗时不能过大,否则造成卡顿问题;
  3. 渐进分包后包的总量相对现有压缩算法压缩不能超出太多,否则会直接影响到平均带宽。

与动态模糊的吻合

采用渐进发送方式,能做到动态模糊。为了不影响Spiceserver的取指周期,我们需要将渐进发送设置成一个单独的线程。所以在取指完之后,进行图片发送时上一张图片可能没有发送完,例如有可能只发送到60%的清晰,如果该张图片有覆盖上一张图片,那么上一张图片剩下清晰度的数据可以不用再发送了,也就是动态的时候图片没有达到完全清晰,如下图时序图。
在这里插入图片描述

与块缓存的结合

当前在大多数场景我们都采用块缓存的方式,所以同快缓存是否能有效结合也是判断案可行性的条件之一。其实分块发送对该方案来说也是有好处的,因为图片被划分成若干小块,所以可以大幅降低图片被局部覆盖的情况。

对于块缓存来说,按照原来的处理逻辑,如果块命中了,可能客户端存储的不是完全清晰的图片,如发送到80%清晰就被覆盖了,所以需要在块缓存数据结构上增加一个标志,判断客户端存储的是多少清晰度的图片,如果还没达到完全清晰就要发送剩余部分,使得图片达到清晰,具体流程如下:
在这里插入图片描述

问题与困难

当前方案只是一个粗略的想法,有很多未确定性的因素有待验证。
(1) 压缩算法为重中之重,需要在耗时、压缩率、渐进支持都能满足要求;
(2) 渐进分包发送对平均带宽的影响,不能增加或者不能增加过多;
(3) 渐进时间区域设置,达到多少能被人眼所接受,而此时对降峰值是否有作用。
(4) 其他,讨论出的问题和困难。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宸汐软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值