心电监护pr是什么意思| 梦见别人打架是什么意思| 被电击后身体会有什么后遗症| 肛门溃烂用什么药膏| 沙僧的武器叫什么| 爱打哈欠是什么原因| 梦到做饭是什么意思| 来大姨妈吃什么对身体好| 做梦吃酒席什么预兆| 什么哈欠| 先天性巨结肠有什么症状| 什么样的人容易中暑| 送老师什么花好| 尔加玉读什么| 急性肠胃炎吃什么消炎药| 布加综合征是什么病| 部首和偏旁有什么区别| 健忘症是什么意思| 翻墙是什么意思| 钥字五行属什么| 打狗看主人打虎看什么答案| 27年属什么生肖| 56年属什么| 桃子有什么功效| 什么是坏血病| 瓜子脸适合什么眼镜| 男方派去接亲要说什么| 月经量少吃什么调理| 不敢造次是什么意思| 鸡眼去医院挂什么科| 朱砂痣是什么意思| 拉稀吃什么食物好| 熊猫喜欢吃什么食物| 导管是什么意思| 直肠炎是什么原因引起的| 天地银行是什么意思| 2021是什么年| 心口疼痛是什么原因| 洗涤心灵是什么意思| surprise是什么意思| 驰字五行属什么| 霉菌孢子是什么意思| 鼻炎吃什么食物好得快| 交界性心律是什么意思| 男人喝藏红花有什么好处| 什么是命中注定| 男人鼻头有痣代表什么| 蹦蹦跳跳的动物是什么生肖| 下巴下面长痘痘是什么原因| 马头琴是什么族的乐器| 什么水果最老实| 血糖高是什么原因造成的| 蚊子为什么会咬人| 什么是cp| 石榴花是什么颜色| 女人的逼是什么意思| 检查肾挂什么科| 喝什么水好啊| 什么粉可以代替木薯粉| 玮是什么意思| 什么是双性人| 斯里兰卡用什么货币| 泡泡棉是什么面料| 艾附暖宫丸什么时候吃| 结婚前一天晚上的宴会叫什么| 睡眠不好是什么原因| 例假血是黑色的是什么原因| 惢是什么意思| 毛泽东属相是什么| 主动脉钙化是什么意思| 什么的东西| 字字珠玑什么意思| 莱卡是什么面料| 子宫前位后位有什么区别| 上海市市委书记是什么级别| 月经期间能吃什么水果| 矢车菊在中国叫什么名| 婴儿拉肚子吃什么药| 喝酒不能吃什么东西| 绞股蓝和什么搭配喝减肥| 血氧仪是干什么用的| 单脱是什么意思| 气加山念什么| 脾虚喝什么泡水比较好| 乳房疼痛什么原因| 舌苔很白是什么原因| 考是什么意思| 高压高低压正常是什么原因| 石斛配什么泡水喝好| 什么什么斑斓| 肆意什么意思| 1963年是什么年| 凤梨和菠萝的区别是什么| 者羽念什么| 人乳头瘤病毒51型阳性是什么意思| cc代表什么意思| 梦见老虎是什么意思| 减肥吃什么好| 无痛人流后吃什么对身体恢复比较好| 月全食是什么意思| 梦见黑棺材是什么征兆| 小排畸主要查什么| 抽风是什么意思| 沙果是什么水果| 网是什么结构的字| 刺史相当于现在什么官| 涸的意思是什么| 虹为什么是虫字旁| 为什么会得霉菌性阴道炎| 燕京大学现在叫什么| 想吐吃什么药可以缓解| 全身冰凉是什么原因| 梅毒抗体阳性说明什么| robinhood是什么牌子| 90岁叫什么| 狐假虎威是什么意思| 切片什么意思| 感冒了吃什么| cnn是什么意思| 面黄肌瘦是什么意思| 蓝朋友什么意思| 1978年属什么的| 幽门螺杆菌是什么意思| 面瘫挂什么科室| 肝胃不和吃什么药| 紧急避孕药什么时候吃有效| 巳时属什么生肖| 弥是什么意思| 看腋下挂什么科| 泄泻什么意思| 精神障碍是什么病| 霉菌感染用什么药| 安是什么生肖| 高压氧治疗有什么作用| 11月6日什么星座| 2009是什么年| 心脏呈逆钟向转位什么意思| 喉咙发炎咳嗽吃什么药好得快| 嘴角裂口是什么原因怎么办| 巴西货币叫什么| 无限极是干什么的| 咳嗽发烧是什么原因| 香菜吃多了有什么坏处| 277是什么意思| 严重失眠吃什么中成药| 开水烫伤用什么方法好的最快| 地痞是什么意思| 激素高是什么原因| 什么是死缓| 一喝酒就脸红是什么原因| 屁股又叫什么| 什么利尿| 临床医学是什么意思| 广州有什么好吃的| 喉咙痒咳嗽有痰是什么原因| 梦见自己离婚是什么预兆| 为什么没人敢动景甜| 3月5日什么星座| 口腔溃疡缺什么维生素| 桔色搭配什么颜色好看| 榕字五行属什么| 急性胃炎吃什么食物好| 润色是什么意思| 意欲何为是什么意思| 五月二十三日是什么星座| 什么是中出| 生孩子需要准备什么东西| 什么是编外人员| 什么已经什么| 辣椒是什么生肖| 八月三日是什么星座| 阴道杆菌是什么意思| 胆囊结石不能吃什么| 廉价什么意思| 尿颜色很黄是什么原因| 梦见已故的老人是什么意思| 5月25日是什么星座| 绿心黑豆有什么功效| 菊花茶喝多了有什么坏处| 什么是白条| 三元及第是什么意思| 肚脐右边是什么器官| 鹦鹉叫什么名字好听| 有口臭去医院挂什么科| 下午三点是什么时辰| 98年是什么年| 小孩咳嗽有痰吃什么药| 紧张手抖是什么原因| 感冒咳嗽吃什么药好| 肝不好吃什么药效果好| 咽干是什么原因| 哺乳期什么时候来月经正常| 白芷是什么| ubras是什么牌子| 268数字代表什么意思| 嬴稷和嬴政是什么关系| 经常性头疼是什么原因| 什么是脑梗死| 什么是原研药| 阴茎里面痒是什么原因| 晴对什么| 手机的英文是什么| va是什么车牌| 肺部肿瘤吃什么好| 什么是贡菜| 阴蒂痛是什么原因| 中华田园犬为什么禁养| 纪检是干什么的| 三月份生日是什么星座| 嗓子沙哑吃什么药| 绝命是什么意思| 10.30什么星座| 米为什么会生虫| 什么水晶招财| 白带有点黄是什么原因| 脑膜炎有什么症状| 肺结节有什么症状| 大便很细是什么原因| 无什么| 漂亮的什么| 奶茶色是什么颜色| 什么是益生菌| 空调嗡嗡响是什么原因| 葡萄糖高是什么意思| 糖尿病吃什么| 脾大是什么病| 嘴唇溃疡是什么原因| 梦见牛粪是什么意思| 腋下有味道是什么原因| 电瓶车什么牌子好| 脖子长小肉粒是什么原因| 肚子饱胀是什么原因| 什么叫湿热| 痛苦是什么意思| 厥阴病是什么意思| 进字五行属什么| 闻思修是什么意思| 陌上花是什么意思| 澄粉是什么粉| 补充胶原蛋白吃什么最好| 蟑螂长什么样子| dep是什么意思| 有什么汤菜谱大全| 土生土长是什么生肖| 什么的莲蓬| 红楼梦为什么是四大名著之首| 张信哲为什么不结婚| 孕妇喝纯牛奶对胎儿有什么好处| 资金盘是什么意思| 尽善尽美是什么生肖| 凌晨十二点是什么时辰| 肾结石可以吃什么| 浑什么意思| 次氯酸钠是什么| 织锦缎是什么面料| 紫色是什么颜色| 前途是什么意思| 果冻是什么做的| hpv吃什么提高免疫力| 额头青筋凸起是什么原因| 胎动少是什么原因| 孕酮低有什么影响| 安康鱼是什么鱼| 食少便溏是什么意思| 百度
Skip to content

[Proposal] Add PlaybackRate-based rebuffering avoidance mechanism #1588

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: dev
Choose a base branch
from

Conversation

peaBerberian
Copy link
Collaborator

While admittedly checking what other media players were doing that we don't do yet, I saw an interesting opportunity.

Some players have a mechanism where they lower very slightly the playback rate (the speed at which we play) - for example at 0.95 (meaning we play 0.95 seconds of content every second) - if the current buffer size is low, until it gains back an acceptable size again.

I'm not sure of the actual impact this mechanism has in terms of rebuffering avoidance but it seems that it can help.

Because it has potential but has high uncertainties, I propose adding this mechanism as an experimental loadVideo option for now, meaning that we reserve the right to update this API or even remove it at any time. I re-use the experimentalOptions concept I already proposed in several of the currently-open PRs for this.

Because we might want to check the buffer size often when it's close to
the potentially-very-low value where this mechanism activates, I reduced our PlaybackObserver's regular interval from 1s to 500ms. This is the same interval we already tested on low-latency contents so it shouldn't be an issue.

I also for now only enable this mechanism if the application plays at x1, not if it is already updating the playbackRate as I found the wanted behavior in thoses cases harder to define.

Some players also only enable this mechanism on VoD contents, not on live contents. I think that this is a mistake as there's no reason timeshifted live shouldn't be treated the same.

I didn't do the API documentation yet nor link it to the demo because I'm somewhat unhappy for that mechanism's name, for now called playbackRateBasedRebufferingAvoidance.
Even if it describes well what it does, I found that name too long even in the code. I think we may prefer finding it a nicer-sounding name to make the code more readable and the API more approachable, like we did for our "fast-switching concept" (which sadly has now a new meaning for DASH low-latency contents different than ours or dash.js's usage, but that's always a risk and I'm willing to take it).

@peaBerberian peaBerberian added the proposal This Pull Request or Issue is only a proposal for a change with the expectation of a debate on it label Oct 29, 2024
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from f3c5cc1 to e3d4723 Compare October 29, 2024 11:34
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch 2 times, most recently from a0d489f to e4567e7 Compare November 15, 2024 18:01
@peaBerberian peaBerberian added Priority: 2 (Medium) This issue or PR has a medium priority. Priority: 3 (Low) This issue or PR has a low priority. and removed Priority: 2 (Medium) This issue or PR has a medium priority. labels Nov 22, 2024
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from e4567e7 to 3a50743 Compare December 12, 2024 13:48
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from 3a50743 to aa14ba6 Compare January 28, 2025 14:06
Copy link

Automated performance checks have been performed on commit aa14ba658cfd5f1642815291b55e0a6467d48b22 with the base branch dev.

Tests results

? Tests have passed.

Performance tests 1st run output

No significative change in performance for tests:

Name Mean Median
loading 19.64ms -> 19.87ms (-0.225ms, z: 0.87614) 27.15ms -> 27.30ms
seeking 10.78ms -> 10.42ms (0.366ms, z: 0.31542) 11.25ms -> 11.40ms
audio-track-reload 26.01ms -> 25.91ms (0.099ms, z: 1.13408) 37.95ms -> 37.80ms
cold loading multithread 47.95ms -> 47.20ms (0.747ms, z: 11.95747) 70.05ms -> 69.00ms
seeking multithread 20.04ms -> 10.98ms (9.067ms, z: 1.37583) 10.50ms -> 10.35ms
audio-track-reload multithread 25.83ms -> 25.72ms (0.102ms, z: 1.60349) 37.95ms -> 37.80ms
hot loading multithread 15.15ms -> 15.09ms (0.059ms, z: 3.55136) 21.90ms -> 21.75ms

If you want to skip performance checks for latter commits, add the skip-performance-checks label to this Pull Request.

@peaBerberian peaBerberian force-pushed the dev branch 2 times, most recently from 00fc806 to b7216b4 Compare April 15, 2025 18:14
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch 3 times, most recently from 94db9d5 to 1ceed37 Compare April 22, 2025 18:56
Copy link

? Automated performance checks have passed on commit 78e85634767b7268545dc93bd3d59f973a8d2549 with the base branch dev.

Details

Performance tests 1st run output

No significative change in performance for tests:

Name Mean Median
loading 19.84ms -> 20.57ms (-0.734ms, z: 0.91946) 27.00ms -> 27.15ms
seeking 20.06ms -> 13.36ms (6.706ms, z: 1.13075) 11.40ms -> 11.25ms
audio-track-reload 26.87ms -> 26.94ms (-0.069ms, z: 0.72539) 39.15ms -> 39.15ms
cold loading multithread 48.13ms -> 47.55ms (0.577ms, z: 11.27695) 70.65ms -> 69.45ms
seeking multithread 18.01ms -> 14.03ms (3.982ms, z: 0.35549) 10.50ms -> 10.65ms
audio-track-reload multithread 27.00ms -> 26.69ms (0.317ms, z: 0.22803) 39.15ms -> 39.15ms
hot loading multithread 15.71ms -> 15.53ms (0.184ms, z: 4.52095) 22.65ms -> 22.50ms

@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from 1ceed37 to 59da7ac Compare June 30, 2025 12:42
Copy link

? Automated performance checks have passed on commit d5bb008daa0d01461efae1f7e0f1c508271c8029 with the base branch dev.

Details

Performance tests 1st run output

No significative change in performance for tests:

Name Mean Median
loading 20.50ms -> 20.63ms (-0.136ms, z: 0.98784) 28.40ms -> 28.50ms
seeking 16.78ms -> 10.66ms (6.118ms, z: 3.02078) 11.40ms -> 11.40ms
audio-track-reload 26.71ms -> 26.67ms (0.040ms, z: 0.78361) 39.30ms -> 39.15ms
cold loading multithread 47.86ms -> 47.02ms (0.831ms, z: 12.82259) 70.05ms -> 68.85ms
seeking multithread 58.00ms -> 31.65ms (26.350ms, z: 0.28500) 10.35ms -> 10.35ms
audio-track-reload multithread 26.81ms -> 26.89ms (-0.073ms, z: 0.32855) 39.45ms -> 39.45ms
hot loading multithread 15.74ms -> 15.76ms (-0.019ms, z: 2.84117) 22.85ms -> 22.65ms

@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from 59da7ac to 452e049 Compare July 8, 2025 10:45
Copy link

github-actions bot commented Jul 8, 2025

? Automated performance checks have passed on commit 3a43369f66a58dc84f985f6e292cb838d4ebb0f9 with the base branch dev.

Details

Performance tests 1st run output

No significative change in performance for tests:

Name Mean Median
loading 19.98ms -> 20.50ms (-0.521ms, z: 0.90316) 27.75ms -> 27.75ms
seeking 18.69ms -> 12.01ms (6.681ms, z: 0.89726) 11.25ms -> 11.25ms
audio-track-reload 26.36ms -> 26.34ms (0.021ms, z: 0.07034) 38.70ms -> 38.70ms
cold loading multithread 46.64ms -> 45.85ms (0.790ms, z: 13.33909) 68.85ms -> 67.80ms
seeking multithread 35.87ms -> 23.82ms (12.048ms, z: 0.66256) 10.35ms -> 10.35ms
audio-track-reload multithread 26.39ms -> 26.29ms (0.099ms, z: 1.72625) 38.85ms -> 38.85ms
hot loading multithread 15.38ms -> 15.16ms (0.220ms, z: 3.69630) 22.35ms -> 22.20ms

While admittedly checking what other media players were doing that we
don't do yet, I saw an interesting opportunity.

Some players have a mechanism where they lower very slightly the
playback rate (the speed at which we play) - for example at `0.95`
(meaning we play 0.95 seconds of content every second) - if the current
buffer size is low, until it gains back an acceptable size again.

I'm not sure of the actual impact this mechanism has in terms of
rebuffering avoidance but it seems that it can help.

Because it has potential but has high uncertainties, I propose adding
this mechanism as an experimental `loadVideo` option for now, meaning
that we reserve the right to update this API or even remove it at any
time. I re-use the `experimentalOptions` concept I already proposed in
several of the currently-open PRs for this.

  Because we might want to check the buffer size often when it's close to
the potentially-very-low value where this mechanism activates, I reduced
our PlaybackObserver's regular interval from 1s to 500ms. This is the
same interval we already tested on low-latency contents so it shouldn't
be an issue.

I also for now only enable this mechanism if the application plays at
x1, not if it is already updating the playbackRate as I found the wanted
behavior in thoses cases harder to define.

Some players also only enable this mechanism on VoD contents, not on live
contents. I think that this is a mistake as there's no reason
timeshifted live shouldn't be treated the same.

I didn't do the API documentation yet nor link it to the demo because
I'm somewhat unhappy for that mechanism's name, for now called
`playbackRateBasedRebufferingAvoidance`.
Even if it describes well what it does, I found that name too long even
in the code. I think we may prefer finding it a nicer-sounding name to
make the code more readable and the API more approachable, like we did
for our "fast-switching concept" (which sadly has now a new meaning for
DASH low-latency contents different than ours or dash.js's
usage, but that's always a risk and I'm willing to take it).
@peaBerberian peaBerberian force-pushed the feat/playbackRateBasedRebufferingAvoidance branch from 452e049 to 512bdc4 Compare August 1, 2025 13:27
Copy link

github-actions bot commented Aug 1, 2025

? Automated performance checks have passed on commit 2710ff6fcf2a8cd4977d55cb09e1f392824b35be with the base branch dev.

Details

Performance tests 1st run output

No significative change in performance for tests:

Name Mean Median
loading 19.88ms -> 20.10ms (-0.215ms, z: 0.23762) 27.30ms -> 27.15ms
seeking 17.81ms -> 10.88ms (6.933ms, z: 0.24438) 10.95ms -> 10.95ms
audio-track-reload 26.09ms -> 25.92ms (0.171ms, z: 1.62232) 37.95ms -> 38.10ms
cold loading multithread 46.53ms -> 46.31ms (0.211ms, z: 13.58615) 68.40ms -> 67.20ms
seeking multithread 49.78ms -> 20.09ms (29.696ms, z: 1.53334) 10.05ms -> 10.05ms
audio-track-reload multithread 25.91ms -> 25.86ms (0.045ms, z: 0.85207) 37.95ms -> 37.95ms
hot loading multithread 15.25ms -> 14.99ms (0.256ms, z: 4.68647) 21.90ms -> 21.75ms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Priority: 3 (Low) This issue or PR has a low priority. proposal This Pull Request or Issue is only a proposal for a change with the expectation of a debate on it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant
头发厚适合剪什么发型 加油什么意思 男戴观音女戴佛有什么讲究 河粉是什么材料做的 五台山求什么最灵
耳鸣是什么原因导致的 厚黑学什么意思 ipada1474是什么型号 水星是什么颜色的 鼻子不通气吃什么药
苏打是什么 晏字五行属什么 响是什么意思 喝什么会变白 皮肤上有小白斑点是什么原因
必承其重上一句是什么 ana谱是查什么病的 吃什么皮肤好 卵黄囊是什么意思 鸡毛换糖是什么意思
梦见死尸什么预兆bysq.com 什么蔬菜不能放冰箱hcv9jop2ns6r.cn 半夜喉咙痒咳嗽是什么原因xinjiangjialails.com 经期同房会有什么后果hcv8jop3ns5r.cn 头发大把大把的掉是什么原因hcv9jop4ns7r.cn
冬瓜炒什么好吃hcv7jop5ns2r.cn 将军是指什么生肖hcv7jop9ns8r.cn 3月23日是什么星座hcv7jop6ns0r.cn 硬伤是什么意思hcv9jop3ns6r.cn 送老师送什么礼物好hcv8jop2ns0r.cn
什么食物蛋白质含量最高travellingsim.com 夏天脸上皮肤痒是什么原因hcv8jop4ns3r.cn 空鼻症是什么症状hcv7jop4ns5r.cn 纳豆是什么豆hcv8jop3ns5r.cn 什么是张力hcv7jop5ns1r.cn
数字2代表什么意思adwl56.com 幽门螺杆菌用什么药hcv7jop9ns9r.cn 鹿加几念什么hcv9jop4ns3r.cn 学是什么偏旁hcv8jop5ns2r.cn 白带是黄色是什么原因hcv8jop0ns3r.cn
百度