@vkontakte/videoplayer-core 2.0.131-dev.20b944d3.0 → 2.0.131-dev.45e99145.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.
Files changed (83) hide show
  1. package/es2015.cjs.js +17 -66
  2. package/es2015.esm.js +17 -66
  3. package/es2018.cjs.js +17 -66
  4. package/es2018.esm.js +17 -66
  5. package/es2024.cjs.js +17 -66
  6. package/es2024.esm.js +17 -66
  7. package/esnext.cjs.js +17 -66
  8. package/esnext.esm.js +17 -66
  9. package/evergreen.esm.js +15 -64
  10. package/package.json +2 -2
  11. package/types/player/Player.d.ts +2 -9
  12. package/types/player/types.d.ts +0 -5
  13. package/types/providers/ChromecastProvider/ChromecastInitializer/index.d.ts +1 -5
  14. package/types/providers/ChromecastProvider/index.d.ts +0 -2
  15. package/types/providers/DashLiveProvider/DashLiveProvider.d.ts +0 -1
  16. package/types/providers/DashLiveProvider/utils/FilesFetcher.d.ts +1 -2
  17. package/types/providers/DashLiveProvider/utils/LiveDashPlayer.d.ts +0 -1
  18. package/types/providers/DashLiveProvider/utils/ThroughputEstimator.d.ts +0 -4
  19. package/types/providers/DashProvider/baseDashProvider.d.ts +2 -2
  20. package/types/providers/DashProvider/lib/buffer.d.ts +3 -0
  21. package/types/providers/DashProvider/lib/fetcher.d.ts +4 -5
  22. package/types/providers/DashProvider/lib/player.d.ts +2 -4
  23. package/types/providers/DashProvider/lib/sourceBufferBufferedDiff.d.ts +19 -0
  24. package/types/providers/DashProvider/lib/utils.d.ts +11 -0
  25. package/types/providers/DashProviderNew/baseDashProvider.d.ts +57 -0
  26. package/types/providers/DashProviderNew/consts.d.ts +3 -0
  27. package/types/providers/DashProviderNew/index.d.ts +2 -0
  28. package/types/providers/DashProviderNew/lib/ElementSizeManager.d.ts +19 -0
  29. package/types/providers/DashProviderNew/lib/LiveTextManager.d.ts +23 -0
  30. package/types/providers/DashProviderNew/lib/buffer.d.ts +117 -0
  31. package/types/providers/DashProviderNew/lib/fetcher.d.ts +59 -0
  32. package/types/providers/DashProviderNew/lib/parsers/ietf/index.d.ts +13 -0
  33. package/types/providers/DashProviderNew/lib/parsers/index.d.ts +3 -0
  34. package/types/providers/DashProviderNew/lib/parsers/mpd.d.ts +3 -0
  35. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxModel.d.ts +20 -0
  36. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxParser.d.ts +21 -0
  37. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxTypeEnum.d.ts +30 -0
  38. package/types/providers/DashProviderNew/lib/parsers/mpeg/box.d.ts +74 -0
  39. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/avc1.d.ts +8 -0
  40. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/equi.d.ts +21 -0
  41. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/ftyp.d.ts +17 -0
  42. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/index.d.ts +26 -0
  43. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdat.d.ts +15 -0
  44. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdia.d.ts +8 -0
  45. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mfhd.d.ts +11 -0
  46. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/minf.d.ts +8 -0
  47. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moof.d.ts +8 -0
  48. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moov.d.ts +8 -0
  49. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mvhd.d.ts +35 -0
  50. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/prhd.d.ts +16 -0
  51. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/proj.d.ts +8 -0
  52. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sidx.d.ts +48 -0
  53. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/st3d.d.ts +23 -0
  54. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stbl.d.ts +8 -0
  55. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stsd.d.ts +11 -0
  56. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sv3d.d.ts +8 -0
  57. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfdt.d.ts +17 -0
  58. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfhd.d.ts +22 -0
  59. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tkhd.d.ts +42 -0
  60. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/traf.d.ts +8 -0
  61. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trak.d.ts +8 -0
  62. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trun.d.ts +31 -0
  63. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/unknown.d.ts +6 -0
  64. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/uuid.d.ts +11 -0
  65. package/types/providers/DashProviderNew/lib/parsers/mpeg/fullBox.d.ts +15 -0
  66. package/types/providers/DashProviderNew/lib/parsers/mpeg/isobmff.d.ts +12 -0
  67. package/types/providers/DashProviderNew/lib/parsers/webm/ebml.d.ts +76 -0
  68. package/types/providers/DashProviderNew/lib/parsers/webm/webm.d.ts +3 -0
  69. package/types/providers/DashProviderNew/lib/player.d.ts +92 -0
  70. package/types/providers/DashProviderNew/lib/sourceBufferTaskQueue.d.ts +19 -0
  71. package/types/providers/DashProviderNew/lib/types.d.ts +186 -0
  72. package/types/providers/DashProviderNew/lib/utils.d.ts +21 -0
  73. package/types/providers/DashProviderNew/newDashCmafLiveProvider.d.ts +8 -0
  74. package/types/providers/DashProviderNew/newDashProvider.d.ts +6 -0
  75. package/types/providers/ProviderContainer/index.d.ts +0 -2
  76. package/types/providers/WebRTCLiveProvider/WebRTCLiveProvider.d.ts +0 -1
  77. package/types/providers/types.d.ts +1 -4
  78. package/types/providers/utils/HTMLVideoElement/DroppedFramesManager.d.ts +1 -3
  79. package/types/providers/utils/StallsManager.d.ts +18 -4
  80. package/types/utils/autoSelectTrack.d.ts +7 -5
  81. package/types/utils/qualityLimits.d.ts +3 -18
  82. package/types/utils/smoothedValue/baseSmoothedValue.d.ts +0 -3
  83. package/types/utils/tuningConfig.d.ts +28 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/videoplayer-core",
3
- "version": "2.0.131-dev.20b944d3.0",
3
+ "version": "2.0.131-dev.45e99145.0",
4
4
  "author": "vk.com",
5
5
  "description": "Videoplayer core library based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
@@ -54,7 +54,7 @@
54
54
  "**/*.d.ts"
55
55
  ],
56
56
  "dependencies": {
57
- "@vkontakte/videoplayer-shared": "1.0.59-dev.5cf7a4be.0",
57
+ "@vkontakte/videoplayer-shared": "1.0.59-dev.3ed4b6b9.0",
58
58
  "hls.js": "~1.4.7"
59
59
  }
60
60
  }
@@ -1,14 +1,11 @@
1
1
  import { IOptionalTuningConfig } from '../utils/tuningConfig';
2
- import { IError, ILogEntry, Seconds, Subject, ValueSubject, QualityLimits, VideoQuality, ITracer } from '@vkontakte/videoplayer-shared';
2
+ import { IError, ILogEntry, Seconds, Subject, ValueSubject, QualityLimits, VideoQuality } from '@vkontakte/videoplayer-shared';
3
3
  import { ChromecastState, HttpConnectionType, IAudioStream, IConfig, ICueSettings, IExternalTextTrack, IPlayer, ISeekRequest, ISources, ITextTrack, IVideoStream, PlaybackRate, PlaybackState, PredefinedQualityLimits, StartEnd, Surface, VideoFormat } from './types';
4
4
  export default class Player implements IPlayer {
5
5
  private subscription;
6
6
  private domContainer;
7
7
  private providerContainer?;
8
8
  private chromecastInitializer;
9
- private logger;
10
- private tracer;
11
- private abrLogger;
12
9
  private config;
13
10
  private tuning;
14
11
  private throughputEstimator;
@@ -110,10 +107,9 @@ export default class Player implements IPlayer {
110
107
  element$: ValueSubject<HTMLVideoElement | undefined>;
111
108
  tuningConfigName$: ValueSubject<string[]>;
112
109
  enableDebugTelemetry$: ValueSubject<boolean>;
113
- dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
114
110
  getCurrentTime$: ValueSubject<null>;
115
111
  };
116
- constructor(tuning?: IOptionalTuningConfig, tracer?: ITracer);
112
+ constructor(tuning?: IOptionalTuningConfig);
117
113
  initVideo(config: IConfig): IPlayer;
118
114
  destroy(): void;
119
115
  prepare(): IPlayer;
@@ -180,7 +176,6 @@ export default class Player implements IPlayer {
180
176
  */
181
177
  releaseCamera(): this;
182
178
  getExactTime(): Seconds;
183
- getAllLogs(): ILogEntry[];
184
179
  private getScene3D;
185
180
  private setIntrinsicVideoSize;
186
181
  private initDesiredStateSubscriptions;
@@ -188,9 +183,7 @@ export default class Player implements IPlayer {
188
183
  private initChromecastSubscription;
189
184
  private initStartingVideoTrack;
190
185
  private setStartingVideoTrack;
191
- private initLogs;
192
186
  private initDebugTelemetry;
193
- private initTracerSubscription;
194
187
  private initWakeLock;
195
188
  private setVideoTrackIdByQuality;
196
189
  private getActiveLiveDelay;
@@ -62,10 +62,6 @@ export interface IPlayer {
62
62
  * Может быть точнее, чем `info.position$` в промежутках между timeupdate
63
63
  */
64
64
  getExactTime(): number;
65
- /**
66
- * Возвращает все логи с момента инициализации плеера
67
- */
68
- getAllLogs(): ILogEntry[];
69
65
  experimental: {
70
66
  /**
71
67
  * Элемент, который сейчас вставлен в container.
@@ -74,7 +70,6 @@ export interface IPlayer {
74
70
  element$: IValueObservable<HTMLVideoElement | undefined>;
75
71
  tuningConfigName$: IValueSubject<string[]>;
76
72
  enableDebugTelemetry$: IValueSubject<boolean>;
77
- dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
78
73
  /** функция вычисления текущей позиции проигрывания из под провадера (если расчет нестандартный) */
79
74
  getCurrentTime$: IValueSubject<(() => number) | null>;
80
75
  };
@@ -1,12 +1,9 @@
1
- import { ISubject, IValueSubject, ILogger, IError } from '@vkontakte/videoplayer-shared';
1
+ import { ISubject, IValueSubject, IError } from '@vkontakte/videoplayer-shared';
2
2
  import { ChromecastState } from '../../../player/types';
3
3
  import { IChromecastConnection, IChromecastInitializer } from './types';
4
4
  interface IParams {
5
5
  receiverApplicationId?: string;
6
6
  isDisabled?: boolean;
7
- dependencies: {
8
- logger: ILogger;
9
- };
10
7
  }
11
8
  export declare class ChromecastInitializer implements IChromecastInitializer {
12
9
  readonly connection$: IValueSubject<IChromecastConnection | undefined>;
@@ -15,7 +12,6 @@ export declare class ChromecastInitializer implements IChromecastInitializer {
15
12
  contentId?: string;
16
13
  private readonly realCastState$;
17
14
  private readonly subscription;
18
- private readonly log;
19
15
  private readonly params;
20
16
  private isDestroyed;
21
17
  constructor(params: IParams);
@@ -11,7 +11,6 @@ export default class ChromecastProvider implements IProvider {
11
11
  private loadMediaTimeoutSubscription;
12
12
  private videoState;
13
13
  private params;
14
- private log;
15
14
  constructor(params: IParams);
16
15
  destroy(): void;
17
16
  private subscribe;
@@ -27,7 +26,6 @@ export default class ChromecastProvider implements IProvider {
27
26
  private createMediaInfo;
28
27
  private createLoadRequest;
29
28
  private loadMedia;
30
- private logRemoteEvent;
31
29
  private syncPlayback;
32
30
  }
33
31
  export {};
@@ -22,7 +22,6 @@ export default class DashLiveProvider implements IProvider {
22
22
  private maxSeekBackTime$;
23
23
  private zeroTime$;
24
24
  private liveOffset;
25
- private log;
26
25
  private params;
27
26
  constructor(params: Params);
28
27
  destroy(): void;
@@ -9,8 +9,7 @@ export default class FilesFetcher {
9
9
  private TIMEOUT;
10
10
  private BITRATE_ESTIMATOR;
11
11
  private MAX_PARALLEL_REQUESTS;
12
- private logger;
13
- constructor(RETRY_COUNT: number, TIMEOUT: number, BITRATE_ESTIMATOR: any, MAX_PARALLEL_REQUESTS: number, logger: (...args: any[]) => void);
12
+ constructor(RETRY_COUNT: number, TIMEOUT: number, BITRATE_ESTIMATOR: any, MAX_PARALLEL_REQUESTS: number);
14
13
  private limitCompleteCount;
15
14
  private _sendRequest;
16
15
  private _getParallelRequestCount;
@@ -19,7 +19,6 @@ interface IParams {
19
19
  manifestRetryMaxInterval: number;
20
20
  manifestRetryMaxCount: number;
21
21
  };
22
- logger: (...args: any[]) => void;
23
22
  }
24
23
  type AutoQualityLimits = {
25
24
  max?: number;
@@ -15,12 +15,9 @@
15
15
  * active time = (1.1 - 1.0) + (0.5 - 0.2) = 0.4
16
16
  * throughput = total size / active time = 6500 bytes/sec
17
17
  */
18
- type ILogger = (...args: any[]) => void;
19
18
  export default class ThroughputEstimator {
20
19
  private intervals;
21
20
  private currentRate;
22
- private logger;
23
- constructor(logger: ILogger);
24
21
  private _updateRate;
25
22
  private _createInterval;
26
23
  private _doMergeIntervals;
@@ -30,4 +27,3 @@ export default class ThroughputEstimator {
30
27
  addInterval(timeStart: number, timeEnd: number, bytes: number): boolean;
31
28
  getBitRate(): number;
32
29
  }
33
- export {};
@@ -3,7 +3,7 @@ import { CommonInit, IProviderSubscriptionInfo, ProviderState, Representation, S
3
3
  import { IProvider, IProviderParams } from '../../providers/types';
4
4
  import { TrackHistory } from '../../utils/autoSelectTrack';
5
5
  import { IStateMachine } from '../../utils/StateMachine/types';
6
- import { ISubscription, ITracer, Milliseconds } from '@vkontakte/videoplayer-shared';
6
+ import { ISubscription, Milliseconds } from '@vkontakte/videoplayer-shared';
7
7
  import { Player } from './lib/player';
8
8
  import { Scene3D } from '../../utils/3d/Scene3D';
9
9
  import DroppedFramesManager from '../../providers/utils/HTMLVideoElement/DroppedFramesManager';
@@ -20,7 +20,6 @@ export default abstract class BaseDashProvider implements IProvider {
20
20
  protected video: HTMLVideoElement;
21
21
  protected player: Player;
22
22
  protected params: IParams;
23
- protected tracer: ITracer;
24
23
  protected textTracksManager: TextTrackManager;
25
24
  protected droppedFramesManager: DroppedFramesManager;
26
25
  protected stallsManager: StallsManager;
@@ -41,6 +40,7 @@ export default abstract class BaseDashProvider implements IProvider {
41
40
  protected audioStreamsMap: Map<Stream, IAudioTrack[]>;
42
41
  protected videoTrackSwitchHistory: TrackHistory<IVideoTrack>;
43
42
  protected audioTrackSwitchHistory: TrackHistory<import("../../player/types").IBaseTrack>;
43
+ private readonly selectedRepresentations;
44
44
  constructor(params: IParams);
45
45
  protected abstract seek(position: Milliseconds, forcePrecise: boolean): void;
46
46
  protected getProviderSubscriptionInfo(): IProviderSubscriptionInfo;
@@ -12,6 +12,7 @@ export interface Dependencies {
12
12
  }
13
13
  export interface Gap extends IRange<Milliseconds> {
14
14
  representation: Representation['id'];
15
+ persistent: boolean;
15
16
  }
16
17
  export declare class BufferManager {
17
18
  currentLiveSegmentServerLatency$: IValueSubject<number>;
@@ -60,6 +61,7 @@ export declare class BufferManager {
60
61
  private index;
61
62
  private lastDataObtainedTimestampMs;
62
63
  private loadByteRangeSegmentsTimeoutId;
64
+ private sourceBufferBufferedDiff;
63
65
  constructor(kind: StreamKind, mediaSource: MediaSource, representations: Representation[], { fetcher, tuning, getCurrentPosition, isActiveLowLatency, compatibilityMode, manifest }: Dependencies);
64
66
  startWith: (param_0: string) => Promise<void | undefined>;
65
67
  switchToWithPreviousAbort(newRepresentationId: Representation['id'], dropBuffer?: boolean): void;
@@ -108,6 +110,7 @@ export declare class BufferManager {
108
110
  private pruneBuffer;
109
111
  private abortBuffer;
110
112
  getDebugBufferState(): IRange<Milliseconds> | undefined;
113
+ getBufferedTo(): number | null;
111
114
  getForwardBufferDuration(currentPosition?: Milliseconds | undefined): Milliseconds;
112
115
  private detectGaps;
113
116
  private detectGapsWhenIdle;
@@ -1,6 +1,6 @@
1
1
  import { HttpConnectionType } from '../../../player/types';
2
2
  import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
3
- import { Byte, IValueSubject, Milliseconds, IRange, Subject, ITracer, IError } from '@vkontakte/videoplayer-shared';
3
+ import { Byte, IValueSubject, Milliseconds, IRange, Subject, IError } from '@vkontakte/videoplayer-shared';
4
4
  import { CommonInit, GenericContainerParser, Segment, SegmentReference } from './types';
5
5
  export declare enum RangeMethod {
6
6
  HEADER = 0,
@@ -10,7 +10,6 @@ export interface IParams {
10
10
  throughputEstimator?: ThroughputEstimator;
11
11
  requestQuic: boolean;
12
12
  compatibilityMode?: boolean;
13
- tracer: ITracer;
14
13
  useEnableSubtitlesParam?: boolean;
15
14
  }
16
15
  export type Priority = 'high' | 'low' | 'auto';
@@ -35,17 +34,16 @@ export type RepresentationFetchResult = {
35
34
  export declare class Fetcher {
36
35
  private throughputEstimator;
37
36
  private requestQuic;
38
- private tracer;
39
37
  lastConnectionType$: IValueSubject<HttpConnectionType | undefined>;
40
38
  lastConnectionReused$: IValueSubject<boolean | undefined>;
41
39
  lastRequestFirstBytes$: IValueSubject<Milliseconds | undefined>;
42
40
  recoverableError$: Subject<IError>;
43
41
  error$: Subject<IError>;
44
42
  private abortAllController;
45
- private subscription;
46
43
  private compatibilityMode;
47
44
  private useEnableSubtitlesParam;
48
- constructor({ throughputEstimator, requestQuic, tracer, compatibilityMode, useEnableSubtitlesParam }: IParams);
45
+ private readonly subscription;
46
+ constructor({ throughputEstimator, requestQuic, compatibilityMode, useEnableSubtitlesParam }: IParams);
49
47
  private onHeadersReceived;
50
48
  fetchManifest: (param_0: string) => Promise<string | null | undefined>;
51
49
  fetch: (param_0: string, param_1: FetchParams) => Promise<ArrayBuffer | null | undefined>;
@@ -54,5 +52,6 @@ export declare class Fetcher {
54
52
  private fetchByteRangeRepresentation;
55
53
  private fetchTemplateRepresentation;
56
54
  private doFetch;
55
+ private unsubscribeAbortSubscription;
57
56
  }
58
57
  export declare const suppressAbort: (e: Error | unknown) => void | never;
@@ -3,7 +3,7 @@ import { CommonInit, LiveStreamStatus, Manifest, Representation, StreamKind, Tex
3
3
  import StateMachine from '../../../utils/StateMachine/StateMachine';
4
4
  import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
5
5
  import { ITuningConfig } from '../../../utils/tuningConfig';
6
- import { IError, ISubject, ITracer, IValueSubject, Milliseconds, Subject } from '@vkontakte/videoplayer-shared';
6
+ import { IError, ISubject, IValueSubject, Milliseconds, Subject } from '@vkontakte/videoplayer-shared';
7
7
  export declare enum State {
8
8
  NONE = "none",
9
9
  MANIFEST_READY = "manifest_ready",
@@ -14,7 +14,6 @@ export interface Params {
14
14
  throughputEstimator: ThroughputEstimator;
15
15
  tuning: ITuningConfig;
16
16
  compatibilityMode?: boolean;
17
- tracer: ITracer;
18
17
  }
19
18
  export declare class Player {
20
19
  private element;
@@ -22,7 +21,6 @@ export declare class Player {
22
21
  private source;
23
22
  private manifest;
24
23
  private tuning;
25
- private tracer;
26
24
  private videoBufferManager;
27
25
  private audioBufferManager;
28
26
  private bufferManagers;
@@ -68,6 +66,7 @@ export declare class Player {
68
66
  private stallWatchdogSubscription;
69
67
  private livePauseWatchdogSubscription;
70
68
  private destroyController;
69
+ private initedPruneBufferCallback;
71
70
  constructor(params: Params);
72
71
  initManifest: (param_0: HTMLVideoElement, param_1: string, param_2: number) => Promise<void | undefined>;
73
72
  updateManifest: () => Promise<Manifest | null | undefined>;
@@ -83,7 +82,6 @@ export declare class Player {
83
82
  getStreams(): Manifest['streams'] | undefined;
84
83
  setPreloadOnly(preloadOnly: boolean): void;
85
84
  destroy(): void;
86
- private initTracerSubscription;
87
85
  private isManualDecreasePlaybackInLive;
88
86
  private normolizeLiveOffset;
89
87
  private tick;
@@ -0,0 +1,19 @@
1
+ export declare class SourceBufferBufferedDiff {
2
+ private lastUpdateTs;
3
+ private lastCallTs;
4
+ private prevRanges;
5
+ private readonly sourceBuffer;
6
+ private readonly mediaSource;
7
+ private readonly subscription;
8
+ constructor(mediaSource: MediaSource, sourceBuffer: SourceBuffer);
9
+ private updateend;
10
+ /**
11
+ * если длина массивов разная - считаем, что какие то сегменты удалили
12
+ *
13
+ * если длина одинаковая - считаем, что сегменты удалили в том случае,
14
+ * если в новом массиве хотя бы 1 сегмент стал меньше
15
+ */
16
+ private isRangesRemoved;
17
+ wasUpdated(): boolean;
18
+ destroy(): void;
19
+ }
@@ -1,5 +1,6 @@
1
1
  import { Representation, Segment, SegmentReference, Stream, TemplateSegment, TemplateSegmentReference, TextRepresentation } from '../../../providers/DashProvider/lib/types';
2
2
  import { IAudioStream, IAudioTrack, IInternalTextTrack, IVideoStream, IVideoTrack } from '../../../player/types';
3
+ import { IRange, Milliseconds } from '@vkontakte/videoplayer-shared';
3
4
  export declare const representationToVideoTrack: ({ id, width, height, bitrate, fps, quality: qualityString, streamId }: Representation) => IVideoTrack | undefined;
4
5
  export declare const representationToAudioTrack: ({ id, bitrate }: Representation) => IAudioTrack;
5
6
  export declare const representationToTextTrack: ({ language, label }: Stream, { id, url, isAuto }: Representation & {
@@ -13,3 +14,13 @@ export declare const isTemplateSegment: (segment: Segment) => segment is Templat
13
14
  export declare const isTemplateSegmentReference: (segmentReference: SegmentReference) => segmentReference is TemplateSegmentReference;
14
15
  export declare const isAbortError: (e: Error | unknown) => boolean;
15
16
  export declare const isTextRepresentation: (representation: Representation | TextRepresentation) => representation is TextRepresentation;
17
+ /**
18
+ * @mutates intervals
19
+ */
20
+ export declare const mergeIntervals: (intervals: IRange<Milliseconds>[]) => IRange<Milliseconds>[];
21
+ export declare const findInIterator: <T>(iterable: MapIterator<T> | SetIterator<T>, matchFn: (arg: T) => boolean) => T | null;
22
+ /**
23
+ * даёт `true` каждые `ms` миллисекунд
24
+ */
25
+ export declare const semaphor: (ms: number) => () => boolean;
26
+ export declare const createTimeRanges: (buffered: TimeRanges) => number[];
@@ -0,0 +1,57 @@
1
+ import { IAudioTrack, IDashURLSource, IHLSSource, IInternalTextTrack, IVideoTrack } from '../../player/types';
2
+ import { CommonInit, IProviderSubscriptionInfo, ProviderState, Representation, Stream } from './lib/types';
3
+ import { IProvider, IProviderParams } from '../../providers/types';
4
+ import { TrackHistory } from '../../utils/autoSelectTrack';
5
+ import { IStateMachine } from '../../utils/StateMachine/types';
6
+ import { ISubscription, ITracer, Milliseconds } from '@vkontakte/videoplayer-shared';
7
+ import { Player } from './lib/player';
8
+ import { Scene3D } from '../../utils/3d/Scene3D';
9
+ import DroppedFramesManager from '../../providers/utils/HTMLVideoElement/DroppedFramesManager';
10
+ import TextTrackManager from '../../providers/utils/HTMLVideoElement/TextTrackManager';
11
+ import StallsManager from '../../providers/utils/StallsManager';
12
+ import { ElementSizeManager } from './lib/ElementSizeManager';
13
+ type IParams = IProviderParams<IDashURLSource> & {
14
+ sourceHls?: IHLSSource;
15
+ };
16
+ export default abstract class BaseDashProvider implements IProvider {
17
+ scene3D: Scene3D | undefined;
18
+ protected subscription: ISubscription;
19
+ protected videoState: IStateMachine<ProviderState>;
20
+ protected video: HTMLVideoElement;
21
+ protected player: Player;
22
+ protected params: IParams;
23
+ protected tracer: ITracer;
24
+ protected textTracksManager: TextTrackManager;
25
+ protected droppedFramesManager: DroppedFramesManager;
26
+ protected stallsManager: StallsManager;
27
+ protected elementSizeManager: ElementSizeManager;
28
+ protected videoTracksMap: Map<IVideoTrack, {
29
+ stream: Stream;
30
+ representation: Representation;
31
+ }>;
32
+ protected audioTracksMap: Map<IAudioTrack, {
33
+ stream: Stream;
34
+ representation: Representation;
35
+ }>;
36
+ protected textTracksMap: Map<IInternalTextTrack, {
37
+ stream: Stream;
38
+ representation: Representation;
39
+ }>;
40
+ protected videoStreamsMap: Map<Stream, IVideoTrack[]>;
41
+ protected audioStreamsMap: Map<Stream, IAudioTrack[]>;
42
+ protected videoTrackSwitchHistory: TrackHistory<IVideoTrack>;
43
+ protected audioTrackSwitchHistory: TrackHistory<import("../../player/types").IBaseTrack>;
44
+ private readonly selectedRepresentations;
45
+ constructor(params: IParams);
46
+ protected abstract seek(position: Milliseconds, forcePrecise: boolean): void;
47
+ protected getProviderSubscriptionInfo(): IProviderSubscriptionInfo;
48
+ protected subscribe(): void;
49
+ protected selectVideoAudioRepresentations(): [Representation, Representation | undefined] | undefined;
50
+ protected prepare(manifestOffset?: number): void;
51
+ protected syncPlayback: () => undefined;
52
+ protected init3DScene: (init: CommonInit) => void;
53
+ protected destroy3DScene: () => void;
54
+ protected playIfAllowed(): void;
55
+ destroy(): void;
56
+ }
57
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const DASH_LIVE_UPDATE_INTERVAL_MS = 1000;
2
+ export declare const DASH_STALL_UPDATE_INTERVAL_MS = 50;
3
+ export declare const DASH_LIVE_STALL_REINIT_INTERVAL_MS = 2000;
@@ -0,0 +1,2 @@
1
+ export { default as NewDashProvider } from './newDashProvider';
2
+ export { default as NewDashCmafLiveProvider } from './newDashCmafLiveProvider';
@@ -0,0 +1,19 @@
1
+ import { IObservableVideo } from '../../../providers/utils/HTMLVideoElement/observable';
2
+ import { IListener, IRectangle, ISubscription, ValueSubject } from '@vkontakte/videoplayer-shared';
3
+ interface ConnectParams {
4
+ video: HTMLVideoElement;
5
+ observableVideo: IObservableVideo;
6
+ }
7
+ export declare class ElementSizeManager {
8
+ private readonly subscription;
9
+ private readonly pipSize$;
10
+ private readonly videoSize$;
11
+ private readonly elementSize$;
12
+ private pictureInPictureWindowRemoveEventListener;
13
+ connect({ observableVideo, video }: ConnectParams): void;
14
+ getValue(): IRectangle<number> | undefined;
15
+ subscribe(listener: IListener<IRectangle<number> | undefined>, error?: IListener<Error | unknown>): ISubscription;
16
+ getObservable(): ValueSubject<IRectangle<number> | undefined>;
17
+ destroy(): void;
18
+ }
19
+ export {};
@@ -0,0 +1,23 @@
1
+ import { IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
2
+ import { Dependencies } from './buffer';
3
+ import { Manifest, Stream, TextRepresentation } from './types';
4
+ export declare class LiveTextManager {
5
+ currentRepresentation$: IValueSubject<TextRepresentation | null>;
6
+ private readonly maxRepresentations;
7
+ private representationsCursor;
8
+ private representations;
9
+ private readonly getCurrentPosition;
10
+ private currentSegment;
11
+ constructor(streams: Stream[], deps: Pick<Dependencies, 'getCurrentPosition'>);
12
+ updateLive(manifest: Manifest | null): void;
13
+ seekLive(streams?: Stream[]): void;
14
+ maintain(currentPosition?: Milliseconds | undefined): void;
15
+ destroy(): void;
16
+ /**
17
+ * @todo support multi-streams
18
+ * @see https://jira.mvk.com/browse/VP-2420
19
+ */
20
+ private processStreams;
21
+ static isSupported(streams?: Stream[]): boolean;
22
+ private static filterRepresentations;
23
+ }
@@ -0,0 +1,117 @@
1
+ import { ITuningConfig } from '../../../utils/tuningConfig';
2
+ import { IError, IRange, ISubject, IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
3
+ import type { Fetcher } from './fetcher';
4
+ import { CommonInit, Manifest, Representation, Stream, StreamKind } from './types';
5
+ export interface Dependencies {
6
+ fetcher: Fetcher;
7
+ tuning: ITuningConfig;
8
+ getCurrentPosition: () => Milliseconds | undefined;
9
+ isActiveLowLatency: () => boolean;
10
+ compatibilityMode?: boolean;
11
+ manifest: Manifest | null;
12
+ }
13
+ export interface Gap extends IRange<Milliseconds> {
14
+ representation: Representation['id'];
15
+ }
16
+ export declare class BufferManager {
17
+ currentLiveSegmentServerLatency$: IValueSubject<number>;
18
+ currentLowLatencySegmentLength$: IValueSubject<number>;
19
+ currentSegmentLength$: IValueSubject<number>;
20
+ onLastSegment$: IValueSubject<boolean>;
21
+ fullyBuffered$: IValueSubject<boolean>;
22
+ playingRepresentation$: IValueSubject<Representation['id'] | undefined>;
23
+ playingRepresentationInit$: IValueSubject<CommonInit | undefined>;
24
+ error$: ISubject<IError>;
25
+ gaps: Gap[];
26
+ private subscription;
27
+ private kind;
28
+ private initData;
29
+ private parsedInitData;
30
+ private representations;
31
+ private segments;
32
+ private allInitsLoaded;
33
+ private activeSegments;
34
+ private mediaSource;
35
+ private playingRepresentationId;
36
+ private downloadingRepresentationId;
37
+ private switchingToRepresentationId;
38
+ private sourceBuffer;
39
+ private downloadAbortController;
40
+ private switchAbortController;
41
+ private destroyAbortController;
42
+ private readonly getCurrentPosition;
43
+ private readonly isActiveLowLatency;
44
+ private tuning;
45
+ private forwardBufferTarget;
46
+ private fetcher;
47
+ private bufferLimit;
48
+ private sourceBufferTaskQueue;
49
+ private gapDetectionIdleCallback;
50
+ private initLoadIdleCallback;
51
+ private failedDownloads;
52
+ private baseUrls;
53
+ private baseUrlsIndex;
54
+ private compatibilityMode;
55
+ private preloadOnly;
56
+ private isLive;
57
+ private liveUpdateSegmentIndex;
58
+ private liveInitialAdditionalOffset;
59
+ private isSeekingLive;
60
+ private index;
61
+ private lastDataObtainedTimestampMs;
62
+ private loadByteRangeSegmentsTimeoutId;
63
+ constructor(kind: StreamKind, mediaSource: MediaSource, representations: Representation[], { fetcher, tuning, getCurrentPosition, isActiveLowLatency, compatibilityMode, manifest }: Dependencies);
64
+ startWith: (param_0: string) => Promise<void | undefined>;
65
+ switchToWithPreviousAbort(newRepresentationId: Representation['id'], dropBuffer?: boolean): void;
66
+ switchTo: (param_0: string, param_1: boolean | undefined) => Promise<void | undefined>;
67
+ switchToOld: (param_0: string, param_1: boolean | undefined) => Promise<void | undefined>;
68
+ warmUpMediaSource(): void;
69
+ abort(): Promise<boolean>;
70
+ maintain(currentPosition?: Milliseconds | undefined): void;
71
+ get lastDataObtainedTimestamp(): number;
72
+ private searchGaps;
73
+ private getActualLiveStartingSegments;
74
+ getLiveSegmentsToLoadState(manifest: Manifest | null): IRange<Milliseconds> | undefined;
75
+ seekLive: (param_0: Stream[] | undefined) => Promise<void | undefined>;
76
+ updateLive(manifest: Manifest | null): void;
77
+ proceedLowLatencyLive(): void;
78
+ private updateLowLatencyLiveIfNeeded;
79
+ findSegmentStartTime(position: Milliseconds): Milliseconds | undefined;
80
+ setTarget(time: Milliseconds): void;
81
+ setPreloadOnly(preloadOnly: boolean): void;
82
+ destroy(): void;
83
+ private selectForwardBufferSegments;
84
+ private selectForwardBufferSegmentsLive;
85
+ private selectForwardBufferSegmentsRecord;
86
+ private loadSegments;
87
+ private loadTemplateSegment;
88
+ private updateRepresentationsBaseUrlIfNeeded;
89
+ private loadByteRangeSegments;
90
+ private prepareByteRangeFetchSegmentParams;
91
+ private prepareTemplateFetchSegmentParams;
92
+ private abortActiveSegments;
93
+ private onSomeTemplateDataLoaded;
94
+ /**
95
+ * Закидываем в буфер сегменты атомарнее чем сегмент целиком. Например, по боксам в мпеге и по блокам в вебме.
96
+ * Таким образом не ждём его полной загрузки и готовы играть его намного быстрее
97
+ * @param dataView – данные, размер буфера – весь запрос
98
+ * @param globalFrom – Отступ dataView от начала файла, совпадает с отсупами сегментов
99
+ * @param loaded – Объём загруженных в dataView данных (всё что больше – пока нули)
100
+ * @private
101
+ */
102
+ private onSomeByteRangesDataLoaded;
103
+ private onSegmentFullyAppended;
104
+ private abortSegment;
105
+ private loadNextInit;
106
+ private loadInit;
107
+ private dropBuffer;
108
+ private pruneBuffer;
109
+ private abortBuffer;
110
+ getDebugBufferState(): IRange<Milliseconds> | undefined;
111
+ getBufferedTo(): number | null;
112
+ getForwardBufferDuration(currentPosition?: Milliseconds | undefined): Milliseconds;
113
+ private detectGaps;
114
+ private detectGapsWhenIdle;
115
+ private checkEjectedSegments;
116
+ private handleAsyncError;
117
+ }
@@ -0,0 +1,59 @@
1
+ import { HttpConnectionType } from '../../../player/types';
2
+ import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
3
+ import { Byte, IValueSubject, Milliseconds, IRange, Subject, ITracer, IError } from '@vkontakte/videoplayer-shared';
4
+ import { CommonInit, GenericContainerParser, Segment, SegmentReference } from './types';
5
+ export declare enum RangeMethod {
6
+ HEADER = 0,
7
+ PARAM = 1
8
+ }
9
+ export interface IParams {
10
+ throughputEstimator?: ThroughputEstimator;
11
+ requestQuic: boolean;
12
+ compatibilityMode?: boolean;
13
+ tracer: ITracer;
14
+ useEnableSubtitlesParam?: boolean;
15
+ }
16
+ export type Priority = 'high' | 'low' | 'auto';
17
+ export interface FetchParamsWithUrl extends FetchParams {
18
+ url: string;
19
+ }
20
+ export interface FetchParams {
21
+ range?: IRange<Byte>;
22
+ rangeMethod?: RangeMethod;
23
+ onProgress?: (dataView: DataView, loaded: number) => void;
24
+ onProgressTasks?: Promise<void>[];
25
+ signal?: AbortSignal;
26
+ priority?: Priority;
27
+ measureThroughput?: boolean;
28
+ isLowLatency?: boolean;
29
+ }
30
+ export type RepresentationFetchResult = {
31
+ init: CommonInit | null;
32
+ segments: Segment[];
33
+ dataView: DataView;
34
+ };
35
+ export declare class Fetcher {
36
+ private throughputEstimator;
37
+ private requestQuic;
38
+ private tracer;
39
+ lastConnectionType$: IValueSubject<HttpConnectionType | undefined>;
40
+ lastConnectionReused$: IValueSubject<boolean | undefined>;
41
+ lastRequestFirstBytes$: IValueSubject<Milliseconds | undefined>;
42
+ recoverableError$: Subject<IError>;
43
+ error$: Subject<IError>;
44
+ private abortAllController;
45
+ private compatibilityMode;
46
+ private useEnableSubtitlesParam;
47
+ private readonly subscription;
48
+ constructor({ throughputEstimator, requestQuic, tracer, compatibilityMode, useEnableSubtitlesParam }: IParams);
49
+ private onHeadersReceived;
50
+ fetchManifest: (param_0: string) => Promise<string | null | undefined>;
51
+ fetch: (param_0: string, param_1: FetchParams) => Promise<ArrayBuffer | null | undefined>;
52
+ fetchRepresentation(segmentReference: SegmentReference, parser: GenericContainerParser<unknown>, priority?: Priority): Promise<RepresentationFetchResult | null>;
53
+ destroy(): void;
54
+ private fetchByteRangeRepresentation;
55
+ private fetchTemplateRepresentation;
56
+ private doFetch;
57
+ private unsubscribeAbortSubscription;
58
+ }
59
+ export declare const suppressAbort: (e: Error | unknown) => void | never;
@@ -0,0 +1,13 @@
1
+ /** @fork https://github.com/sozialhelden/ietf-language-tags */
2
+ export interface ILanguageSubtag {
3
+ langtag?: string;
4
+ language?: string;
5
+ extlang?: string;
6
+ script?: string;
7
+ region?: string;
8
+ variants?: string[];
9
+ extensions?: Record<string, string>;
10
+ privateuse?: string;
11
+ }
12
+ /** @fork https://github.com/sozialhelden/ietf-language-tags */
13
+ export declare const parseLangAttribute: (attr: string) => ILanguageSubtag | null;
@@ -0,0 +1,3 @@
1
+ import { ContainerParser, MpegParser } from '../../../../providers/DashProviderNew/lib/types';
2
+ export declare const getContainerParser: (mime: string) => ContainerParser;
3
+ export declare const isMp4Parser: (parser: ContainerParser) => parser is MpegParser;