音视频缓存数学模型

2024年8月的笔记
音视频缓存数学模型 - Wesley's Blog

播放器作为消费者,缓存作为生产者。

进入缓冲一次

设消费者速率为v1,生产者为v2,视频长度为l,x为生产者至少距离消费者多远才能保证在播完视频前两者重合。实际上就是一个追及问题。

v1t = v2t + x,即 l = v2*l/v1 + x,因为播放器速度是1,继续简化得 x = l(1 - v2)

如果v2大于1,即满足消费者需求时,可以流畅播放。

设l是一部45分钟的电视剧,即x = 4560(1 - v2)

如果v2是1,即1s可以缓存1s时长视频,则x = 0

v2是0.9,即1s可以缓存0.9s时长视频,则 x = 270,意味着要提前缓存270s的视频才可以后续不进入缓冲状态。

同理,v2=0.8,x= 540

...

v2 = 0.1,x=2430

斜率是-2700,意味着每变化百分之0.1,缓存长度都要增加270s。

拿v2=0.9,x= 270作为例子,要提前缓存270s,需要花费的时间是t=270/0.9=300s

同理,v2=0.8,x= 540,t=540/0.8=675s

...

v2 = 0.1,x=2430,t=2430/0.1=24300s=405分钟

进入缓冲多次

实际上,用户是不能容忍等这么久的,所以意味着播放开始后会反复进入缓冲状态。

假设缓存1s播1s,

v2=1,是可以正常播放

v2=0.9,则用户要等待时长为 1/0.9=1.1111s,先缓存1s,则平均1/(1-0.9)=10s进入缓冲状态,每次1.1111s

v2=0.8,则用户要等待时长为 1/0.8=1.25s,先缓存1s,则平均1/(1-0.8)=5s进入缓冲状态,每次1.25s

...

v2=0.1,则用户要等待时长为 1/0.1=10s,先缓存1s,则平均1/(1-0.1)=1.1111s进入缓冲状态,每次10s

同理每次缓存多1s再播放,都会增加一倍进入缓冲的时间和等待时间。

意味着,如果通过多线程不能显著提高v2速度超过1,对用户来说都是卡顿,无法忍受的。

当然,上面只是一个理论模型,实际上要复杂一些,因为每个ts包含的播放时间是不一样的。

情况分析

若带宽小于CDN速度,即v2总是小于v1,这样无论怎么优化都会卡顿。

若带宽大于CDN速度,若v2大于v1则可以正常播放;若单线程不能满足v2大于v1,多线程时v2大于v1,也可以正常播放。

缓存策略

对于下载时间小于ts文件时长的,则串行下载,不需要并发。

以下是针对CDN速度小于网络带宽的:

1. 初始下载设置

  • 初始并发数:从1个文件开始下载。
  • 监控下载速度:监控下载速度和记录最大下载速度。

2. 逐步增加并发

  • 逐步增加:下载成功后,增加一个并发下载任务。
  • 监控变化:每次增加并发后,观察单个文件的下载速度变化。

3. 检测瓶颈

  • 观察限速:当下载速度达到某个稳定值(和最大下载速度相比不超过百分之十),或者单个文件下载速度显著下降时,说明可能触摸到了带宽上限或服务器限速。
  • 回退优化:如果发现并发数增加反而导致下载速度下降,要减少并发数,找到一个最佳的下载量。
相关推荐
无小道6 分钟前
Redis——list相关指令
数据库·redis·缓存
EasyDSS18 分钟前
视频高清直播点播/音视频点播/云点播/云直播EasyDSS交互升级解锁大型活动直播新体验
音视频
Trouvaille ~29 分钟前
【Redis篇】为什么需要 Redis:从单机到分布式的架构演进之路
数据库·redis·分布式·缓存·中间件·架构·后端开发
June`38 分钟前
多线程redis项目之aof
数据库·redis·缓存
Peter-OK1 小时前
Redis从3.x到8.4的核心新特性深度解析与实战学习指南
数据库·redis·缓存
chao1898441 小时前
基于MATLAB的音频信号AM调制与解调实现
开发语言·matlab·音视频
m0_634666732 小时前
Stability Audio 3.0 把 AI 音乐推过了一个门槛:从“音频片段”走向“完整歌曲”
人工智能·音视频
晚烛2 小时前
CANN 数据流与内存优化:L1/L2 缓存机制与计算重叠深度解析
人工智能·python·缓存
2的n次方_2 小时前
健身 Agent:不止视频,更有 AI 人物实时跟练交互
人工智能·音视频·交互·魔珐星云
fengxin_rou2 小时前
【Outbox 事件驱动 + Canal Binlog 增量订阅】:用户关系模块架构实战详解
缓存·架构·canal·outbox