@vkontakte/videoplayer-core 2.0.171-dev.ed76c949d.0 → 2.0.171
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 +161 -49
- package/es2015.esm.js +160 -48
- package/esnext.cjs +158 -46
- package/esnext.esm.js +158 -46
- package/evergreen.esm.js +158 -46
- package/package.json +2 -2
- package/types/player/Player.d.ts +0 -1
- package/types/providers/DashLiveProvider/utils/LiveDashPlayer.d.ts +9 -3
- package/types/providers/DashProvider/baseDashProvider.d.ts +4 -1
- package/types/providers/DashProvider/lib/sourceBufferTaskQueue.d.ts +2 -1
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +3 -1
- package/types/providers/DashProviderVirtual/lib/buffer/nativeBufferManager.d.ts +1 -1
- package/types/providers/DashProviderVirtual/lib/buffer/sourceBufferTaskQueue.d.ts +2 -1
- package/types/providers/ProviderContainer/Mayday/heuristics/HangupHeuristic.d.ts +23 -0
- package/types/providers/ProviderContainer/Mayday/index.d.ts +1 -2
- package/types/providers/ProviderContainer/Mayday/types.d.ts +0 -1
- package/types/providers/ProviderContainer/index.d.ts +1 -0
- package/types/providers/ProviderContainer/utils/formatsSupport.d.ts +1 -0
- package/types/providers/ProviderContainer/utils/playbackHangup.d.ts +2 -6
- package/types/providers/utils/Abr/abrController.d.ts +1 -4
- package/types/providers/utils/Abr/abrManager.d.ts +0 -1
- package/types/providers/utils/Abr/controllers/stallsController.d.ts +1 -8
- package/types/providers/utils/Abr/rules/audio/audioThroughputRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/audio/minAudioForVideoRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/baseRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/abandonRequestRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/bolaRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/bufferRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/downloadTimeRule.d.ts +15 -0
- package/types/providers/utils/Abr/rules/video/failedVideoTrackRule.d.ts +14 -0
- package/types/providers/utils/Abr/rules/video/fitsContainerRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/insufficientBufferRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/lowerLimitRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +2 -6
- package/types/providers/utils/Abr/rules/video/throughputRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/tvDisabledVideoTrackRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/upperLimitRule.d.ts +2 -2
- package/types/providers/utils/Abr/types.d.ts +8 -6
- package/types/providers/utils/Abr/utils.d.ts +3 -1
- package/types/providers/utils/HTMLVideoElement/destroy.d.ts +1 -1
- package/types/providers/utils/HTMLVideoElement/pool.d.ts +3 -2
- package/types/utils/autoSelectTrack.d.ts +4 -3
- package/types/utils/buffer/dynamicBufferTarget.d.ts +10 -0
- package/types/utils/tuningConfig.d.ts +33 -24
- package/types/providers/ProviderContainer/Mayday/GraceTimeout.d.ts +0 -17
- package/types/providers/ProviderContainer/Mayday/heuristics/StartupHangupHeuristic.d.ts +0 -46
- package/types/providers/ProviderContainer/Mayday/heuristics/TvFetcherErrorHeuristic.d.ts +0 -10
- package/types/utils/timers.d.ts +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ITuningConfig } from "./tuningConfig";
|
|
2
|
-
import type { Kbps, Milliseconds, IRectangle, QualityLimits, IComponentLogger } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { Kbps, Milliseconds, IRectangle, QualityLimits, IComponentLogger, Nullable } from "@vkontakte/videoplayer-shared";
|
|
3
3
|
import { type ExactVideoQuality } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../player/types";
|
|
5
5
|
interface IConstraints<T extends IBaseTrack> {
|
|
@@ -11,6 +11,7 @@ interface IConstraints<T extends IBaseTrack> {
|
|
|
11
11
|
playbackRate?: number;
|
|
12
12
|
forwardBufferHealth?: number;
|
|
13
13
|
current?: T;
|
|
14
|
+
failedVideoTrack?: Nullable<T>;
|
|
14
15
|
visible?: boolean;
|
|
15
16
|
history?: TrackHistory<T>;
|
|
16
17
|
droppedVideoMaxQualityLimit?: ExactVideoQuality;
|
|
@@ -29,8 +30,8 @@ export declare class TrackHistory<T extends IBaseTrack> {
|
|
|
29
30
|
export declare const defaultEmptyArrayErrorMessage = "Assertion \"ABR Tracks is empty array\" failed";
|
|
30
31
|
export declare const getMinPossibleAudioForVideoOld: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
|
|
31
32
|
export declare const getMinPossibleAudioForVideoNew: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
|
|
32
|
-
export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
33
|
-
export declare const autoSelectVideoTrackOld: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
33
|
+
export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, failedVideoTrack, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
34
|
+
export declare const autoSelectVideoTrackOld: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, failedVideoTrack, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
34
35
|
export declare const autoSelectAudioTrackForVideoOld: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
|
|
35
36
|
export declare const autoSelectAudioTrackForVideoNew: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
|
|
36
37
|
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Kbps, Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { ITuningConfig } from "../tuningConfig";
|
|
3
|
+
type DynamicBufferTargetConfig = ITuningConfig["dash"]["dynamicBufferTarget"];
|
|
4
|
+
export interface IDynamicBufferTargetState {
|
|
5
|
+
throughputKbps: Kbps;
|
|
6
|
+
currentBitrateKbps: Nullable<Kbps>;
|
|
7
|
+
baseTargetMs: Milliseconds;
|
|
8
|
+
}
|
|
9
|
+
export declare const computeDynamicBufferTarget: (state: IDynamicBufferTargetState, config: DynamicBufferTargetConfig) => Milliseconds;
|
|
10
|
+
export {};
|
|
@@ -2,7 +2,7 @@ import type { VideoCodecName, VideoFormat } from "../player/types";
|
|
|
2
2
|
import { WebmCodecStrategy } from "../enums/WebmCodecStrategy";
|
|
3
3
|
import { AndroidPreferredFormat } from "../enums/AndroidPreferredFormat";
|
|
4
4
|
import { IOSPreferredFormat } from "../enums/IOSPreferredFormat";
|
|
5
|
-
import type { Byte, Kbps, Milliseconds, RecursivePartial, Seconds
|
|
5
|
+
import type { Byte, Kbps, Milliseconds, RecursivePartial, Seconds } 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
8
|
export type ITuningConfig = {
|
|
@@ -13,23 +13,24 @@ export type ITuningConfig = {
|
|
|
13
13
|
playingUnstableThresholdMs: Milliseconds;
|
|
14
14
|
/** Список имён включённых эвристик. Пустой массив = все эвристики выключены */
|
|
15
15
|
heuristics: string[];
|
|
16
|
-
/** Множитель уменьшения grace-таймаута при каждом поступлении данных в StartupHangupHeuristic */
|
|
17
|
-
hangupGraceDecayFactor: number;
|
|
18
|
-
/** Минимальный grace-таймаут (мс). При достижении — следующий decay возвращает 0 (немедленный expire) */
|
|
19
|
-
hangupGraceMinTimeoutMs: Milliseconds;
|
|
20
|
-
/**
|
|
21
|
-
* Если true — audible (не muted) хэнгап в hidden-вкладке откладывается до возврата на visible (reinit),
|
|
22
|
-
* desired state при этом не меняется.
|
|
23
|
-
* Если false — audible хэнгап в hidden-вкладке мониторится: данные перезапускают decay-таймер,
|
|
24
|
-
* при ≥3 поступлениях данных без завершения перехода — эскалация в switch_codec/switch_provider.
|
|
25
|
-
*/
|
|
26
|
-
deferAudibleHangupOnHiddenTab: boolean;
|
|
27
16
|
};
|
|
28
17
|
/**
|
|
18
|
+
* Если true, внутренний video элемент не будет уничтожаться при реините провайдера
|
|
19
|
+
* и при создании нового экземляра Player.
|
|
20
|
+
* Будет веcти себя аналогично элементу переданному снаружи
|
|
21
|
+
* Для кейса прямого использовани ядра
|
|
22
|
+
*/
|
|
23
|
+
keepVideoElement: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Временный флаг для тестирования очистки video элемента
|
|
26
|
+
* Если true, при очистке будет вызван innerHTML = '' для очистки дочерних элементов трэков
|
|
27
|
+
* В противном случае они размножаются
|
|
28
|
+
*/
|
|
29
|
+
clearVideoElementInnerHTML: boolean;
|
|
30
|
+
/**
|
|
29
31
|
* Включает очистку состояния плеера при вызове метода stop()
|
|
30
32
|
*/
|
|
31
33
|
allowPlayerReuse: boolean;
|
|
32
|
-
useWorkerTimers: TimerModule[];
|
|
33
34
|
throughputEstimator: {
|
|
34
35
|
type: "TwoEma" | "EmaAndMa";
|
|
35
36
|
emaAlphaSlow: number;
|
|
@@ -118,7 +119,6 @@ export type ITuningConfig = {
|
|
|
118
119
|
activeVideoAreaThreshold: number;
|
|
119
120
|
trafficSavingLimit: ExactVideoQuality;
|
|
120
121
|
highQualityLimit: ExactVideoQuality;
|
|
121
|
-
lowQualityTelemetryLimit: ExactVideoQuality;
|
|
122
122
|
};
|
|
123
123
|
stallsManager: {
|
|
124
124
|
enabled: boolean;
|
|
@@ -159,6 +159,7 @@ export type ITuningConfig = {
|
|
|
159
159
|
forwardBufferTargetManual: Milliseconds;
|
|
160
160
|
forwardBufferTargetPreload: Milliseconds;
|
|
161
161
|
audioBufferAheadOfVideoMs: Milliseconds;
|
|
162
|
+
useDynamicBufferTarget: boolean;
|
|
162
163
|
seekBiasInTheEnd: Milliseconds;
|
|
163
164
|
maxSegmentDurationLeftToSelectNextSegment: Milliseconds;
|
|
164
165
|
minSafeBufferThreshold: number;
|
|
@@ -181,12 +182,14 @@ export type ITuningConfig = {
|
|
|
181
182
|
useSmartRepresentationSwitch: boolean;
|
|
182
183
|
stallForceSeekOncePerStall: boolean;
|
|
183
184
|
useFetchPriorityHints: boolean;
|
|
185
|
+
useAbortMSEFix: boolean;
|
|
184
186
|
enableBaseUrlSupport: boolean;
|
|
185
187
|
maxSegmentRetryCount: number;
|
|
186
188
|
sourceOpenTimeout: number;
|
|
187
189
|
vktvAbrThrottle: number;
|
|
188
190
|
timeupdateEventTickThrottle: number;
|
|
189
191
|
fetcherBufferOptimisation: boolean;
|
|
192
|
+
codecsPrioritizeEnabled: boolean;
|
|
190
193
|
usePersistentGaps: boolean;
|
|
191
194
|
abrThrottle: number;
|
|
192
195
|
useVideoElementWaitingCurrentTimeReassign: boolean;
|
|
@@ -205,7 +208,9 @@ export type ITuningConfig = {
|
|
|
205
208
|
abrVideoRules: VideoRuleName[];
|
|
206
209
|
abrAudioRules: AudioRuleName[];
|
|
207
210
|
useDynamicBirtateRule: boolean;
|
|
211
|
+
useNewFailoverLogic: boolean;
|
|
208
212
|
useFailoverHostsOnAllProviderCrash: boolean;
|
|
213
|
+
videoTrackBanAfterProviderFail: Milliseconds;
|
|
209
214
|
saveData3gQualityLimit: ExactVideoQuality;
|
|
210
215
|
saveData2gQualityLimit: ExactVideoQuality;
|
|
211
216
|
useConnectionDataUpperLimit: boolean;
|
|
@@ -233,14 +238,26 @@ export type ITuningConfig = {
|
|
|
233
238
|
budgetFactor: number;
|
|
234
239
|
fallbackSegmentDurationMs: Milliseconds;
|
|
235
240
|
};
|
|
241
|
+
dynamicBufferTarget: {
|
|
242
|
+
maxMs: Milliseconds;
|
|
243
|
+
optimisticHeadroomLow: number;
|
|
244
|
+
optimisticHeadroomHigh: number;
|
|
245
|
+
weakThroughputLowKbps: Kbps;
|
|
246
|
+
weakThroughputHighKbps: Kbps;
|
|
247
|
+
maxFactor: number;
|
|
248
|
+
};
|
|
236
249
|
videoStreamRepresentaionsFilter: [VideoQuality, number, VideoCodecName][];
|
|
237
250
|
filterOnDemandQualityList: boolean;
|
|
238
251
|
dashMaxTvVideoQuality: boolean;
|
|
239
252
|
checkRepresentationCanPlayType: Extract<CanPlayTypeResult, "maybe" | "probably"> | false;
|
|
240
253
|
preloadFirstSegment: boolean;
|
|
241
254
|
maxQualityForFirstSegmentPreload: ExactVideoQuality;
|
|
242
|
-
|
|
243
|
-
|
|
255
|
+
downloadTime: {
|
|
256
|
+
minLookaheadSegments: number;
|
|
257
|
+
safetyFactor: number;
|
|
258
|
+
bootstrapBufferMs: Milliseconds;
|
|
259
|
+
demandTolerance: number;
|
|
260
|
+
};
|
|
244
261
|
};
|
|
245
262
|
dashCmafLive: {
|
|
246
263
|
externalStopControl: boolean;
|
|
@@ -437,14 +454,6 @@ export type ITuningConfig = {
|
|
|
437
454
|
useDurationFromSegments: boolean;
|
|
438
455
|
/** включен режим проигрывания только аудио (без видео) */
|
|
439
456
|
audioOnly: boolean;
|
|
440
|
-
/**
|
|
441
|
-
* Переводить провайдер в READY по loadedmetadata вместо canplay.
|
|
442
|
-
* canplay означает, что видео уже может играться, что избыточно для READY —
|
|
443
|
-
* достаточно получить манифест (loadedmetadata).
|
|
444
|
-
* Применяется только когда желаемое состояние — READY (preload): при автоплее
|
|
445
|
-
* провайдер по-прежнему ждёт canplay, чтобы play() не вызывался до появления данных.
|
|
446
|
-
*/
|
|
447
|
-
readyOnLoadedMetadata: boolean;
|
|
448
457
|
};
|
|
449
458
|
export type IOptionalTuningConfig = RecursivePartial<ITuningConfig>;
|
|
450
459
|
export declare const fillDefault: (partial: IOptionalTuningConfig) => ITuningConfig;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Milliseconds } from "@vkontakte/videoplayer-shared";
|
|
2
|
-
/**
|
|
3
|
-
* Декрементный grace-таймаут: каждый вызов `decay()` уменьшает оставшееся время.
|
|
4
|
-
*
|
|
5
|
-
* После создания `current` возвращает начальное значение.
|
|
6
|
-
* Каждый вызов `decay()` умножает `remaining` на `decayFactor`, но не меньше `minTimeout`.
|
|
7
|
-
* Когда `remaining` достигает `minTimeout` — следующий `decay()` возвращает 0 (expire).
|
|
8
|
-
*/
|
|
9
|
-
export declare class GraceTimeout {
|
|
10
|
-
private remaining;
|
|
11
|
-
private readonly decayFactor;
|
|
12
|
-
private readonly minTimeout;
|
|
13
|
-
constructor(initialTimeout: Milliseconds, decayFactor: number, minTimeout: Milliseconds);
|
|
14
|
-
get current(): Milliseconds;
|
|
15
|
-
decay(): Milliseconds;
|
|
16
|
-
reset(initialTimeout: Milliseconds): void;
|
|
17
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Subject } from "@vkontakte/videoplayer-shared";
|
|
2
|
-
import type { IError } from "@vkontakte/videoplayer-shared";
|
|
3
|
-
import type { IHeuristicDeps, IMaydayEvent } from "../types";
|
|
4
|
-
import type { IAsyncHeuristic, HeuristicResult } from "./IHeuristic";
|
|
5
|
-
/**
|
|
6
|
-
* Эвристика зависания перехода stopped-*.
|
|
7
|
-
*
|
|
8
|
-
* В зависимости от видимости вкладки и наличия звука выбирает стратегию
|
|
9
|
-
* и эмитит одну из рекомендаций:
|
|
10
|
-
*
|
|
11
|
-
* Visible-вкладка: grace-таймаут с уменьшением таймаута на поступление данных.
|
|
12
|
-
* — данные поступают → таймер продлевается.
|
|
13
|
-
* — grace истёк без прогресса → emit switch_codec (или switch_provider).
|
|
14
|
-
*
|
|
15
|
-
* Hidden-вкладка (audible): та же grace-модель с таймаутом (таймеры в воркере не тротлятся).
|
|
16
|
-
* — данные поступают → таймер продлевается.
|
|
17
|
-
* — grace истёк без прогресса → emit switch_codec.
|
|
18
|
-
*
|
|
19
|
-
* Hidden-вкладка (muted/deferred): молча ждём возврата на visible, desired state не трогаем.
|
|
20
|
-
* — вкладка стала visible → emit reinit (полный реинит сам восстановит воспроизведение).
|
|
21
|
-
* — переход всё-таки завершился в фоне (видео заиграло) → отмена, reinit не нужен.
|
|
22
|
-
*/
|
|
23
|
-
export declare class StartupHangupHeuristic implements IAsyncHeuristic {
|
|
24
|
-
private deps;
|
|
25
|
-
static readonly heuristicName = "StartupHangupHeuristic";
|
|
26
|
-
readonly type = "async";
|
|
27
|
-
readonly recommendation$: Subject<IMaydayEvent>;
|
|
28
|
-
private timerId;
|
|
29
|
-
private subscription;
|
|
30
|
-
private error;
|
|
31
|
-
private grace;
|
|
32
|
-
private hangupStartedAt;
|
|
33
|
-
private dataArrivals;
|
|
34
|
-
private hiddenWaitActive;
|
|
35
|
-
constructor(deps: IHeuristicDeps);
|
|
36
|
-
analyze(error: IError): HeuristicResult;
|
|
37
|
-
private startMonitoring;
|
|
38
|
-
private waitForVisible;
|
|
39
|
-
private restartTimer;
|
|
40
|
-
private recommendSwitch;
|
|
41
|
-
private isTabHidden;
|
|
42
|
-
private logOutcome;
|
|
43
|
-
private cancel;
|
|
44
|
-
reset(): void;
|
|
45
|
-
destroy(): void;
|
|
46
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { IError } from "@vkontakte/videoplayer-shared";
|
|
2
|
-
import type { IHeuristicDeps } from "../types";
|
|
3
|
-
import type { ISyncHeuristic, HeuristicResult } from "./IHeuristic";
|
|
4
|
-
export declare class TvFetcherErrorHeuristic implements ISyncHeuristic {
|
|
5
|
-
private _deps;
|
|
6
|
-
static readonly heuristicName = "TvFetcherErrorHeuristic";
|
|
7
|
-
readonly type = "sync";
|
|
8
|
-
constructor(_deps: IHeuristicDeps);
|
|
9
|
-
analyze(error: IError): HeuristicResult;
|
|
10
|
-
}
|
package/types/utils/timers.d.ts
DELETED