@vkontakte/videoplayer-core 2.0.181-dev.111b83b80.0 → 2.0.181-dev.132333d53.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.
- package/es2015.cjs +16 -16
- package/es2015.esm.js +8 -8
- package/esnext.cjs +8 -8
- package/esnext.esm.js +15 -15
- package/evergreen.esm.js +8 -8
- package/package.json +2 -2
- package/types/index.d.ts +3 -1
- package/types/player/Player.d.ts +2 -0
- package/types/player/types.d.ts +20 -3
- package/types/providers/DashProvider/baseDashProvider.d.ts +3 -0
- package/types/providers/DashProvider/lib/buffer.d.ts +49 -5
- package/types/providers/DashProvider/lib/fetcher.d.ts +31 -6
- package/types/providers/DashProvider/lib/player.d.ts +5 -0
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +3 -0
- package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +3 -0
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +21 -4
- package/types/providers/DashProviderVirtual/lib/fetcher.d.ts +30 -6
- package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +2 -0
- package/types/providers/DashProviderVirtual/lib/player/types.d.ts +4 -1
- package/types/providers/ProviderContainer/index.d.ts +2 -0
- package/types/providers/types.d.ts +2 -1
- package/types/providers/utils/Abr/abrManager.d.ts +2 -0
- package/types/providers/utils/Abr/mlAbr/chunkDownloadHistory.d.ts +34 -0
- package/types/providers/utils/Abr/mlAbr/modelInput.d.ts +47 -0
- package/types/providers/utils/Abr/mlAbr/workerClient.d.ts +57 -0
- package/types/providers/utils/Abr/mlAbr/workerProtocol.d.ts +67 -0
- package/types/providers/utils/Abr/rules/baseRule.d.ts +2 -1
- package/types/providers/utils/Abr/rules/video/mlAbrRule.d.ts +52 -0
- package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +9 -11
- package/types/providers/utils/Abr/types.d.ts +10 -1
- package/types/providers/utils/StallsManager.d.ts +1 -8
- package/types/utils/ClientChecker/services/DeviceChecker.d.ts +4 -0
- package/types/utils/ClientChecker/types/userAgentData.d.ts +4 -2
- package/types/utils/ThroughputEstimator.d.ts +20 -4
- package/types/utils/UserHappinessController.d.ts +8 -0
- package/types/utils/UserHappinessObserver/constants.d.ts +12 -0
- package/types/utils/UserHappinessObserver/index.d.ts +15 -0
- package/types/utils/UserHappinessObserver/metrics/hasFatalError.d.ts +3 -0
- package/types/utils/UserHappinessObserver/metrics/highStallRatio.d.ts +3 -0
- package/types/utils/UserHappinessObserver/metrics/lowQuality/constants.d.ts +5 -0
- package/types/utils/UserHappinessObserver/metrics/lowQuality/createLowQuality.d.ts +4 -0
- package/types/utils/UserHappinessObserver/metrics/lowQuality/index.d.ts +1 -0
- package/types/utils/UserHappinessObserver/metrics/lowQuality/types.d.ts +13 -0
- package/types/utils/UserHappinessObserver/metrics/lowQuality/utils.d.ts +26 -0
- package/types/utils/UserHappinessObserver/metrics/slowFirstFrame.d.ts +3 -0
- package/types/utils/UserHappinessObserver/types.d.ts +8 -0
- package/types/utils/UserHappinessObserver/utils/qualityPlatform.d.ts +2 -0
- package/types/utils/UserHappinessObserver/utils/thresholds.d.ts +2 -0
- package/types/utils/UserHappinessObserver/utils/watchedTimeSeconds.d.ts +3 -0
- package/types/utils/tuningConfig.d.ts +71 -20
- package/types/utils/userHappinessTriggers.d.ts +4 -0
- package/types/utils/buffer/getBackwardBufferDuration.d.ts +0 -3
|
@@ -5,6 +5,7 @@ import { IOSPreferredFormat } from "../enums/IOSPreferredFormat";
|
|
|
5
5
|
import type { Byte, Kbps, Milliseconds, RecursivePartial, Seconds, TimerModule } from "@vkontakte/videoplayer-shared";
|
|
6
6
|
import { type ExactVideoQuality, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
7
7
|
import { AudioRuleName, VideoRuleName } from "../providers/utils/Abr/types";
|
|
8
|
+
import type { UserHappinessTrigger } from "./userHappinessTriggers";
|
|
8
9
|
import type { SegmentCacheConfig } from "../providers/utils/segmentCache/types";
|
|
9
10
|
export type ITuningConfig = {
|
|
10
11
|
/** @deprecated */
|
|
@@ -42,6 +43,15 @@ export type ITuningConfig = {
|
|
|
42
43
|
initialThroughput: Kbps;
|
|
43
44
|
measureNonSegmentRequests: boolean;
|
|
44
45
|
smallSampleMinDuration: Milliseconds;
|
|
46
|
+
/**
|
|
47
|
+
* Верхняя граница скорости одного замера (Кбпс), выше которой sanityCheck его
|
|
48
|
+
* отбрасывает: такую полосу не даёт пользовательский канал — это кэш CDN/браузера,
|
|
49
|
+
* отдавший объект практически мгновенно. Дефолт 1 000 000 Кбит/с унаследован из
|
|
50
|
+
* хардкода sanityCheck до этого поля. Поднимается в e2e (UVP-11954): CI-раннеры
|
|
51
|
+
* стоят в одном ДЦ с CDN и качают сегменты быстрее гигабита — с дефолтным лимитом
|
|
52
|
+
* все замеры режутся и хостовая запись кеша не появляется.
|
|
53
|
+
*/
|
|
54
|
+
maxSampleRate: Kbps;
|
|
45
55
|
cacheThresholdSize: Milliseconds;
|
|
46
56
|
/**
|
|
47
57
|
* UVP-11541: верхняя граница порога, ниже которого ответ считается кэш-хитом по TTFB.
|
|
@@ -71,7 +81,7 @@ export type ITuningConfig = {
|
|
|
71
81
|
* мелкий сегмент качается параллельно с аудио и другого замера не получает.
|
|
72
82
|
* Параллельной считается загрузка, отдававшая байты внутри окна замера: открытая,
|
|
73
83
|
* но молчащая (подвисла либо уже выкачала своё и ждёт done) полосу не занимает.
|
|
74
|
-
* Честный кэш (мгновенная отдача
|
|
84
|
+
* Честный кэш (мгновенная отдача — скорость замера выше maxSampleRate) по-прежнему режется.
|
|
75
85
|
*
|
|
76
86
|
* Пункты 3 и 4 добавлены после эксперимента 37621: без них включённые быстрые сэмплы
|
|
77
87
|
* систематически занижали оценку, ABR держал низкое качество и сегменты оставались
|
|
@@ -90,23 +100,41 @@ export type ITuningConfig = {
|
|
|
90
100
|
maxLastEvaluationTimeout: Milliseconds;
|
|
91
101
|
};
|
|
92
102
|
/**
|
|
93
|
-
*
|
|
94
|
-
* При включении: если сохранённое значение старше storedThroughputTtlMs
|
|
95
|
-
* или тип сети изменился (Wi-Fi→3G) — значение отбрасывается.
|
|
96
|
-
* Предотвращает старт в 4K при переходе с Wi-Fi на мобильную сеть.
|
|
103
|
+
* UVP-11954: кеш оценки сети с разрезом по хосту раздачи (CDN).
|
|
97
104
|
*
|
|
98
|
-
* При
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* Срок жизни кешированного throughput (мс). По умолчанию 4 часа.
|
|
105
|
-
* После истечения TTL значение из localStorage игнорируется —
|
|
106
|
-
* используется browser estimation или initialThroughput.
|
|
107
|
-
* Применимо только при useThroughputTtl=true.
|
|
105
|
+
* При включении: ключи vk_uvp_throughput / vk_uvp_rtt хранят JSON
|
|
106
|
+
* {"hosts":{"<host>":{"value","timestamp","networkType"?}}} — чтение только
|
|
107
|
+
* записи текущего хоста (TTL + совпадение networkType), промах = холодный старт
|
|
108
|
+
* (browser estimation, затем initialThroughput). Запись — hosts-only, без общей
|
|
109
|
+
* записи; набор хостов ограничен LRU по hostsLimit. Чтение отложено до
|
|
110
|
+
* первого события адаптации: определённая эмиссия hostname$ или первый замер.
|
|
108
111
|
*/
|
|
109
|
-
|
|
112
|
+
cdnCache: {
|
|
113
|
+
/**
|
|
114
|
+
* Гейт всех изменений UVP-11954. При false (дефолт): бит-в-бит прежнее
|
|
115
|
+
* поведение — plain number в legacy-ключах one_video_*; ключи vk_uvp_*
|
|
116
|
+
* не читаются и не пишутся. Это даёт безопасный rollback JS-версии
|
|
117
|
+
* без потери свежих данных для старого кода.
|
|
118
|
+
*/
|
|
119
|
+
enabled: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Срок жизни каждой хостовой записи кеша (мс). По умолчанию 4 часа.
|
|
122
|
+
* Запись старше TTL при чтении отбрасывается — холодный старт.
|
|
123
|
+
* Применимо только при cdnCache.enabled=true.
|
|
124
|
+
*/
|
|
125
|
+
ttlMs: Milliseconds;
|
|
126
|
+
/**
|
|
127
|
+
* Предел числа хостовых записей в hosts (UVP-11954). При превышении при записи
|
|
128
|
+
* вытесняется запись с наименьшим timestamp (не считая текущего хоста).
|
|
129
|
+
* Протухшие по TTL записи уходят первыми — отдельной чистки нет.
|
|
130
|
+
* 10: ключ кеша — хост раздачи, а балансировщик video.get выдаёт хост
|
|
131
|
+
* при каждой загрузке видео и не гарантирует повтор предыдущего. За TTL
|
|
132
|
+
* активный пользователь может собрать записи по нескольким хостам —
|
|
133
|
+
* 10 покрывает это с запасом при ~100 Б на запись, ~1 КБ на набор из 10.
|
|
134
|
+
* Применимо только при cdnCache.enabled=true.
|
|
135
|
+
*/
|
|
136
|
+
hostsLimit: number;
|
|
137
|
+
};
|
|
110
138
|
};
|
|
111
139
|
autoTrackSelection: {
|
|
112
140
|
bitrateFactorAtEmptyBuffer: number;
|
|
@@ -143,7 +171,6 @@ export type ITuningConfig = {
|
|
|
143
171
|
enabled: boolean;
|
|
144
172
|
ignoreDynamicAbrForShortVideo: boolean;
|
|
145
173
|
stallDurationNoDataBeforeQualityDecrease: Milliseconds;
|
|
146
|
-
stallDurationToBeCount: Milliseconds;
|
|
147
174
|
stallCountBeforeQualityDecrease: Milliseconds;
|
|
148
175
|
resetQualityRestrictionTimeout: Milliseconds;
|
|
149
176
|
ignoreStallsOnSeek: boolean;
|
|
@@ -256,6 +283,26 @@ export type ITuningConfig = {
|
|
|
256
283
|
budgetFactor: number;
|
|
257
284
|
fallbackSegmentDurationMs: Milliseconds;
|
|
258
285
|
};
|
|
286
|
+
/**
|
|
287
|
+
* ML-правило ABR (UVP-12133). Поведенческие ручки; сессионный провайдер модели
|
|
288
|
+
* `instance.core.getAbrMLModel` — инстанс-данные initPlayer, не tuning.
|
|
289
|
+
*/
|
|
290
|
+
mlAbr: {
|
|
291
|
+
/** Фича-флаг. Выключен — правило не регистрируется, сеть и бандл не меняются. */
|
|
292
|
+
enabled: boolean;
|
|
293
|
+
/** Гостевая модель, когда провайдер не передан или вернул null. */
|
|
294
|
+
guestModelUrl: string | undefined;
|
|
295
|
+
/** Артефакт воркера на CDN; версионируемый путь — ручка флагов и экспериментов. */
|
|
296
|
+
workerJsUrl: string;
|
|
297
|
+
/** Каталог litert-артефакта на CDN; оттуда префетчатся iife и wasm параллельно модели. */
|
|
298
|
+
litertWasmUrl: string;
|
|
299
|
+
/** Прогрев: минимум записей истории чанков до входа в ML-режим. */
|
|
300
|
+
minHistorySize: number;
|
|
301
|
+
/** Сила голоса правила в конвейере. */
|
|
302
|
+
confidence: "high" | "normal";
|
|
303
|
+
/** Таймаут от создания клиента до готовности инференса в воркере. */
|
|
304
|
+
runtimeInitTimeoutMs: Milliseconds;
|
|
305
|
+
};
|
|
259
306
|
videoStreamRepresentaionsFilter: [VideoQuality, number, VideoCodecName][];
|
|
260
307
|
filterOnDemandQualityList: boolean;
|
|
261
308
|
dashMaxTvVideoQuality: boolean;
|
|
@@ -284,6 +331,8 @@ export type ITuningConfig = {
|
|
|
284
331
|
*/
|
|
285
332
|
recoverStuckSegmentLoading: boolean;
|
|
286
333
|
skipReloadOfFullyBufferedPartiallyEjectedSegments: boolean;
|
|
334
|
+
/** В Safari ждёт завершения append init-сегмента после abort перед выполнением remove. */
|
|
335
|
+
deferRemoveUntilAbortCompletes: boolean;
|
|
287
336
|
};
|
|
288
337
|
dashCmafLive: {
|
|
289
338
|
externalStopControl: boolean;
|
|
@@ -343,6 +392,8 @@ export type ITuningConfig = {
|
|
|
343
392
|
};
|
|
344
393
|
enableWakeLock: boolean;
|
|
345
394
|
enableTelemetryAtStart: boolean;
|
|
395
|
+
/** Список user-happiness-триггеров, включённых для отправки в tracer. Пустой список отключает их. */
|
|
396
|
+
userHappinessTriggers: UserHappinessTrigger[];
|
|
346
397
|
forceFormat: VideoFormat | undefined;
|
|
347
398
|
formatsToAvoid: VideoFormat[];
|
|
348
399
|
disableChromecast: boolean;
|
|
@@ -374,10 +425,10 @@ export type ITuningConfig = {
|
|
|
374
425
|
*/
|
|
375
426
|
stallIgnoreThreshold: Milliseconds;
|
|
376
427
|
/**
|
|
377
|
-
* Стратегия записи
|
|
428
|
+
* Стратегия записи stall
|
|
378
429
|
* verbose - записываем всё
|
|
379
|
-
* exclude-threshold - записываем
|
|
380
|
-
* include-threshold - записываем
|
|
430
|
+
* exclude-threshold - записываем stall длиннее stallIgnoreThreshold, но вычитаем длину stallIgnoreThreshold
|
|
431
|
+
* include-threshold - записываем stall длиннее stallIgnoreThreshold
|
|
381
432
|
*/
|
|
382
433
|
stallHandlingStrategy: "verbose" | "exclude-threshold" | "include-threshold";
|
|
383
434
|
stallIgnoreOnPause: boolean;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const USER_HAPPINESS_TRIGGER_NAMES: readonly ["has_fatal_error", "slow_first_frame", "high_stall_ratio", "low_quality"];
|
|
2
|
+
export type UserHappinessTrigger = (typeof USER_HAPPINESS_TRIGGER_NAMES)[number];
|
|
3
|
+
export declare const isUserHappinessTrigger: (value: unknown) => value is UserHappinessTrigger;
|
|
4
|
+
export declare const normalizeUserHappinessTriggers: (value: unknown) => UserHappinessTrigger[];
|