音视频缓存数学模型

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

  • 观察限速:当下载速度达到某个稳定值(和最大下载速度相比不超过百分之十),或者单个文件下载速度显著下降时,说明可能触摸到了带宽上限或服务器限速。
  • 回退优化:如果发现并发数增加反而导致下载速度下降,要减少并发数,找到一个最佳的下载量。
相关推荐
h39745 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
姜鱼问生6 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
美狐美颜sdk8 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
揽秀亭长9 小时前
从音频到五线谱|扒谱过程中的关键技术环节
人工智能·音视频
weixin1997010801613 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
乐橙开放平台13 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居
hweiyu0014 小时前
Redis命令:BLPOP
redis·缓存
Anhty15 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
企业数字化笔记16 小时前
AI工具参数很多怎么办?预设、表单校验、危险参数与配置审计
java·spring boot·python·音视频
VidDown17 小时前
上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
python·django·音视频·状态模式·实时音视频·视频编解码·视频