mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
Lecture TV : plus de saut de 20 s après un silence du panneau
Télémétrie (session de 25 min avec la réserve de 25 s) : un silence du panneau a été absorbé sans coupure (avance 27 → 14,7 s), mais à la reprise le panneau renvoie d'un coup tout le retard. L'avance dépassait alors le seuil de rattrapage (45 s) et le lecteur sautait 20 s de programme — deux fois en une minute. Saut seulement au-delà de 90 s de retard ; liveSync (x1,1 au-delà de 35 s) résorbe l'excédent en douceur. Vidéo déjà vue purgée plus tôt (30 s) pour rester sous le quota du SourceBuffer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0539ad857f
commit
6733f80ffd
2 files changed
+27
-3
No files matched your search
@@ -162,6 +162,23 @@ test('live : la réserve visée couvre un silence du panneau de ~18 s', () => {
|
||||
assert.ok(c.liveBufferLatencyMinRemain > PROVIDER_OUTAGE_S);
|
||||
});
|
||||
|
||||
test('live : la rafale de rattrapage après un silence ne fait pas sauter le programme', () => {
|
||||
// Mesuré en prod : après un silence, le panneau renvoie d'un coup tout le
|
||||
// retard ; l'avance a dépassé 45 s et le lecteur a sauté 2 fois de 20 s
|
||||
// (programme perdu). Le retard doit se résorber en douceur (liveSync).
|
||||
const observedPeakAhead = 45;
|
||||
const c = liveMpegtsConfig();
|
||||
assert.ok(c.liveBufferLatencyMaxLatency >= 2 * observedPeakAhead - 10,
|
||||
`saut dès ${c.liveBufferLatencyMaxLatency}s d'avance : la rafale de rattrapage le déclenche`);
|
||||
assert.ok(c.liveSyncMaxLatency < observedPeakAhead,
|
||||
'liveSync doit déjà accélérer avant ce niveau');
|
||||
});
|
||||
|
||||
test('live : la vidéo déjà vue est purgée plus tôt, l\'avance étant plus grande', () => {
|
||||
const c = liveMpegtsConfig();
|
||||
assert.ok(c.autoCleanupMaxBackwardDuration <= 30);
|
||||
});
|
||||
|
||||
test('reprise après coupure : attendre une vraie réserve avant de relire', () => {
|
||||
const calls = [];
|
||||
const listeners = {};
|
||||
|
||||
+10
-3
@@ -512,8 +512,13 @@
|
||||
// l'avance que le panneau envoie au démarrage. On la garde : ~25 s
|
||||
// de retard sur le direct, en échange d'une lecture qui traverse ces
|
||||
// silences sans figer.
|
||||
//
|
||||
// Saut seulement au-delà de 90 s : après un silence, le panneau
|
||||
// renvoie d'un coup tout le retard. Avec un seuil à 45 s, l'avance
|
||||
// le dépassait et le lecteur sautait 20 s de programme (2 fois en
|
||||
// 1 min, mesuré). liveSync résorbe désormais cet excédent en douceur.
|
||||
liveBufferLatencyChasing: isLive,
|
||||
liveBufferLatencyMaxLatency: 45,
|
||||
liveBufferLatencyMaxLatency: 90,
|
||||
liveBufferLatencyMinRemain: 25,
|
||||
// Au-delà de 35 s de retard, accélérer légèrement (x1,1) jusqu'à
|
||||
// revenir à 25 s : rattrapage invisible, sans saut ni coupure.
|
||||
@@ -523,9 +528,11 @@
|
||||
liveSyncPlaybackRate: 1.1,
|
||||
// Purge du buffer déjà lu : sans elle, une longue séance finit par
|
||||
// saturer le SourceBuffer (QuotaExceededError → erreur MPEG-TS).
|
||||
// Avance jusqu'à 90 s : la vidéo déjà vue est purgée plus tôt pour
|
||||
// rester sous le quota du SourceBuffer (~150 Mo en vidéo sur Chrome).
|
||||
autoCleanupSourceBuffer: true,
|
||||
autoCleanupMaxBackwardDuration: 60,
|
||||
autoCleanupMinBackwardDuration: 30,
|
||||
autoCleanupMaxBackwardDuration: 30,
|
||||
autoCleanupMinBackwardDuration: 15,
|
||||
lazyLoad: false
|
||||
}
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user