音视频缓存数学模型

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

  • 观察限速:当下载速度达到某个稳定值(和最大下载速度相比不超过百分之十),或者单个文件下载速度显著下降时,说明可能触摸到了带宽上限或服务器限速。
  • 回退优化:如果发现并发数增加反而导致下载速度下降,要减少并发数,找到一个最佳的下载量。
相关推荐
松仔log4 小时前
Java中级——组合和继承
android·java·开发语言
我命由我123458 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian2339 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_955759629 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马9 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone9 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone9 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子13 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker13 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone13 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常