@vkontakte/videoplayer-core 2.0.158-dev.fdf6110f.0 → 2.0.159-dev.0948a7cb.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 +79 -75
- package/es2015.esm.js +81 -77
- package/esnext.cjs +77 -73
- package/esnext.esm.js +77 -73
- package/evergreen.esm.js +77 -73
- package/package.json +2 -2
- package/types/player/Player.d.ts +1 -0
- package/types/player/types.d.ts +5 -1
- package/types/providers/DashProvider/baseDashProvider.d.ts +3 -1
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +2 -1
- package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +6 -1
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +4 -4
- package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +3 -2
- package/types/providers/ProviderContainer/index.d.ts +1 -0
- package/types/providers/utils/Abr/abrController.d.ts +2 -2
- package/types/providers/utils/Abr/rules/audio/audioThroughputRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/audio/minAudioForVideoRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/audioRuleFactory.d.ts +7 -0
- package/types/providers/utils/Abr/rules/baseRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/video/bufferRule.d.ts +3 -2
- package/types/providers/utils/Abr/rules/video/failedVideoTrackRule.d.ts +13 -0
- package/types/providers/utils/Abr/rules/video/fitsContainerRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/lowerLimitRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/throughputRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/upperLimitRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/videoRuleFactory.d.ts +6 -0
- package/types/providers/utils/Abr/types.d.ts +15 -13
- package/types/providers/utils/Abr/utils.d.ts +2 -1
- package/types/utils/autoSelectTrack.d.ts +4 -3
- package/types/utils/tuningConfig.d.ts +8 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.159-dev.0948a7cb.0",
|
|
4
4
|
"author": "vk.com",
|
|
5
5
|
"description": "Videoplayer core library based on the vk.com platform",
|
|
6
6
|
"homepage": "https://vk.com",
|
|
@@ -42,6 +42,6 @@
|
|
|
42
42
|
"**/*.d.ts"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@vkontakte/videoplayer-shared": "1.0.
|
|
45
|
+
"@vkontakte/videoplayer-shared": "1.0.88-dev.0948a7cb.0"
|
|
46
46
|
}
|
|
47
47
|
}
|
package/types/player/Player.d.ts
CHANGED
package/types/player/types.d.ts
CHANGED
|
@@ -71,7 +71,11 @@ export interface IPlayer {
|
|
|
71
71
|
* Возвращает наиболее точное время воспроизведения.
|
|
72
72
|
* Может быть точнее, чем `info.position$` в промежутках между timeupdate
|
|
73
73
|
*/
|
|
74
|
-
getExactTime():
|
|
74
|
+
getExactTime(): Seconds;
|
|
75
|
+
/**
|
|
76
|
+
* Возвращает наиболее точное время воспроизведения трансляции.
|
|
77
|
+
*/
|
|
78
|
+
getExactLiveTime(): Seconds;
|
|
75
79
|
/**
|
|
76
80
|
* Возвращает все логи с момента инициализации плеера
|
|
77
81
|
*/
|
|
@@ -6,7 +6,7 @@ import type { IProvider, IProviderParams } from "../types";
|
|
|
6
6
|
import type { IObservableVideo } from "../utils/HTMLVideoElement/observable";
|
|
7
7
|
import { TrackHistory } from "../../utils/autoSelectTrack";
|
|
8
8
|
import type { IStateMachine } from "../../utils/StateMachine/types";
|
|
9
|
-
import type { ISubscription, ITracer, Milliseconds } from "@vkontakte/videoplayer-shared";
|
|
9
|
+
import type { ISubscription, ITracer, Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
10
10
|
import { Player } from "./lib/player";
|
|
11
11
|
import { Scene3D } from "../../utils/3d/Scene3D";
|
|
12
12
|
import DroppedFramesManager from "../utils/HTMLVideoElement/DroppedFramesManager";
|
|
@@ -17,6 +17,7 @@ import { ElementSizeManager } from "../utils/HTMLVideoElement/ElementSizeManager
|
|
|
17
17
|
type IParams = IProviderParams<IDashURLSource> & {
|
|
18
18
|
sourceHls?: IHLSSource;
|
|
19
19
|
forceVideoCodec?: VideoCodec;
|
|
20
|
+
failedVideoTrack?: Nullable<IVideoTrack>;
|
|
20
21
|
};
|
|
21
22
|
export default abstract class BaseDashProvider implements IProvider {
|
|
22
23
|
scene3D: Scene3D | undefined;
|
|
@@ -33,6 +34,7 @@ export default abstract class BaseDashProvider implements IProvider {
|
|
|
33
34
|
protected stallsManager: StallsManager;
|
|
34
35
|
protected elementSizeManager: ElementSizeManager;
|
|
35
36
|
protected abrManager: AbrManager;
|
|
37
|
+
protected failedVideoTrack: Nullable<IVideoTrack>;
|
|
36
38
|
protected videoTracksMap: Map<IVideoTrack, {
|
|
37
39
|
stream: Stream;
|
|
38
40
|
representation: Representation;
|
|
@@ -6,7 +6,7 @@ import type { IProvider, IProviderParams } from "../types";
|
|
|
6
6
|
import type { IObservableVideo } from "../utils/HTMLVideoElement/observable";
|
|
7
7
|
import { TrackHistory } from "../../utils/autoSelectTrack";
|
|
8
8
|
import type { IStateMachine } from "../../utils/StateMachine/types";
|
|
9
|
-
import type { ISubscription, ITracer, Milliseconds } from "@vkontakte/videoplayer-shared";
|
|
9
|
+
import type { ISubscription, ITracer, Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
10
10
|
import { Scene3D } from "../../utils/3d/Scene3D";
|
|
11
11
|
import DroppedFramesManager from "../utils/HTMLVideoElement/DroppedFramesManager";
|
|
12
12
|
import TextTrackManager from "../utils/HTMLVideoElement/TextTrackManager";
|
|
@@ -17,6 +17,7 @@ import { AbrManager } from "../utils/Abr/abrManager";
|
|
|
17
17
|
type IParams = IProviderParams<IDashURLSource> & {
|
|
18
18
|
sourceHls?: IHLSSource;
|
|
19
19
|
forceVideoCodec?: VideoCodec;
|
|
20
|
+
failedVideoTrack?: Nullable<IVideoTrack>;
|
|
20
21
|
};
|
|
21
22
|
export default abstract class BaseDashProvider implements IProvider {
|
|
22
23
|
scene3D: Scene3D | undefined;
|
|
@@ -3,6 +3,11 @@ import type { CommonInit, Manifest, Representation, Segment } from "../../../uti
|
|
|
3
3
|
import type { Fetcher } from "../fetcher";
|
|
4
4
|
import type { ITuningConfig } from "../../../../utils/tuningConfig";
|
|
5
5
|
export type TRepresentationSwitchMode = "lazy" | "force";
|
|
6
|
+
export declare enum SwithRepresentationMode {
|
|
7
|
+
Lazy = "lazy",
|
|
8
|
+
Default = "default",
|
|
9
|
+
Force = "force"
|
|
10
|
+
}
|
|
6
11
|
export interface Dependencies {
|
|
7
12
|
fetcher: Fetcher;
|
|
8
13
|
tuning: ITuningConfig;
|
|
@@ -23,7 +28,7 @@ export interface IVirtualBufferManager<T extends Segment = Segment> {
|
|
|
23
28
|
prepareSeek(): Promise<void>;
|
|
24
29
|
seek(position: Milliseconds): Promise<void>;
|
|
25
30
|
maintain(currentPosition?: Milliseconds | undefined): Promise<void>;
|
|
26
|
-
switchTo(newRepresentationId: Representation["id"],
|
|
31
|
+
switchTo(newRepresentationId: Representation["id"], mode: SwithRepresentationMode): Promise<void | undefined>;
|
|
27
32
|
getForwardBufferRepresentations(currentPosition?: Milliseconds): Map<Representation["id"], T[]>;
|
|
28
33
|
getForwardPlaybackBufferDuration(currentPosition?: Milliseconds): Milliseconds;
|
|
29
34
|
getPlaybackBufferState(): IRange<Milliseconds> | null;
|
package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
|
5
5
|
import type { Byte, IError, IRange, ISubject, IValueSubject, Milliseconds, Seconds } from "@vkontakte/videoplayer-shared";
|
|
6
6
|
import { abortable, Subscription } from "@vkontakte/videoplayer-shared";
|
|
7
7
|
import type { NativeBufferManager } from "../nativeBufferManager";
|
|
8
|
-
import type
|
|
8
|
+
import { SwithRepresentationMode, type Dependencies, type IBufferPlaybackQueueItem, type ISomeDataLoadedCallbackParams, type IVirtualBufferManager } from "../types";
|
|
9
9
|
export declare abstract class BaseVirtualBufferManager<T extends Segment> implements IVirtualBufferManager<T> {
|
|
10
10
|
error$: ISubject<IError>;
|
|
11
11
|
playingRepresentation$: IValueSubject<Representation["id"] | undefined>;
|
|
@@ -57,11 +57,11 @@ export declare abstract class BaseVirtualBufferManager<T extends Segment> implem
|
|
|
57
57
|
protected abstract onSomeDataLoaded(data: ISomeDataLoadedCallbackParams<T>): Promise<void>;
|
|
58
58
|
protected abstract updateRepresentationBaseUrl(representation: Representation, newBaseUrl: string): void;
|
|
59
59
|
startWith: ReturnType<typeof abortable<[Representation["id"]]>>;
|
|
60
|
-
switchTo(newRepresentationId: Representation["id"],
|
|
61
|
-
protected getSwitchWithAbort(): ReturnType<typeof abortable<[Representation["id"],
|
|
60
|
+
switchTo(newRepresentationId: Representation["id"], mode?: SwithRepresentationMode): Promise<void>;
|
|
61
|
+
protected getSwitchWithAbort(): ReturnType<typeof abortable<[Representation["id"], SwithRepresentationMode], void>>;
|
|
62
62
|
switchToOld: ReturnType<typeof abortable<[Representation["id"], boolean | undefined], void>>;
|
|
63
63
|
prepareSeek(): Promise<void>;
|
|
64
|
-
seek(position: Milliseconds): Promise<void>;
|
|
64
|
+
seek(position: Milliseconds | undefined): Promise<void>;
|
|
65
65
|
maintain(currentPosition?: Milliseconds | undefined): Promise<void>;
|
|
66
66
|
getForwardBufferRepresentations(currentPosition?: Milliseconds | undefined): Map<Representation["id"], T[]>;
|
|
67
67
|
getForwardPlaybackBufferDuration(currentPosition?: Milliseconds | undefined): Milliseconds;
|
|
@@ -8,7 +8,7 @@ import type { ITuningConfig } from "../../../../utils/tuningConfig";
|
|
|
8
8
|
import type { IError, IRange, ISubject, ISubscription, ITracer, IValueSubject, Milliseconds, Nullable, Seconds } from "@vkontakte/videoplayer-shared";
|
|
9
9
|
import { abortable, Subject, Subscription, SubscriptionRemovable } from "@vkontakte/videoplayer-shared";
|
|
10
10
|
import { Fetcher } from "../fetcher";
|
|
11
|
-
import type { Dependencies, IVirtualBufferManager } from "../buffer/types";
|
|
11
|
+
import type { Dependencies, IVirtualBufferManager, SwithRepresentationMode } from "../buffer/types";
|
|
12
12
|
import type { Params } from "./types";
|
|
13
13
|
import { State } from "./types";
|
|
14
14
|
import { NativeBufferManager } from "../buffer/nativeBufferManager";
|
|
@@ -20,6 +20,7 @@ export declare abstract class BasePlayer {
|
|
|
20
20
|
protected tuning: ITuningConfig;
|
|
21
21
|
protected tracer: ITracer;
|
|
22
22
|
protected forceVideoCodec?: VideoCodec;
|
|
23
|
+
protected stallTimeInWaitingExitAttemptMade: Milliseconds;
|
|
23
24
|
protected videoBufferManager: IVirtualBufferManager | null;
|
|
24
25
|
protected audioBufferManager: IVirtualBufferManager | null;
|
|
25
26
|
protected bufferManagers: IVirtualBufferManager[];
|
|
@@ -76,7 +77,7 @@ export declare abstract class BasePlayer {
|
|
|
76
77
|
initRepresentations: ReturnType<typeof abortable<[Representation["id"], Representation["id"] | undefined, IHLSSource | undefined]>>;
|
|
77
78
|
initManifest(element: HTMLVideoElement, manifestBaseUrlString: string, offset: number): Promise<void>;
|
|
78
79
|
initBuffer(): void;
|
|
79
|
-
switchRepresentation(kind: StreamKind, id: Representation["id"],
|
|
80
|
+
switchRepresentation(kind: StreamKind, id: Representation["id"], mode: SwithRepresentationMode): Promise<void>;
|
|
80
81
|
seek(requestedPosition: Milliseconds, forcePrecise?: boolean): Promise<void>;
|
|
81
82
|
warmUpMediaSourceIfNeeded(position?: Milliseconds | undefined): void;
|
|
82
83
|
getForwardBufferRepresentations(kind: Exclude<StreamKind, StreamKind.TEXT>): Map<Representation["id"], Segment[]> | undefined;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAbrController, IAbrRule, IBaseAbrControllerContext } from "./types";
|
|
1
|
+
import type { IAbrController, IAbrRule, IBaseAbrControllerContext, IInitAbrManagerContext } from "./types";
|
|
2
2
|
import type { IBaseTrack } from "../../../player/types";
|
|
3
3
|
export default class AbrController<
|
|
4
4
|
T extends IBaseTrack,
|
|
@@ -7,7 +7,7 @@ export default class AbrController<
|
|
|
7
7
|
private history;
|
|
8
8
|
private rules;
|
|
9
9
|
private context;
|
|
10
|
-
init(rules: IAbrRule<T, C>[]): void;
|
|
10
|
+
init(rules: IAbrRule<T, C>[], initContext: IInitAbrManagerContext): void;
|
|
11
11
|
destroy(): void;
|
|
12
12
|
updateContext(context: C): void;
|
|
13
13
|
autoSelectTrack(): T;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IAudioAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IAudioTrack, IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
4
|
-
import type { Kbps } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import type { Kbps, Nullable } from "@vkontakte/videoplayer-shared";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
|
-
type AudioThroughputLogsArgs = [forwardBufferHealth: number
|
|
6
|
+
type AudioThroughputLogsArgs = [forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, tuning: ITuningConfig];
|
|
7
7
|
export declare class AudioThroughputRule extends LimitAboveRule<IAudioTrack, IAudioAbrContext, AudioThroughputLogsArgs> implements IAbrRule<IAudioTrack, IAudioAbrContext> {
|
|
8
8
|
constructor(confidence: RuleConfidence);
|
|
9
9
|
execute(context: IAudioAbrContext): IAbrRuleResolution<IAudioTrack>;
|
|
@@ -2,10 +2,11 @@ import type { IAbrRule, IAbrRuleResolution, IAudioAbrContext, RuleConfidence } f
|
|
|
2
2
|
import type { IAudioTrack, IVideoTrack } from "../../../../../player/types";
|
|
3
3
|
import { LimitBelowRule } from "../limitBelowRule";
|
|
4
4
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
5
|
-
type
|
|
5
|
+
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
6
|
+
type MinAudioForVideoLogsArgs = [lastVideoTrackSelected: Nullable<IVideoTrack>, tuning: ITuningConfig];
|
|
6
7
|
export declare class MinAudioForVideoRule extends LimitBelowRule<IAudioTrack, IAudioAbrContext, MinAudioForVideoLogsArgs> implements IAbrRule<IAudioTrack, IAudioAbrContext> {
|
|
7
8
|
constructor(confidence: RuleConfidence);
|
|
8
9
|
execute(context: IAudioAbrContext): IAbrRuleResolution<IAudioTrack>;
|
|
9
|
-
protected createLogMessage(selectedTrack: IVideoTrack, lastVideoTrackSelected: IVideoTrack
|
|
10
|
+
protected createLogMessage(selectedTrack: IVideoTrack, lastVideoTrackSelected: Nullable<IVideoTrack>, tuning: ITuningConfig): string;
|
|
10
11
|
}
|
|
11
12
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AudioRuleName } from "../types";
|
|
2
|
+
import type { IAbrRule, IAudioAbrContext } from "../types";
|
|
3
|
+
import { RuleConfidence } from "../types";
|
|
4
|
+
import type { IAudioTrack } from "../../../../player/types";
|
|
5
|
+
export declare class AudioRuleFactory {
|
|
6
|
+
static createRule(ruleName: AudioRuleName, confidence?: RuleConfidence): IAbrRule<IAudioTrack, IAudioAbrContext>;
|
|
7
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAbrRule, IAbrRuleResolution, IBaseAbrControllerContext, RuleConfidence, RuleType } from "../types";
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IBaseAbrControllerContext, IInitAbrManagerContext, RuleConfidence, RuleType } from "../types";
|
|
2
2
|
import type { IBaseTrack } from "../../../../player/types";
|
|
3
3
|
import { Subscription } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
export declare abstract class BaseRule<
|
|
@@ -11,7 +11,7 @@ export declare abstract class BaseRule<
|
|
|
11
11
|
protected type: RuleType;
|
|
12
12
|
protected name: string;
|
|
13
13
|
constructor(confidence: RuleConfidence);
|
|
14
|
-
init(): void;
|
|
14
|
+
init(_initContext: IInitAbrManagerContext): void;
|
|
15
15
|
destroy(): void;
|
|
16
16
|
abstract execute(context: C): IAbrRuleResolution<T>;
|
|
17
17
|
protected createResolution(selectedTrack: T, ...params: LogsArgs): IAbrRuleResolution<T>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
3
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
4
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
5
|
-
type BufferRuleLogsArgs = [currentVideoTrack: IVideoTrack
|
|
6
|
+
type BufferRuleLogsArgs = [currentVideoTrack: Nullable<IVideoTrack>, lastVideoTrackSelected: Nullable<IVideoTrack>, forwardBufferHealth: Nullable<number>, abrTuning: ITuningConfig["autoTrackSelection"]];
|
|
6
7
|
export declare class BufferRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, BufferRuleLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
7
8
|
constructor(confidence: RuleConfidence);
|
|
8
9
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
9
|
-
protected createLogMessage(selectedTrack: IVideoTrack, currentVideoTrack: IVideoTrack
|
|
10
|
+
protected createLogMessage(selectedTrack: IVideoTrack, currentVideoTrack: Nullable<IVideoTrack>, lastVideoTrackSelected: Nullable<IVideoTrack>, forwardBufferHealth: Nullable<number>, abrTuning: ITuningConfig["autoTrackSelection"]): string;
|
|
10
11
|
}
|
|
11
12
|
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IInitAbrManagerContext, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
|
+
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
|
+
type FailedVideoTracLogsArgs = [banTrack: Nullable<IVideoTrack>];
|
|
6
|
+
export declare class FailedVideoTrackRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, FailedVideoTracLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
7
|
+
protected banTrack: Nullable<IVideoTrack>;
|
|
8
|
+
constructor(confidence: RuleConfidence);
|
|
9
|
+
init(initContext: IInitAbrManagerContext): void;
|
|
10
|
+
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
11
|
+
protected createLogMessage(selectedTrack: IVideoTrack, banTrack: Nullable<IVideoTrack>): string;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
-
import type { IRectangle } from "@vkontakte/videoplayer-shared";
|
|
3
|
+
import type { IRectangle, Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
6
|
type IContainerSizeLimit = IRectangle;
|
|
7
|
-
type FitsContainerLogsArgs = [containerSizeLimit: IContainerSizeLimit
|
|
7
|
+
type FitsContainerLogsArgs = [containerSizeLimit: Nullable<IContainerSizeLimit>, containerSizeFactor: number, abrTuning: ITuningConfig["autoTrackSelection"]];
|
|
8
8
|
export declare class FitsContainerRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, FitsContainerLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
9
9
|
constructor(confidence: RuleConfidence);
|
|
10
10
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
11
|
-
protected createLogMessage(selectedTrack: IVideoTrack, containerSizeLimit: IContainerSizeLimit
|
|
11
|
+
protected createLogMessage(selectedTrack: IVideoTrack, containerSizeLimit: Nullable<IContainerSizeLimit>, containerSizeFactor: number, abrTuning: ITuningConfig["autoTrackSelection"]): string;
|
|
12
12
|
private getContainerSizeLimit;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
-
import type { QualityLimits } from "@vkontakte/videoplayer-shared";
|
|
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
|
-
type LowerLimitLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: ExactVideoQuality
|
|
6
|
+
type LowerLimitLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, limits: QualityLimits];
|
|
7
7
|
export declare class LowerLimitRule extends LimitBelowRule<IVideoTrack, IVideoAbrContext, LowerLimitLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
8
|
constructor(confidence: RuleConfidence);
|
|
9
9
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
|
-
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: ExactVideoQuality
|
|
10
|
+
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, limits: QualityLimits): string;
|
|
11
11
|
}
|
|
12
12
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
-
import type { Kbps } from "@vkontakte/videoplayer-shared";
|
|
3
|
+
import type { Kbps, Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
|
-
type StallLogsArgs = [forwardBufferHealth: number
|
|
6
|
+
type StallLogsArgs = [forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, tuning: ITuningConfig];
|
|
7
7
|
export declare class StallsRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, StallLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
8
|
private severeStallOccurred;
|
|
9
9
|
private qualityRestrictionTimer;
|
|
@@ -12,7 +12,7 @@ export declare class StallsRule extends LimitAboveRule<IVideoTrack, IVideoAbrCon
|
|
|
12
12
|
private predictedThroughputWithoutData;
|
|
13
13
|
constructor(confidence: RuleConfidence);
|
|
14
14
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
15
|
-
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: number
|
|
15
|
+
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, tuning: ITuningConfig): string;
|
|
16
16
|
private updateStallQualityLimits;
|
|
17
17
|
}
|
|
18
18
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
-
import type { Kbps } from "@vkontakte/videoplayer-shared";
|
|
3
|
+
import type { Kbps, Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
5
|
import type { ITuningConfig } from "../../../../../utils/tuningConfig";
|
|
6
|
-
type ThroughputLogsArgs = [forwardBufferHealth: number
|
|
6
|
+
type ThroughputLogsArgs = [forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, tuning: ITuningConfig];
|
|
7
7
|
export declare class ThroughputRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, ThroughputLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
8
|
constructor(confidence: RuleConfidence);
|
|
9
9
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
|
-
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: number
|
|
10
|
+
protected createLogMessage(selectedTrack: IVideoTrack, forwardBufferHealth: Nullable<number>, playbackRate: number, reserve: Kbps, playbackRateFactor: number, bitrateFactor: number, estimatedThroughput: Kbps, tuning: ITuningConfig): string;
|
|
11
11
|
}
|
|
12
12
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext, RuleConfidence } from "../../types";
|
|
2
2
|
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
-
import type { QualityLimits, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
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
|
-
type UpperLimitsLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: ExactVideoQuality
|
|
6
|
+
type UpperLimitsLogsArgs = [limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, visible: boolean, limits: QualityLimits, backgroundVideoQualityLimit: VideoQuality];
|
|
7
7
|
export declare class UpperLimitsRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, UpperLimitsLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
8
|
constructor(confidence: RuleConfidence);
|
|
9
9
|
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
|
-
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: ExactVideoQuality
|
|
10
|
+
protected createLogMessage(selectedTrack: IVideoTrack, limitsAreInvalid: boolean, lowestAvailableQuality: Nullable<ExactVideoQuality>, highestAvailableQuality: Nullable<ExactVideoQuality>, visible: boolean, limits: QualityLimits, backgroundVideoQualityLimit: VideoQuality): string;
|
|
11
11
|
}
|
|
12
12
|
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IVideoTrack } from "../../../../player/types";
|
|
2
|
+
import type { IAbrRule, IVideoAbrContext } from "../types";
|
|
3
|
+
import { RuleConfidence, VideoRuleName } from "../types";
|
|
4
|
+
export declare class VideoRuleFactory {
|
|
5
|
+
static createRule(ruleName: VideoRuleName, confidence?: RuleConfidence): IAbrRule<IVideoTrack, IVideoAbrContext>;
|
|
6
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../../../player/types";
|
|
2
|
-
import type { IComponentLogger, IObservable, IRectangle, IValueSubject, Kbps, Milliseconds, QualityLimits } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { 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";
|
|
@@ -12,6 +12,7 @@ export declare enum RuleConfidence {
|
|
|
12
12
|
export declare enum VideoRuleName {
|
|
13
13
|
Buffer = "buffer_rule",
|
|
14
14
|
FitsContainer = "fits_container_rule",
|
|
15
|
+
FailedVideoTrack = "failed_video_track_rule",
|
|
15
16
|
Stalls = "stalls_rule",
|
|
16
17
|
LowerLimit = "lower_limit_rule",
|
|
17
18
|
UpperLimit = "upper_limit_rule",
|
|
@@ -29,12 +30,12 @@ export interface IUpdatableAbrManagerContext {
|
|
|
29
30
|
isAuto: boolean;
|
|
30
31
|
videoTracks: IVideoTrack[];
|
|
31
32
|
audioTracks: IAudioTrack[];
|
|
32
|
-
currentVideoTrack: IVideoTrack
|
|
33
|
-
desiredVideoTrack: IVideoTrack
|
|
33
|
+
currentVideoTrack: Nullable<IVideoTrack>;
|
|
34
|
+
desiredVideoTrack: Nullable<IVideoTrack>;
|
|
34
35
|
limits: QualityLimits;
|
|
35
36
|
forwardBufferHealth?: number;
|
|
36
|
-
forwardVideoBufferRepresentations: Map<Representation["id"], Segment[]
|
|
37
|
-
forwardAudioBufferRepresentations: Map<Representation["id"], Segment[]
|
|
37
|
+
forwardVideoBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
38
|
+
forwardAudioBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
38
39
|
}
|
|
39
40
|
export interface IInitAbrManagerContext {
|
|
40
41
|
tuning: ITuningConfig;
|
|
@@ -44,6 +45,7 @@ export interface IInitAbrManagerContext {
|
|
|
44
45
|
throughput$: IValueSubject<Kbps>;
|
|
45
46
|
rtt$: IValueSubject<Milliseconds>;
|
|
46
47
|
element: HTMLVideoElement;
|
|
48
|
+
failedVideoTrack: Nullable<IVideoTrack>;
|
|
47
49
|
abrLogger: IComponentLogger;
|
|
48
50
|
panelSize?: IRectangle;
|
|
49
51
|
}
|
|
@@ -72,30 +74,30 @@ export interface IAbrRule<
|
|
|
72
74
|
T extends IBaseTrack,
|
|
73
75
|
C extends IBaseAbrControllerContext
|
|
74
76
|
> {
|
|
75
|
-
init(): void;
|
|
77
|
+
init(initContext: IInitAbrManagerContext): void;
|
|
76
78
|
destroy(): void;
|
|
77
79
|
execute(context: C): IAbrRuleResolution<T>;
|
|
78
80
|
}
|
|
79
81
|
export interface IAbrController<T extends IBaseTrack> {
|
|
80
|
-
init(rules: IAbrRule<T, IBaseAbrControllerContext>[]): void;
|
|
82
|
+
init(rules: IAbrRule<T, IBaseAbrControllerContext>[], initContext: IInitAbrManagerContext): void;
|
|
81
83
|
destroy(): void;
|
|
82
84
|
updateContext(context: IBaseAbrControllerContext): void;
|
|
83
85
|
autoSelectTrack(): T;
|
|
84
86
|
}
|
|
85
87
|
export interface IBaseAbrControllerContext extends IVideoTracksContext {
|
|
86
|
-
currentVideoTrack: IVideoTrack
|
|
87
|
-
lastVideoTrackSelected: IVideoTrack
|
|
88
|
+
currentVideoTrack: Nullable<IVideoTrack>;
|
|
89
|
+
lastVideoTrackSelected: Nullable<IVideoTrack>;
|
|
88
90
|
tuning: ITuningConfig;
|
|
89
91
|
abrLogger: IComponentLogger;
|
|
90
92
|
estimatedThroughput: Kbps;
|
|
91
93
|
reserve: Kbps;
|
|
92
|
-
forwardBufferHealth: number
|
|
94
|
+
forwardBufferHealth: Nullable<number>;
|
|
93
95
|
playbackRate: number;
|
|
94
96
|
}
|
|
95
97
|
export interface IVideoAbrContext extends IBaseAbrControllerContext {
|
|
96
|
-
container: IRectangle
|
|
97
|
-
panelSize: IRectangle
|
|
98
|
-
forwardBufferRepresentations: Map<Representation["id"], Segment[]
|
|
98
|
+
container: Nullable<IRectangle>;
|
|
99
|
+
panelSize: Nullable<IRectangle>;
|
|
100
|
+
forwardBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
99
101
|
limits: QualityLimits;
|
|
100
102
|
visible: boolean;
|
|
101
103
|
severeStallOccurred: boolean;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
1
2
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../../../player/types";
|
|
2
3
|
export declare enum CompareTrack {
|
|
3
4
|
Descending = -1,
|
|
@@ -10,4 +11,4 @@ export declare const getTrackComparator: <T extends IBaseTrack>(compareTrack: Co
|
|
|
10
11
|
export declare const isLowerTrack: <T extends IBaseTrack>(track1: T, track2: T) => boolean;
|
|
11
12
|
export declare const logBase: (base: number, x: number) => number;
|
|
12
13
|
export declare const bitrateFactorFromBufferLevel: (forwardBufferHealth: number, emptyFactor: number, fullFactor: number) => number;
|
|
13
|
-
export declare const getMinPossibleAudioForVideo: (videoTrack: IVideoTrack
|
|
14
|
+
export declare const getMinPossibleAudioForVideo: (videoTrack: Nullable<IVideoTrack>, sortedVideoTracksAsc: IVideoTrack[], sortedAudioTracksAsc: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
|
|
@@ -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 {};
|
|
@@ -4,6 +4,7 @@ import { AndroidPreferredFormat } from "../enums/AndroidPreferredFormat";
|
|
|
4
4
|
import { IOSPreferredFormat } from "../enums/IOSPreferredFormat";
|
|
5
5
|
import type { Byte, Milliseconds, RecursivePartial, Seconds } from "@vkontakte/videoplayer-shared";
|
|
6
6
|
import { type ExactVideoQuality, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
7
|
+
import { AudioRuleName, VideoRuleName } from "../providers/utils/Abr/types";
|
|
7
8
|
export type ITuningConfig = {
|
|
8
9
|
/** @deprecated */
|
|
9
10
|
configName?: string[];
|
|
@@ -119,8 +120,10 @@ export type ITuningConfig = {
|
|
|
119
120
|
representationSwitchForwardBufferGap: Milliseconds;
|
|
120
121
|
crashOnStallTimeout: Milliseconds;
|
|
121
122
|
crashOnStallTWithoutDataTimeout: Milliseconds;
|
|
123
|
+
restoreBufferBeforeCrashTimeout: Milliseconds;
|
|
122
124
|
enableSubSegmentBufferFeeding: boolean;
|
|
123
125
|
bufferEmptinessTolerance: Milliseconds;
|
|
126
|
+
virtualBufferEmptinessTolerance: Milliseconds;
|
|
124
127
|
useNewRepresentationSwitch: boolean;
|
|
125
128
|
useDelayedRepresentationSwitch: boolean;
|
|
126
129
|
useSmartRepresentationSwitch: boolean;
|
|
@@ -147,9 +150,13 @@ export type ITuningConfig = {
|
|
|
147
150
|
minSafeBufferToPlay: Milliseconds;
|
|
148
151
|
useBufferHoldingOnlyOnStall: boolean;
|
|
149
152
|
useAbortResetNativeBufferMutex: boolean;
|
|
150
|
-
useNewStallExitPolicy: boolean;
|
|
151
153
|
useNewAbr: boolean;
|
|
154
|
+
abrVideoRules: VideoRuleName[];
|
|
155
|
+
abrAudioRules: AudioRuleName[];
|
|
152
156
|
useDynamicBirtateRule: boolean;
|
|
157
|
+
useNewFailoverLogic: boolean;
|
|
158
|
+
useFailoverHostsOnAllProviderCrash: boolean;
|
|
159
|
+
videoTrackBanAfterProviderFail: Milliseconds;
|
|
153
160
|
videoStreamRepresentaionsFilter: [VideoQuality, number, VideoCodec][];
|
|
154
161
|
};
|
|
155
162
|
dashCmafLive: {
|