@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/videoplayer-core",
3
- "version": "2.0.163-dev.c64982d44.0",
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.c64982d44.0"
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(time: Milliseconds): void;
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(time: Milliseconds): void;
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;