@vkontakte/videoplayer-core 2.0.161 → 2.0.162-beta.1
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 +60 -34
- package/es2015.esm.js +71 -45
- package/esnext.cjs +60 -34
- package/esnext.esm.js +60 -34
- package/evergreen.esm.js +60 -34
- package/package.json +2 -2
- package/types/index.d.ts +3 -2
- package/types/player/types.d.ts +13 -2
- package/types/providers/DashProvider/baseDashProvider.d.ts +3 -2
- package/types/providers/DashProvider/lib/buffer.d.ts +4 -1
- package/types/providers/DashProvider/lib/player.d.ts +6 -1
- package/types/providers/DashProvider/lib/utils.d.ts +1 -1
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +3 -2
- package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +4 -0
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +3 -0
- package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +4 -0
- package/types/providers/DashProviderVirtual/lib/player/types.d.ts +2 -1
- package/types/providers/DashProviderVirtual/lib/utils.d.ts +2 -2
- package/types/providers/ProviderContainer/index.d.ts +2 -0
- package/types/providers/ProviderContainer/utils/formatsSupport.d.ts +10 -3
- package/types/providers/utils/Abr/abrController.d.ts +7 -4
- package/types/providers/utils/Abr/abrManager.d.ts +2 -0
- package/types/providers/utils/Abr/controllers/abrPhaseController.d.ts +17 -0
- package/types/providers/utils/Abr/rules/audio/audioThroughputRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/audio/minAudioForVideoRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/audioRuleFactory.d.ts +2 -2
- package/types/providers/utils/Abr/rules/baseRule.d.ts +9 -5
- package/types/providers/utils/Abr/rules/limitAboveRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/limitBelowRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/video/abandonRequestRule.d.ts +12 -0
- package/types/providers/utils/Abr/rules/video/bolaRule.d.ts +31 -0
- package/types/providers/utils/Abr/rules/video/bufferRule.d.ts +7 -2
- package/types/providers/utils/Abr/rules/video/failedVideoTrackRule.d.ts +4 -3
- package/types/providers/utils/Abr/rules/video/fitsContainerRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/video/insufficientBufferRule.d.ts +15 -0
- package/types/providers/utils/Abr/rules/video/lowerLimitRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/video/throughputRule.d.ts +5 -4
- package/types/providers/utils/Abr/rules/video/upperLimitRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/videoRuleFactory.d.ts +3 -2
- package/types/providers/utils/Abr/types.d.ts +31 -5
- package/types/providers/utils/Abr/utils.d.ts +2 -1
- package/types/providers/utils/parsers/types.d.ts +1 -0
- package/types/utils/ThroughputEstimator.d.ts +1 -0
- package/types/utils/dashMaxTvVideoQuality.d.ts +7 -0
- package/types/utils/smoothedValue/baseSmoothedValue.d.ts +1 -0
- package/types/utils/smoothedValue/types.d.ts +1 -0
- package/types/utils/tuningConfig.d.ts +41 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IRuleInitContext, IVideoAbrContext } from "../../types";
|
|
2
|
+
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import type { Milliseconds } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
|
+
type LogsArgs = [forwardBufferDuration: Milliseconds | undefined, thresholdMs: Milliseconds, triggered: boolean, suppressedByGrace: boolean];
|
|
7
|
+
export declare class InsufficientBufferRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, LogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
|
+
private lastPlaybackResetAtMs;
|
|
9
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
10
|
+
init(initContext: IRuleInitContext): void;
|
|
11
|
+
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
12
|
+
private selectThroughputAwareFallback;
|
|
13
|
+
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferDuration: Milliseconds | undefined, thresholdMs: Milliseconds, triggered: boolean, suppressedByGrace: boolean): string;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import type { Nullable, QualityLimits } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { type ExactVideoQuality } from "@vkontakte/videoplayer-shared";
|
|
5
5
|
import { LimitBelowRule } from "../limitBelowRule";
|
|
6
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
7
|
type LowerLimitLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, limits: QualityLimits];
|
|
7
8
|
export declare class LowerLimitRule extends LimitBelowRule<IVideoTrack, IVideoAbrContext, LowerLimitLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
|
-
constructor(
|
|
9
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
9
10
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
11
|
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, limits: QualityLimits): string;
|
|
11
12
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import type { Kbps, Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
7
|
type StallLogsArgs = [forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, tuning: ITuningConfig];
|
|
7
8
|
export declare class StallsRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, StallLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
9
|
private severeStallOccurred;
|
|
@@ -10,7 +11,7 @@ export declare class StallsRule extends LimitAboveRule<IVideoTrack, IVideoAbrCon
|
|
|
10
11
|
private lastStallDurationRestriction;
|
|
11
12
|
private maxQualityLimitOnStall;
|
|
12
13
|
private predictedThroughputWithoutData;
|
|
13
|
-
constructor(
|
|
14
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
14
15
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
15
16
|
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, tuning: ITuningConfig): string;
|
|
16
17
|
private updateStallQualityLimits;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import type { Kbps, Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
|
-
|
|
6
|
+
import { AbrPhase, type RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
7
|
+
type ThroughputLogsArgs = [forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, phase: AbrPhase | undefined, tuning: ITuningConfig];
|
|
7
8
|
export declare class ThroughputRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, ThroughputLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
|
-
constructor(
|
|
9
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
9
10
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
|
-
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, tuning: ITuningConfig): string;
|
|
11
|
+
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, phase: AbrPhase | undefined, tuning: ITuningConfig): string;
|
|
11
12
|
}
|
|
12
13
|
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import type { Nullable, QualityLimits, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { type ExactVideoQuality } from "@vkontakte/videoplayer-shared";
|
|
5
5
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
6
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
7
|
type UpperLimitsLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, visible: boolean, limits: QualityLimits, backgroundVideoQualityLimit: VideoQuality, effectiveType: string | undefined, connectionDataQualityLimit: ExactVideoQuality | undefined];
|
|
7
8
|
/**
|
|
8
9
|
* Правило верхнего ограничения качества в авто-ABR. Из списка `videoTracksDesc`
|
|
@@ -60,7 +61,7 @@ type UpperLimitsLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: N
|
|
|
60
61
|
* `LowerLimitRule` (поле `limits.min` здесь не используется).
|
|
61
62
|
*/
|
|
62
63
|
export declare class UpperLimitsRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, UpperLimitsLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
63
|
-
constructor(
|
|
64
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
64
65
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
65
66
|
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, visible: boolean, limits: QualityLimits, backgroundVideoQualityLimit: VideoQuality, effectiveType: string | undefined, connectionDataQualityLimit: ExactVideoQuality | undefined): string;
|
|
66
67
|
private getConnection;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IVideoTrack } from "../../../../player/types";
|
|
2
2
|
import type { IAbrRule, IVideoAbrContext } from "../types";
|
|
3
|
-
import {
|
|
3
|
+
import { VideoRuleName } from "../types";
|
|
4
|
+
import { type RulePhaseConfig } from "../controllers/abrPhaseController";
|
|
4
5
|
export declare class VideoRuleFactory {
|
|
5
|
-
static createRule(ruleName: VideoRuleName,
|
|
6
|
+
static createRule(ruleName: VideoRuleName, phaseConfig?: RulePhaseConfig): IAbrRule<IVideoTrack, IVideoAbrContext>;
|
|
6
7
|
}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../../../player/types";
|
|
2
|
-
import type { IComponentLogger, IObservable, IRectangle, IValueSubject, Kbps, Milliseconds, Nullable, QualityLimits } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { Byte, IComponentLogger, IObservable, IRectangle, IValueSubject, Kbps, Milliseconds, Nullable, QualityLimits } from "@vkontakte/videoplayer-shared";
|
|
3
3
|
import type { ITuningConfig } from "../../../utils/tuningConfig";
|
|
4
4
|
import type { Representation, Segment } from "../parsers/types";
|
|
5
5
|
import type { ElementSizeManager } from "../HTMLVideoElement/ElementSizeManager";
|
|
6
6
|
import type { IObservableVideo } from "../HTMLVideoElement/observable";
|
|
7
|
+
import type { AbrPhase } from "./controllers/abrPhaseController";
|
|
7
8
|
export declare enum RuleConfidence {
|
|
8
9
|
Low = 0,
|
|
9
10
|
Normal = 1,
|
|
10
11
|
High = 2
|
|
11
12
|
}
|
|
12
13
|
export declare enum VideoRuleName {
|
|
14
|
+
/** @deprecated Заменено на `Bola` + `InsufficientBuffer` в фазовой архитектуре ABR. */
|
|
13
15
|
Buffer = "buffer_rule",
|
|
16
|
+
Bola = "bola_rule",
|
|
14
17
|
FitsContainer = "fits_container_rule",
|
|
15
18
|
FailedVideoTrack = "failed_video_track_rule",
|
|
16
19
|
Stalls = "stalls_rule",
|
|
17
20
|
LowerLimit = "lower_limit_rule",
|
|
18
21
|
UpperLimit = "upper_limit_rule",
|
|
19
|
-
Throughput = "throughput_rule"
|
|
22
|
+
Throughput = "throughput_rule",
|
|
23
|
+
AbandonRequest = "abandon_request_rule",
|
|
24
|
+
InsufficientBuffer = "insufficient_buffer_rule"
|
|
20
25
|
}
|
|
21
26
|
export declare enum AudioRuleName {
|
|
22
27
|
MinAudioForVideo = "min_audio_for_video_rule",
|
|
@@ -36,6 +41,11 @@ export interface IUpdatableAbrManagerContext {
|
|
|
36
41
|
forwardBufferHealth?: number;
|
|
37
42
|
forwardVideoBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
38
43
|
forwardAudioBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
44
|
+
forwardBufferDuration?: Milliseconds;
|
|
45
|
+
videoSegmentLoadProgress?: VideoSegmentLoadProgress;
|
|
46
|
+
isLive?: boolean;
|
|
47
|
+
remainingDurationMs?: Milliseconds;
|
|
48
|
+
mpdSegmentDurationMs?: Milliseconds;
|
|
39
49
|
}
|
|
40
50
|
export interface IInitAbrManagerContext {
|
|
41
51
|
tuning: ITuningConfig;
|
|
@@ -44,6 +54,7 @@ export interface IInitAbrManagerContext {
|
|
|
44
54
|
videoLastDataObtainedTimestamp$: IValueSubject<Milliseconds>;
|
|
45
55
|
throughput$: IValueSubject<Kbps>;
|
|
46
56
|
rtt$: IValueSubject<Milliseconds>;
|
|
57
|
+
throughputVariance$?: IValueSubject<number>;
|
|
47
58
|
element: HTMLVideoElement;
|
|
48
59
|
failedVideoTrack: Nullable<IVideoTrack>;
|
|
49
60
|
abrLogger: IComponentLogger;
|
|
@@ -70,19 +81,21 @@ export interface IAbrRuleResolution<T extends IBaseTrack> {
|
|
|
70
81
|
name: string;
|
|
71
82
|
logMessage: string;
|
|
72
83
|
}
|
|
84
|
+
export interface IRuleInitContext extends IInitAbrManagerContext {}
|
|
73
85
|
export interface IAbrRule<
|
|
74
86
|
T extends IBaseTrack,
|
|
75
87
|
C extends IBaseAbrControllerContext
|
|
76
88
|
> {
|
|
77
|
-
|
|
89
|
+
readonly activePhases: ReadonlySet<AbrPhase>;
|
|
90
|
+
init(initContext: IRuleInitContext): void;
|
|
78
91
|
destroy(): void;
|
|
79
92
|
execute(context: C): IAbrRuleResolution<T>;
|
|
80
93
|
}
|
|
81
94
|
export interface IAbrController<T extends IBaseTrack> {
|
|
82
|
-
init(rules: IAbrRule<T, IBaseAbrControllerContext>[], initContext:
|
|
95
|
+
init(rules: IAbrRule<T, IBaseAbrControllerContext>[], initContext: IRuleInitContext): void;
|
|
83
96
|
destroy(): void;
|
|
84
97
|
updateContext(context: IBaseAbrControllerContext): void;
|
|
85
|
-
autoSelectTrack(): T;
|
|
98
|
+
autoSelectTrack(rules?: IAbrRule<T, IBaseAbrControllerContext>[]): T;
|
|
86
99
|
}
|
|
87
100
|
export interface IBaseAbrControllerContext extends IVideoTracksContext {
|
|
88
101
|
currentVideoTrack: Nullable<IVideoTrack>;
|
|
@@ -92,8 +105,16 @@ export interface IBaseAbrControllerContext extends IVideoTracksContext {
|
|
|
92
105
|
estimatedThroughput: Kbps;
|
|
93
106
|
reserve: Kbps;
|
|
94
107
|
forwardBufferHealth: Nullable<number>;
|
|
108
|
+
forwardBufferDuration: Milliseconds | undefined;
|
|
95
109
|
playbackRate: number;
|
|
110
|
+
throughputVariance: number;
|
|
96
111
|
}
|
|
112
|
+
export type VideoSegmentLoadProgress = {
|
|
113
|
+
startedAtMs: Milliseconds;
|
|
114
|
+
loadedBytes: Byte;
|
|
115
|
+
totalBytes: Byte | undefined;
|
|
116
|
+
segmentDurationMs: Milliseconds;
|
|
117
|
+
};
|
|
97
118
|
export interface IVideoAbrContext extends IBaseAbrControllerContext {
|
|
98
119
|
container: Nullable<IRectangle>;
|
|
99
120
|
panelSize: Nullable<IRectangle>;
|
|
@@ -102,6 +123,11 @@ export interface IVideoAbrContext extends IBaseAbrControllerContext {
|
|
|
102
123
|
visible: boolean;
|
|
103
124
|
severeStallOccurred: boolean;
|
|
104
125
|
lastStallDuration: Milliseconds;
|
|
126
|
+
videoSegmentLoadProgress?: VideoSegmentLoadProgress;
|
|
127
|
+
remainingDurationMs: Milliseconds | undefined;
|
|
128
|
+
isLive: boolean;
|
|
129
|
+
mpdSegmentDurationMs: Milliseconds | undefined;
|
|
130
|
+
phase?: AbrPhase;
|
|
105
131
|
}
|
|
106
132
|
export type IAudioAbrContext = IBaseAbrControllerContext & IAudioTracksContext;
|
|
107
133
|
export declare const isAudioAbrContext: (context: IBaseAbrControllerContext) => context is IAudioAbrContext;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
1
|
+
import type { Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
2
2
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../../../player/types";
|
|
3
|
+
export declare const bufferToPlaybackMs: (contentMs: Milliseconds | undefined, playbackRate: number) => Milliseconds;
|
|
3
4
|
export declare enum CompareTrack {
|
|
4
5
|
Descending = -1,
|
|
5
6
|
Ascending = 1
|
|
@@ -20,6 +20,7 @@ declare class ThroughputEstimator {
|
|
|
20
20
|
addRawThroughput(rate: Kbps): void;
|
|
21
21
|
addRawRtt(time: Milliseconds): void;
|
|
22
22
|
private sanityCheck;
|
|
23
|
+
get throughputVariance$(): IValueSubject<number>;
|
|
23
24
|
private static loadStored;
|
|
24
25
|
private static writeStored;
|
|
25
26
|
private static validateStored;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VideoFormat } from "../player/types";
|
|
2
|
+
import type { Manifest } from "../providers/utils/parsers/types";
|
|
3
|
+
import type { ExactVideoQuality, IError } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
5
|
+
export declare const getDashMaxTvVideoQuality: (e: IError, videoFormat?: VideoFormat, currentQuality?: VideoQuality) => ExactVideoQuality | null;
|
|
6
|
+
/** @mutates streams.video */
|
|
7
|
+
export declare const markDashMaxTvVideoQuality: (streams: Manifest["streams"], dashMaxTvVideoQuality: ExactVideoQuality) => void;
|
|
@@ -12,6 +12,7 @@ export declare abstract class BaseSmoothedValue implements ISmoothedValue {
|
|
|
12
12
|
protected params: IParams;
|
|
13
13
|
smoothed$: IValueSubject<number>;
|
|
14
14
|
debounced$: IValueSubject<number>;
|
|
15
|
+
varianceCoefficient$: IValueSubject<number>;
|
|
15
16
|
constructor(params: IParams);
|
|
16
17
|
protected abstract updateSmoothedValue(value: number): void;
|
|
17
18
|
next(value: number): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
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";
|
|
@@ -36,6 +36,7 @@ export type ITuningConfig = {
|
|
|
36
36
|
initialThroughput: Kbps;
|
|
37
37
|
measureNonSegmentRequests: boolean;
|
|
38
38
|
smallSampleMinDuration: Milliseconds;
|
|
39
|
+
cacheThresholdSize: Milliseconds;
|
|
39
40
|
rttPenaltyRequestSize: Byte;
|
|
40
41
|
streamMinSampleSize: Byte;
|
|
41
42
|
streamMinSampleTime: Milliseconds;
|
|
@@ -174,6 +175,7 @@ export type ITuningConfig = {
|
|
|
174
175
|
useBufferHoldingOnlyOnStall: boolean;
|
|
175
176
|
useAbortResetNativeBufferMutex: boolean;
|
|
176
177
|
useNewAbr: boolean;
|
|
178
|
+
useAbrPhases: boolean;
|
|
177
179
|
abrVideoRules: VideoRuleName[];
|
|
178
180
|
abrAudioRules: AudioRuleName[];
|
|
179
181
|
useDynamicBirtateRule: boolean;
|
|
@@ -183,8 +185,33 @@ export type ITuningConfig = {
|
|
|
183
185
|
saveData3gQualityLimit: ExactVideoQuality;
|
|
184
186
|
saveData2gQualityLimit: ExactVideoQuality;
|
|
185
187
|
useConnectionDataUpperLimit: boolean;
|
|
186
|
-
|
|
188
|
+
abandon: {
|
|
189
|
+
minElapsedMs: Milliseconds;
|
|
190
|
+
bufferSafetyFactor: number;
|
|
191
|
+
minLoadedFraction: number;
|
|
192
|
+
minBufferToActivateMs: Milliseconds;
|
|
193
|
+
};
|
|
194
|
+
bola: {
|
|
195
|
+
bufferTargetMs: Milliseconds;
|
|
196
|
+
minBufferMs: Milliseconds;
|
|
197
|
+
minBufferPerBitrateLevelMs: Milliseconds;
|
|
198
|
+
placeholderBufferDecay: number;
|
|
199
|
+
fallbackSegmentDurationMs: Milliseconds;
|
|
200
|
+
finiteThresholdMs: Milliseconds;
|
|
201
|
+
adaptiveBufferTargetK: number;
|
|
202
|
+
adaptiveBufferTargetMaxMs: Milliseconds;
|
|
203
|
+
trimDetectThresholdMs: Milliseconds;
|
|
204
|
+
antiCascadeDownshift: boolean;
|
|
205
|
+
};
|
|
206
|
+
insufficientBuffer: {
|
|
207
|
+
thresholdMs: Milliseconds;
|
|
208
|
+
gracePeriodAfterPlaybackResetMs: Milliseconds;
|
|
209
|
+
budgetFactor: number;
|
|
210
|
+
fallbackSegmentDurationMs: Milliseconds;
|
|
211
|
+
};
|
|
212
|
+
videoStreamRepresentaionsFilter: [VideoQuality, number, VideoCodecName][];
|
|
187
213
|
filterOnDemandQualityList: boolean;
|
|
214
|
+
dashMaxTvVideoQuality: boolean;
|
|
188
215
|
};
|
|
189
216
|
dashCmafLive: {
|
|
190
217
|
externalStopControl: boolean;
|
|
@@ -260,7 +287,17 @@ export type ITuningConfig = {
|
|
|
260
287
|
useDelayedPlaybackHangupWithData: boolean;
|
|
261
288
|
playbackHangupNoDataThreshold: Milliseconds;
|
|
262
289
|
endGapTolerance: Milliseconds;
|
|
290
|
+
/**
|
|
291
|
+
* Время после перехода в состояние buffering, когда мы считаем что происходит stall
|
|
292
|
+
*/
|
|
263
293
|
stallIgnoreThreshold: Milliseconds;
|
|
294
|
+
/**
|
|
295
|
+
* Стратегия записи столлов
|
|
296
|
+
* verbose - записываем всё
|
|
297
|
+
* exclude-threshold - записываем столлы длинее stallIgnoreThreshold, но вычитаем длину stallIgnoreThreshold
|
|
298
|
+
* include-threshold - записываем столлы длинее stallIgnoreThreshold
|
|
299
|
+
*/
|
|
300
|
+
stallHandlingStrategy: "verbose" | "exclude-threshold" | "include-threshold";
|
|
264
301
|
gapWatchdogInterval: Milliseconds;
|
|
265
302
|
requestQuick: boolean;
|
|
266
303
|
/** @deprecated HLS.js удалён, флаг ничего не делает */
|
|
@@ -370,6 +407,8 @@ export type ITuningConfig = {
|
|
|
370
407
|
hls: {
|
|
371
408
|
filterOnDemandQualityList: boolean;
|
|
372
409
|
};
|
|
410
|
+
/** отключает субтитры в ядре */
|
|
411
|
+
disableSubtitles: boolean;
|
|
373
412
|
/**
|
|
374
413
|
* Устанавливаем длительность видео на основе последнего сегмента.
|
|
375
414
|
*/
|