@vkontakte/videoplayer-core 2.0.180 → 2.0.181-dev.05b016920.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/es2015.cjs +17 -17
  2. package/es2015.esm.js +17 -17
  3. package/esnext.cjs +16 -16
  4. package/esnext.esm.js +16 -16
  5. package/evergreen.esm.js +16 -16
  6. package/package.json +2 -2
  7. package/types/index.d.ts +2 -2
  8. package/types/player/Player.d.ts +1 -2
  9. package/types/player/types.d.ts +6 -10
  10. package/types/providers/DashProvider/baseDashProvider.d.ts +1 -1
  11. package/types/providers/DashProvider/lib/buffer.d.ts +28 -3
  12. package/types/providers/DashProvider/lib/fetcher.d.ts +31 -6
  13. package/types/providers/DashProvider/lib/player.d.ts +2 -0
  14. package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +1 -1
  15. package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +1 -0
  16. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +7 -3
  17. package/types/providers/DashProviderVirtual/lib/fetcher.d.ts +30 -6
  18. package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +1 -0
  19. package/types/providers/DashProviderVirtual/lib/player/types.d.ts +2 -1
  20. package/types/providers/types.d.ts +1 -3
  21. package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +9 -11
  22. package/types/providers/utils/StallsManager.d.ts +1 -8
  23. package/types/providers/utils/TextTrackManager.d.ts +16 -0
  24. package/types/utils/ThroughputEstimator.d.ts +20 -4
  25. package/types/utils/buffer/isPositionBuffered.d.ts +1 -0
  26. package/types/utils/tuningConfig.d.ts +47 -21
  27. package/types/providers/utils/HTMLVideoElement/TextTrackManager.d.ts +0 -32
  28. package/types/utils/setStateWithSubscribe.d.ts +0 -6
@@ -42,6 +42,15 @@ export type ITuningConfig = {
42
42
  initialThroughput: Kbps;
43
43
  measureNonSegmentRequests: boolean;
44
44
  smallSampleMinDuration: Milliseconds;
45
+ /**
46
+ * Верхняя граница скорости одного замера (Кбпс), выше которой sanityCheck его
47
+ * отбрасывает: такую полосу не даёт пользовательский канал — это кэш CDN/браузера,
48
+ * отдавший объект практически мгновенно. Дефолт 1 000 000 Кбит/с унаследован из
49
+ * хардкода sanityCheck до этого поля. Поднимается в e2e (UVP-11954): CI-раннеры
50
+ * стоят в одном ДЦ с CDN и качают сегменты быстрее гигабита — с дефолтным лимитом
51
+ * все замеры режутся и хостовая запись кеша не появляется.
52
+ */
53
+ maxSampleRate: Kbps;
45
54
  cacheThresholdSize: Milliseconds;
46
55
  /**
47
56
  * UVP-11541: верхняя граница порога, ниже которого ответ считается кэш-хитом по TTFB.
@@ -71,7 +80,7 @@ export type ITuningConfig = {
71
80
  * мелкий сегмент качается параллельно с аудио и другого замера не получает.
72
81
  * Параллельной считается загрузка, отдававшая байты внутри окна замера: открытая,
73
82
  * но молчащая (подвисла либо уже выкачала своё и ждёт done) полосу не занимает.
74
- * Честный кэш (мгновенная отдача → rate > 1 Гбит/с) по-прежнему режется проверкой rate выше.
83
+ * Честный кэш (мгновенная отдача — скорость замера выше maxSampleRate) по-прежнему режется.
75
84
  *
76
85
  * Пункты 3 и 4 добавлены после эксперимента 37621: без них включённые быстрые сэмплы
77
86
  * систематически занижали оценку, ABR держал низкое качество и сегменты оставались
@@ -90,23 +99,41 @@ export type ITuningConfig = {
90
99
  maxLastEvaluationTimeout: Milliseconds;
91
100
  };
92
101
  /**
93
- * TTL + проверка типа сети для кешированного throughput из localStorage.
94
- * При включении: если сохранённое значение старше storedThroughputTtlMs
95
- * или тип сети изменился (Wi-Fi→3G) — значение отбрасывается.
96
- * Предотвращает старт в 4K при переходе с Wi-Fi на мобильную сеть.
102
+ * UVP-11954: кеш оценки сети с разрезом по хосту раздачи (CDN).
97
103
  *
98
- * При OFF (дефолт): читаем/пишем как до фикса — plain number в legacy-ключ
99
- * one_video_*. Это даёт безопасный rollback JS-версии без потери данных.
100
- * При ON: новый формат (JSON с timestamp+networkType) → новый ключ vk_uvp_*.
104
+ * При включении: ключи vk_uvp_throughput / vk_uvp_rtt хранят JSON
105
+ * {"hosts":{"<host>":{"value","timestamp","networkType"?}}} — чтение только
106
+ * записи текущего хоста (TTL + совпадение networkType), промах = холодный старт
107
+ * (browser estimation, затем initialThroughput). Запись — hosts-only, без общей
108
+ * записи; набор хостов ограничен LRU по hostsLimit. Чтение отложено до
109
+ * первого события адаптации: определённая эмиссия hostname$ или первый замер.
101
110
  */
102
- useThroughputTtl: boolean;
103
- /**
104
- * Срок жизни кешированного throughput (мс). По умолчанию 4 часа.
105
- * После истечения TTL значение из localStorage игнорируется —
106
- * используется browser estimation или initialThroughput.
107
- * Применимо только при useThroughputTtl=true.
108
- */
109
- storedThroughputTtlMs: Milliseconds;
111
+ cdnCache: {
112
+ /**
113
+ * Гейт всех изменений UVP-11954. При false (дефолт): бит-в-бит прежнее
114
+ * поведение — plain number в legacy-ключах one_video_*; ключи vk_uvp_*
115
+ * не читаются и не пишутся. Это даёт безопасный rollback JS-версии
116
+ * без потери свежих данных для старого кода.
117
+ */
118
+ enabled: boolean;
119
+ /**
120
+ * Срок жизни каждой хостовой записи кеша (мс). По умолчанию 4 часа.
121
+ * Запись старше TTL при чтении отбрасывается — холодный старт.
122
+ * Применимо только при cdnCache.enabled=true.
123
+ */
124
+ ttlMs: Milliseconds;
125
+ /**
126
+ * Предел числа хостовых записей в hosts (UVP-11954). При превышении при записи
127
+ * вытесняется запись с наименьшим timestamp (не считая текущего хоста).
128
+ * Протухшие по TTL записи уходят первыми — отдельной чистки нет.
129
+ * 10: ключ кеша — хост раздачи, а балансировщик video.get выдаёт хост
130
+ * при каждой загрузке видео и не гарантирует повтор предыдущего. За TTL
131
+ * активный пользователь может собрать записи по нескольким хостам —
132
+ * 10 покрывает это с запасом при ~100 Б на запись, ~1 КБ на набор из 10.
133
+ * Применимо только при cdnCache.enabled=true.
134
+ */
135
+ hostsLimit: number;
136
+ };
110
137
  };
111
138
  autoTrackSelection: {
112
139
  bitrateFactorAtEmptyBuffer: number;
@@ -143,7 +170,6 @@ export type ITuningConfig = {
143
170
  enabled: boolean;
144
171
  ignoreDynamicAbrForShortVideo: boolean;
145
172
  stallDurationNoDataBeforeQualityDecrease: Milliseconds;
146
- stallDurationToBeCount: Milliseconds;
147
173
  stallCountBeforeQualityDecrease: Milliseconds;
148
174
  resetQualityRestrictionTimeout: Milliseconds;
149
175
  ignoreStallsOnSeek: boolean;
@@ -283,6 +309,7 @@ export type ITuningConfig = {
283
309
  * дешевле замершего воспроизведения.
284
310
  */
285
311
  recoverStuckSegmentLoading: boolean;
312
+ skipReloadOfFullyBufferedPartiallyEjectedSegments: boolean;
286
313
  };
287
314
  dashCmafLive: {
288
315
  externalStopControl: boolean;
@@ -373,10 +400,10 @@ export type ITuningConfig = {
373
400
  */
374
401
  stallIgnoreThreshold: Milliseconds;
375
402
  /**
376
- * Стратегия записи столлов
403
+ * Стратегия записи stall
377
404
  * verbose - записываем всё
378
- * exclude-threshold - записываем столлы длинее stallIgnoreThreshold, но вычитаем длину stallIgnoreThreshold
379
- * include-threshold - записываем столлы длинее stallIgnoreThreshold
405
+ * exclude-threshold - записываем stall длиннее stallIgnoreThreshold, но вычитаем длину stallIgnoreThreshold
406
+ * include-threshold - записываем stall длиннее stallIgnoreThreshold
380
407
  */
381
408
  stallHandlingStrategy: "verbose" | "exclude-threshold" | "include-threshold";
382
409
  stallIgnoreOnPause: boolean;
@@ -385,7 +412,6 @@ export type ITuningConfig = {
385
412
  /** @deprecated HLS.js удалён, флаг ничего не делает */
386
413
  useHlsJs: boolean;
387
414
  disableHlsOnDesktop: boolean;
388
- useNativeHLSTextTracks: boolean;
389
415
  useNewSwitchTo: boolean;
390
416
  alwaysAbortPreviousSwitch: boolean;
391
417
  useDashProviderVirtual: boolean;
@@ -1,32 +0,0 @@
1
- import type { IExternalTextTrack, IInternalTextTrack, ITextTrack } from "../../../player/types";
2
- import type { IDesiredState, IProviderOutput } from "../../types";
3
- /**
4
- * TODO: сейчас externalTextTracks и internalTextTracks записываются в availableTextTracks отсюда
5
- * нужно будет выпилить этот класс за исключением этой логики,
6
- * когда перестанет быть необходима поддержка браузерных субтитров
7
- */
8
- declare class TextTrackManager {
9
- private available$;
10
- private current$;
11
- private error$;
12
- private video;
13
- private cueSettings;
14
- private subscription;
15
- private externalTracks;
16
- private internalTracks;
17
- private baseURL?;
18
- constructor(baseURL?: string);
19
- connect(video: HTMLVideoElement, desiredState: Pick<IDesiredState, "externalTextTracks" | "internalTextTracks" | "currentTextTrack" | "textTrackCuesSettings">, providerOutput: Pick<IProviderOutput, "availableTextTracks$" | "currentTextTrack$" | "error$">): void;
20
- private subscribe;
21
- private applyCueSettings;
22
- private htmlTextTracksAsArray;
23
- private htmlTextTrackToITextTrack;
24
- private static isHealthyTrack;
25
- setExternal(tracks: IExternalTextTrack[]): void;
26
- setInternal(tracks: IInternalTextTrack[]): void;
27
- select(selectedId: ITextTrack["id"] | undefined): void;
28
- destroy(): void;
29
- private attach;
30
- private detach;
31
- }
32
- export default TextTrackManager;
@@ -1,6 +0,0 @@
1
- import type { IValueSubject } from "@vkontakte/videoplayer-shared";
2
- import type { IStateMachine } from "./StateMachine/types";
3
- export declare const setStateWithSubscribe: <
4
- State,
5
- Value
6
- >(nextState: State | undefined, currentState: IStateMachine<State | undefined>, availableValues: IValueSubject<Array<Value>> | undefined, predicate: (value: Value) => boolean) => void;