音视频缓存数学模型

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. 检测瓶颈

  • 观察限速:当下载速度达到某个稳定值(和最大下载速度相比不超过百分之十),或者单个文件下载速度显著下降时,说明可能触摸到了带宽上限或服务器限速。
  • 回退优化:如果发现并发数增加反而导致下载速度下降,要减少并发数,找到一个最佳的下载量。
相关推荐
AI服务老曹3 小时前
以实现生产制造、科技研发、人居生活等一种或多种复合功能的智慧油站开源了
人工智能·科技·自动化·音视频·生活·制造
星哥说事4 小时前
开源通义万相本地部署方案,文生视频、图生视频、视频生成大模型,支持消费级显卡!
人工智能·开源·音视频
qzw12104 小时前
出现缓存雪崩、缓存穿透、缓存预热、缓存更新和缓存降级的场景,以及如何解决
缓存
点点滴滴的记录6 小时前
热key探测技术架构设计与实践
缓存
杏花春雨江南6 小时前
输入:0.5元/百万tokens(缓存命中)或2元(未命中) 输出:8元/百万tokens
缓存
cuijiecheng201810 小时前
音视频入门基础:RTP专题(20)——通过FFprobe显示RTP流每个packet的信息
音视频
数据知道10 小时前
音视频处理工具 FFmpeg 指令的使用(超级详细!)
linux·运维·服务器·网络·ffmpeg·音视频