@vkontakte/videoplayer-core 2.0.163-dev.c64982d44.0 → 2.0.163-dev.d32e7fcf7.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 +35 -26
- package/es2015.esm.js +40 -31
- package/esnext.cjs +35 -26
- package/esnext.esm.js +35 -26
- package/evergreen.esm.js +35 -26
- package/package.json +2 -2
- package/types/providers/DashProvider/baseDashProvider.d.ts +4 -0
- package/types/providers/DashProvider/lib/player.d.ts +2 -1
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +4 -0
- package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +2 -1
- package/types/providers/utils/Abr/rules/video/downloadTimeRule.d.ts +15 -0
- package/types/providers/utils/Abr/rules/video/tvDisabledVideoTrackRule.d.ts +9 -0
- package/types/providers/utils/Abr/types.d.ts +5 -1
- package/types/providers/utils/Abr/utils.d.ts +3 -1
- package/types/providers/utils/canPlay.d.ts +3 -0
- package/types/utils/buffer/dynamicBufferTarget.d.ts +10 -0
- package/types/utils/tuningConfig.d.ts +17 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.163-dev.
|
|
3
|
+
"version": "2.0.163-dev.d32e7fcf7.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.92-dev.
|
|
45
|
+
"@vkontakte/videoplayer-shared": "1.0.92-dev.d32e7fcf7.0"
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -57,6 +57,10 @@ export default abstract class BaseDashProvider implements IProvider {
|
|
|
57
57
|
protected abstract seek(position: Milliseconds, forcePrecise: boolean): void;
|
|
58
58
|
protected getProviderSubscriptionInfo(): IProviderSubscriptionInfo;
|
|
59
59
|
protected subscribe(): void;
|
|
60
|
+
private syncBufferTarget;
|
|
61
|
+
private resolveAudioBufferTargetMs;
|
|
62
|
+
private resolveBufferTargetMs;
|
|
63
|
+
private getCurrentVideoBitrateKbps;
|
|
60
64
|
protected selectVideoAudioRepresentations(): [Representation, Representation | undefined] | undefined;
|
|
61
65
|
protected prepare(manifestOffset?: number): void;
|
|
62
66
|
protected syncPlayback: () => void;
|
|
@@ -106,7 +106,8 @@ export declare class Player {
|
|
|
106
106
|
getForwardBufferRepresentations(kind: Exclude<StreamKind, StreamKind.TEXT>): Map<Representation["id"], Segment[]> | undefined;
|
|
107
107
|
getActiveVideoSegmentProgress(): VideoSegmentLoadProgress | undefined;
|
|
108
108
|
getMpdVideoSegmentDuration(): Milliseconds | undefined;
|
|
109
|
-
setBufferTarget(
|
|
109
|
+
setBufferTarget(videoTarget: Milliseconds, audioTarget: Milliseconds): void;
|
|
110
|
+
getVideoForwardBufferDuration(): Milliseconds;
|
|
110
111
|
getStreams(): Manifest["streams"] | undefined;
|
|
111
112
|
getCodecs(): Manifest["codecs"] | undefined;
|
|
112
113
|
setPreloadOnly(preloadOnly: boolean): void;
|
|
@@ -57,6 +57,10 @@ export default abstract class BaseDashProvider implements IProvider {
|
|
|
57
57
|
protected abstract getPlayer(): BasePlayer;
|
|
58
58
|
protected getProviderSubscriptionInfo(): IProviderSubscriptionInfo;
|
|
59
59
|
protected subscribe(): void;
|
|
60
|
+
private syncBufferTarget;
|
|
61
|
+
private resolveAudioBufferTargetMs;
|
|
62
|
+
private resolveBufferTargetMs;
|
|
63
|
+
private getCurrentVideoBitrateKbps;
|
|
60
64
|
protected selectVideoAudioRepresentations(): [Representation, Representation | undefined] | undefined;
|
|
61
65
|
protected prepare(manifestOffset?: number): void;
|
|
62
66
|
protected syncPlayback: () => void;
|
|
@@ -91,7 +91,8 @@ export declare abstract class BasePlayer {
|
|
|
91
91
|
get isStreamEnded(): boolean;
|
|
92
92
|
getStreams(): Manifest["streams"] | undefined;
|
|
93
93
|
getCodecs(): Manifest["codecs"] | undefined;
|
|
94
|
-
setBufferTarget(
|
|
94
|
+
setBufferTarget(videoTarget: Milliseconds, audioTarget: Milliseconds): void;
|
|
95
|
+
getVideoForwardBufferDuration(): Milliseconds;
|
|
95
96
|
setPreloadOnly(preloadOnly: boolean): void;
|
|
96
97
|
stop(): void;
|
|
97
98
|
destroy(): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
|
+
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import type { Kbps, Milliseconds } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
|
+
type DownloadTimeLogsArgs = [estimatedThroughput: Kbps, forwardBufferDuration: Milliseconds, simulatedFinalBufferMs: Milliseconds | null];
|
|
7
|
+
export declare class DownloadTimeRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, DownloadTimeLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
9
|
+
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
10
|
+
private buildReferenceTimeline;
|
|
11
|
+
private resolveLookaheadCount;
|
|
12
|
+
private simulate;
|
|
13
|
+
protected createLogMessage(selectedTrack: IVideoTrack, estimatedThroughput: Kbps, forwardBufferDuration: Milliseconds, simulatedFinalBufferMs: Milliseconds | null): string;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IVideoAbrContext } from "../../types";
|
|
2
|
+
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import { LimitAboveRule } from "../limitAboveRule";
|
|
4
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
5
|
+
export declare class TvDisabledVideoTrackRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
6
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
7
|
+
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
8
|
+
protected createLogMessage(selectedTrack: IVideoTrack): string;
|
|
9
|
+
}
|
|
@@ -16,12 +16,14 @@ export declare enum VideoRuleName {
|
|
|
16
16
|
Bola = "bola_rule",
|
|
17
17
|
FitsContainer = "fits_container_rule",
|
|
18
18
|
FailedVideoTrack = "failed_video_track_rule",
|
|
19
|
+
TvDisabledVideoTrack = "tv_disabled_video_track_rule",
|
|
19
20
|
Stalls = "stalls_rule",
|
|
20
21
|
LowerLimit = "lower_limit_rule",
|
|
21
22
|
UpperLimit = "upper_limit_rule",
|
|
22
23
|
Throughput = "throughput_rule",
|
|
23
24
|
AbandonRequest = "abandon_request_rule",
|
|
24
|
-
InsufficientBuffer = "insufficient_buffer_rule"
|
|
25
|
+
InsufficientBuffer = "insufficient_buffer_rule",
|
|
26
|
+
DownloadTime = "download_time_rule"
|
|
25
27
|
}
|
|
26
28
|
export declare enum AudioRuleName {
|
|
27
29
|
MinAudioForVideo = "min_audio_for_video_rule",
|
|
@@ -39,6 +41,7 @@ export interface IUpdatableAbrManagerContext {
|
|
|
39
41
|
desiredVideoTrack: Nullable<IVideoTrack>;
|
|
40
42
|
limits: QualityLimits;
|
|
41
43
|
forwardBufferHealth?: number;
|
|
44
|
+
forwardBufferTarget: Milliseconds;
|
|
42
45
|
forwardVideoBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
43
46
|
forwardAudioBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
44
47
|
forwardBufferDuration?: Milliseconds;
|
|
@@ -119,6 +122,7 @@ export interface IVideoAbrContext extends IBaseAbrControllerContext {
|
|
|
119
122
|
container: Nullable<IRectangle>;
|
|
120
123
|
panelSize: Nullable<IRectangle>;
|
|
121
124
|
forwardBufferRepresentations: Nullable<Map<Representation["id"], Segment[]>>;
|
|
125
|
+
forwardBufferTarget: Milliseconds;
|
|
122
126
|
limits: QualityLimits;
|
|
123
127
|
visible: boolean;
|
|
124
128
|
severeStallOccurred: boolean;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import type { Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
1
|
+
import type { Kbps, Milliseconds, Nullable } from "@vkontakte/videoplayer-shared";
|
|
2
2
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../../../player/types";
|
|
3
|
+
import type { Segment } from "../parsers/types";
|
|
4
|
+
export declare const computeForwardBitrate: (segments: Nullable<Segment[]>) => Kbps;
|
|
3
5
|
export declare const bufferToPlaybackMs: (contentMs: Milliseconds | undefined, playbackRate: number) => Milliseconds;
|
|
4
6
|
export declare enum CompareTrack {
|
|
5
7
|
Descending = -1,
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ITuningConfig } from "../../utils/tuningConfig";
|
|
2
|
+
import type { Stream } from "./parsers/types";
|
|
3
|
+
export declare const filterStreams: (streams: Stream[], videoElement: HTMLVideoElement, canPlayTypeRestriction: ITuningConfig["dash"]["checkRepresentationCanPlayType"]) => Stream[];
|
|
@@ -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 {};
|
|
@@ -132,6 +132,8 @@ export type ITuningConfig = {
|
|
|
132
132
|
forwardBufferTargetAuto: Milliseconds;
|
|
133
133
|
forwardBufferTargetManual: Milliseconds;
|
|
134
134
|
forwardBufferTargetPreload: Milliseconds;
|
|
135
|
+
audioBufferAheadOfVideoMs: Milliseconds;
|
|
136
|
+
useDynamicBufferTarget: boolean;
|
|
135
137
|
seekBiasInTheEnd: Milliseconds;
|
|
136
138
|
maxSegmentDurationLeftToSelectNextSegment: Milliseconds;
|
|
137
139
|
minSafeBufferThreshold: number;
|
|
@@ -209,9 +211,24 @@ export type ITuningConfig = {
|
|
|
209
211
|
budgetFactor: number;
|
|
210
212
|
fallbackSegmentDurationMs: Milliseconds;
|
|
211
213
|
};
|
|
214
|
+
dynamicBufferTarget: {
|
|
215
|
+
maxMs: Milliseconds;
|
|
216
|
+
optimisticHeadroomLow: number;
|
|
217
|
+
optimisticHeadroomHigh: number;
|
|
218
|
+
weakThroughputLowKbps: Kbps;
|
|
219
|
+
weakThroughputHighKbps: Kbps;
|
|
220
|
+
maxFactor: number;
|
|
221
|
+
};
|
|
212
222
|
videoStreamRepresentaionsFilter: [VideoQuality, number, VideoCodecName][];
|
|
213
223
|
filterOnDemandQualityList: boolean;
|
|
214
224
|
dashMaxTvVideoQuality: boolean;
|
|
225
|
+
checkRepresentationCanPlayType: Extract<CanPlayTypeResult, "maybe" | "probably"> | false;
|
|
226
|
+
downloadTime: {
|
|
227
|
+
minLookaheadSegments: number;
|
|
228
|
+
safetyFactor: number;
|
|
229
|
+
bootstrapBufferMs: Milliseconds;
|
|
230
|
+
demandTolerance: number;
|
|
231
|
+
};
|
|
215
232
|
};
|
|
216
233
|
dashCmafLive: {
|
|
217
234
|
externalStopControl: boolean;
|