音视频缓存数学模型

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

  • 观察限速:当下载速度达到某个稳定值(和最大下载速度相比不超过百分之十),或者单个文件下载速度显著下降时,说明可能触摸到了带宽上限或服务器限速。
  • 回退优化:如果发现并发数增加反而导致下载速度下降,要减少并发数,找到一个最佳的下载量。
相关推荐
BD_Marathon7 小时前
【MySQL】函数
android·数据库·mysql
西西学代码7 小时前
安卓开发---耳机的按键设置的UI实例
android·ui
maki07712 小时前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架12 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid15 小时前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl16 小时前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
旷野说18 小时前
Android Studio Narwhal 3 特性
android·ide·android studio
maki0771 天前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
xhBruce1 天前
InputReader与InputDispatcher关系 - android-15.0.0_r23
android·ims
领创工作室1 天前
安卓设备分区作用详解-测试机红米K40
android·java·linux