@vkontakte/videoplayer-core 2.0.131-dev.6210de2e.0 → 2.0.131-dev.85f5d8d6.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 (65) hide show
  1. package/es2015.cjs.js +32 -93
  2. package/es2015.esm.js +28 -89
  3. package/es2018.cjs.js +33 -94
  4. package/es2018.esm.js +29 -90
  5. package/es2024.cjs.js +34 -95
  6. package/es2024.esm.js +31 -92
  7. package/esnext.cjs.js +34 -95
  8. package/esnext.esm.js +31 -92
  9. package/evergreen.esm.js +28 -89
  10. package/package.json +2 -2
  11. package/types/player/Player.d.ts +1 -5
  12. package/types/providers/utils/StallsManager.d.ts +4 -18
  13. package/types/utils/autoSelectTrack.d.ts +3 -6
  14. package/types/utils/qualityLimits.d.ts +18 -3
  15. package/types/utils/tuningConfig.d.ts +7 -28
  16. package/types/providers/DashProviderNew/baseDashProvider.d.ts +0 -57
  17. package/types/providers/DashProviderNew/consts.d.ts +0 -3
  18. package/types/providers/DashProviderNew/index.d.ts +0 -2
  19. package/types/providers/DashProviderNew/lib/ElementSizeManager.d.ts +0 -19
  20. package/types/providers/DashProviderNew/lib/LiveTextManager.d.ts +0 -23
  21. package/types/providers/DashProviderNew/lib/buffer.d.ts +0 -117
  22. package/types/providers/DashProviderNew/lib/fetcher.d.ts +0 -59
  23. package/types/providers/DashProviderNew/lib/parsers/ietf/index.d.ts +0 -13
  24. package/types/providers/DashProviderNew/lib/parsers/index.d.ts +0 -3
  25. package/types/providers/DashProviderNew/lib/parsers/mpd.d.ts +0 -3
  26. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxModel.d.ts +0 -20
  27. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxParser.d.ts +0 -21
  28. package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxTypeEnum.d.ts +0 -30
  29. package/types/providers/DashProviderNew/lib/parsers/mpeg/box.d.ts +0 -74
  30. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/avc1.d.ts +0 -8
  31. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/equi.d.ts +0 -21
  32. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/ftyp.d.ts +0 -17
  33. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/index.d.ts +0 -26
  34. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdat.d.ts +0 -15
  35. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdia.d.ts +0 -8
  36. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mfhd.d.ts +0 -11
  37. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/minf.d.ts +0 -8
  38. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moof.d.ts +0 -8
  39. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moov.d.ts +0 -8
  40. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mvhd.d.ts +0 -35
  41. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/prhd.d.ts +0 -16
  42. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/proj.d.ts +0 -8
  43. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sidx.d.ts +0 -48
  44. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/st3d.d.ts +0 -23
  45. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stbl.d.ts +0 -8
  46. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stsd.d.ts +0 -11
  47. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sv3d.d.ts +0 -8
  48. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfdt.d.ts +0 -17
  49. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfhd.d.ts +0 -22
  50. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tkhd.d.ts +0 -42
  51. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/traf.d.ts +0 -8
  52. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trak.d.ts +0 -8
  53. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trun.d.ts +0 -31
  54. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/unknown.d.ts +0 -6
  55. package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/uuid.d.ts +0 -11
  56. package/types/providers/DashProviderNew/lib/parsers/mpeg/fullBox.d.ts +0 -15
  57. package/types/providers/DashProviderNew/lib/parsers/mpeg/isobmff.d.ts +0 -12
  58. package/types/providers/DashProviderNew/lib/parsers/webm/ebml.d.ts +0 -76
  59. package/types/providers/DashProviderNew/lib/parsers/webm/webm.d.ts +0 -3
  60. package/types/providers/DashProviderNew/lib/player.d.ts +0 -92
  61. package/types/providers/DashProviderNew/lib/sourceBufferTaskQueue.d.ts +0 -19
  62. package/types/providers/DashProviderNew/lib/types.d.ts +0 -186
  63. package/types/providers/DashProviderNew/lib/utils.d.ts +0 -21
  64. package/types/providers/DashProviderNew/newDashCmafLiveProvider.d.ts +0 -8
  65. package/types/providers/DashProviderNew/newDashProvider.d.ts +0 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/videoplayer-core",
3
- "version": "2.0.131-dev.6210de2e.0",
3
+ "version": "2.0.131-dev.85f5d8d6.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.4d41828e.0",
57
+ "@vkontakte/videoplayer-shared": "1.0.59-dev.01d2a3f6.0",
58
58
  "hls.js": "~1.4.7"
59
59
  }
60
60
  }
@@ -113,10 +113,7 @@ export default class Player implements IPlayer {
113
113
  dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
114
114
  getCurrentTime$: ValueSubject<null>;
115
115
  };
116
- private static withWaitInit;
117
- private static withErrorCatching;
118
116
  constructor(tuning?: IOptionalTuningConfig, tracer?: ITracer);
119
- private createProviderContainer;
120
117
  initVideo(config: IConfig): IPlayer;
121
118
  destroy(): void;
122
119
  prepare(): IPlayer;
@@ -192,8 +189,7 @@ export default class Player implements IPlayer {
192
189
  private initStartingVideoTrack;
193
190
  private setStartingVideoTrack;
194
191
  private initLogs;
195
- private initBasicDebugTelemetry;
196
- private initProviderDebugTelemetry;
192
+ private initDebugTelemetry;
197
193
  private initTracerSubscription;
198
194
  private initWakeLock;
199
195
  private setVideoTrackIdByQuality;
@@ -8,26 +8,20 @@ interface IConnectData {
8
8
  isBuffering$: IObservable<boolean>;
9
9
  isSeeked$: IObservable<boolean>;
10
10
  looped$: IObservable<Seconds>;
11
- playing$: IObservable<undefined>;
12
- currentStallDuration$: IValueSubject<Milliseconds>;
13
- tuning: ITuningConfig['stallsManager'];
14
- abrParams: ITuningConfig['autoTrackSelection'];
11
+ currentStallDuration$: IObservable<Milliseconds>;
12
+ qualityLimitsOnStall: ITuningConfig['dash']['qualityLimitsOnStall'];
15
13
  }
16
14
  declare class StallsManager {
17
15
  private currentStallDuration$;
18
16
  private videoLastDataObtainedTimestamp$;
19
17
  private throughput$;
20
18
  private rtt$;
21
- private tuning;
22
- private abrParams;
19
+ private qualityLimitsOnStall;
23
20
  private isSeeked$;
24
21
  private isBuffering$;
22
+ private currentStallsCount;
25
23
  private maxQualityLimit;
26
24
  private lastUniqueVideoTrackSelected;
27
- private currentStallsCount;
28
- private sumStallsDuration;
29
- private lastStallDuration;
30
- private providerStartWatchingTimestamp;
31
25
  private lastUniqueVideoTrackSelectedTimestamp;
32
26
  private predictedThroughputWithoutData;
33
27
  private qualityRestrictionTimer;
@@ -36,15 +30,7 @@ declare class StallsManager {
36
30
  connect(data: IConnectData): void;
37
31
  get videoMaxQualityLimit(): ExactVideoQuality | undefined;
38
32
  get predictedThroughput(): Kbps;
39
- get abrTuningParams(): ITuningConfig['autoTrackSelection'];
40
33
  set lastVideoTrackSelected(lastUniqueVideoTrackSelected: IVideoTrack);
41
34
  destroy(): void;
42
- private updateStoredAbrParams;
43
- private calculateOptimalAbrParams;
44
- private getStoredData;
45
- private setStoredData;
46
- private addStallInfoToHistory;
47
- private updateStallData;
48
- private subscribe;
49
35
  }
50
36
  export default StallsManager;
@@ -26,10 +26,7 @@ export declare class TrackHistory<T extends IBaseTrack> {
26
26
  clear(): void;
27
27
  }
28
28
  export declare const defaultEmptyArrayErrorMessage = "Assertion \"ABR Tracks is empty array\" failed";
29
- export declare const getMinPossibleAudioForVideoOld: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
30
- export declare const getMinPossibleAudioForVideoNew: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
31
- export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize, }: IConstraints<IVideoTrack>) => IVideoTrack;
32
- 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 autoSelectAudioTrackForVideoOld: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput, }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
34
- export declare const autoSelectAudioTrackForVideoNew: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput, }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
29
+ export declare const getMinPossibleAudioForVideo: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
30
+ export declare const autoSelectVideoTrack: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize, }: IConstraints<IVideoTrack>) => IVideoTrack;
31
+ export declare const autoSelectAudioTrackForVideo: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput, }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
35
32
  export {};
@@ -1,7 +1,22 @@
1
1
  import { IVideoTrack, PredefinedQualityLimits } from '../player/types';
2
2
  import { ExactVideoQuality, Nullable, QualityLimits } from '@vkontakte/videoplayer-shared';
3
- export declare function getQualityLimitsPredefinedType(limits: QualityLimits, highQualityLimit: ExactVideoQuality, trafficSavingLimit: ExactVideoQuality): PredefinedQualityLimits;
4
- export declare function isHighQualityEnabled(limits: Nullable<QualityLimits>, highQualityLimit: ExactVideoQuality, trafficSavingLimit: ExactVideoQuality): boolean;
3
+ type Params = {
4
+ limits: QualityLimits;
5
+ highQualityLimit: ExactVideoQuality;
6
+ trafficSavingLimit: ExactVideoQuality;
7
+ };
8
+ export declare function getQualityLimitsPredefinedType({ limits, highQualityLimit, trafficSavingLimit, }: Params): PredefinedQualityLimits;
9
+ type HighQualityEnabled = {
10
+ limits?: QualityLimits;
11
+ highQualityLimit: ExactVideoQuality;
12
+ trafficSavingLimit: ExactVideoQuality;
13
+ };
14
+ export declare function isHighQualityEnabled({ limits, highQualityLimit, trafficSavingLimit }: HighQualityEnabled): boolean;
15
+ type LimitsValidParams = {
16
+ limits?: QualityLimits;
17
+ highestAvailableQuality: Nullable<ExactVideoQuality>;
18
+ lowestAvailableQuality: Nullable<ExactVideoQuality>;
19
+ };
5
20
  type LimitsAsHeightValidParams = {
6
21
  limits?: {
7
22
  min?: number;
@@ -10,7 +25,7 @@ type LimitsAsHeightValidParams = {
10
25
  highestAvailableHeight: Nullable<number>;
11
26
  lowestAvailableHeight: Nullable<number>;
12
27
  };
13
- export declare function areLimitsInvalid(limits: Nullable<QualityLimits>, highestAvailableQuality: Nullable<ExactVideoQuality>, lowestAvailableQuality: Nullable<ExactVideoQuality>): boolean | (null | undefined);
28
+ export declare function areLimitsInvalid({ limits, highestAvailableQuality, lowestAvailableQuality }: LimitsValidParams): boolean | (null | undefined);
14
29
  /**
15
30
  * Проверяем лимиты качества, когда указана высота качества.
16
31
  */
@@ -24,12 +24,8 @@ export type ITuningConfig = {
24
24
  };
25
25
  autoTrackSelection: {
26
26
  bitrateFactorAtEmptyBuffer: number;
27
- minBitrateFactorAtEmptyBuffer: number;
28
- maxBitrateFactorAtEmptyBuffer: number;
29
27
  bitrateAudioFactorAtEmptyBuffer: number;
30
28
  bitrateFactorAtFullBuffer: number;
31
- minBitrateFactorAtFullBuffer: number;
32
- maxBitrateFactorAtFullBuffer: number;
33
29
  bitrateAudioFactorAtFullBuffer: number;
34
30
  minVideoAudioRatio: number;
35
31
  minAvailableThroughputAudioRatio: number;
@@ -40,8 +36,6 @@ export type ITuningConfig = {
40
36
  pixelRatioLogBase: number;
41
37
  pixelRatioLogCoefficients: number[];
42
38
  containerSizeFactor: number;
43
- minContainerSizeFactor: number;
44
- maxContainerSizeFactor: number;
45
39
  lazyQualitySwitch: boolean;
46
40
  minBufferToSwitchUp: number;
47
41
  considerPlaybackRate: boolean;
@@ -52,25 +46,6 @@ export type ITuningConfig = {
52
46
  trafficSavingLimit: ExactVideoQuality;
53
47
  highQualityLimit: ExactVideoQuality;
54
48
  };
55
- stallsManager: {
56
- stallDurationNoDataBeforeQualityDecrease: Milliseconds;
57
- stallDurationToBeCount: Milliseconds;
58
- stallCountBeforeQualityDecrease: Milliseconds;
59
- resetQualityRestrictionTimeout: Milliseconds;
60
- ignoreStallsOnSeek: boolean;
61
- stallsMetricsHistoryLength: number;
62
- maxPossibleStallDuration: Milliseconds;
63
- minTvtToBeCounted: Seconds;
64
- maxTvtToBeCounted: Seconds;
65
- targetStallsDurationPerTvt: number;
66
- deviationStallsDurationPerTvt: number;
67
- criticalStallsDurationPerTvt: number;
68
- abrAdjustingSpeed: number;
69
- emaAlpha: number;
70
- useTotalStallsDurationPerTvt: boolean;
71
- useAverageStallsDurationPerTvt: boolean;
72
- useEmaStallsDurationPerTvt: boolean;
73
- };
74
49
  droppedFramesChecker: {
75
50
  enabled: boolean;
76
51
  percentLimit: number;
@@ -97,6 +72,13 @@ export type ITuningConfig = {
97
72
  enableSubSegmentBufferFeeding: boolean;
98
73
  bufferEmptinessTolerance: Milliseconds;
99
74
  useFetchPriorityHints: boolean;
75
+ qualityLimitsOnStall: {
76
+ stallDurationNoDataBeforeQualityDecrease: Milliseconds;
77
+ stallDurationToBeCount: Milliseconds;
78
+ stallCountBeforeQualityDecrease: Milliseconds;
79
+ resetQualityRestrictionTimeout: Milliseconds;
80
+ ignoreStallsOnSeek: boolean;
81
+ };
100
82
  enableBaseUrlSupport: boolean;
101
83
  maxSegmentRetryCount: number;
102
84
  sourceOpenTimeout: number;
@@ -175,8 +157,6 @@ export type ITuningConfig = {
175
157
  useNativeHLSTextTracks: boolean;
176
158
  useManagedMediaSource: boolean;
177
159
  useNewSwitchTo: boolean;
178
- useNewDashProvider: boolean;
179
- useNewAutoSelectVideoTrack: boolean;
180
160
  useSafariEndlessRequestBugfix: boolean;
181
161
  useRefactoredSearchGap: boolean;
182
162
  isAudioDisabled: boolean;
@@ -226,7 +206,6 @@ export type ITuningConfig = {
226
206
  disableYandexPiP?: boolean;
227
207
  asyncResolveClientChecker?: boolean;
228
208
  autostartOnlyIfVisible?: boolean;
229
- useLazyInit?: boolean;
230
209
  };
231
210
  export type IOptionalTuningConfig = RecursivePartial<ITuningConfig> & {
232
211
  configName: ITuningConfig['configName'];
@@ -1,57 +0,0 @@
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 {};
@@ -1,3 +0,0 @@
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;
@@ -1,2 +0,0 @@
1
- export { default as NewDashProvider } from './newDashProvider';
2
- export { default as NewDashCmafLiveProvider } from './newDashCmafLiveProvider';
@@ -1,19 +0,0 @@
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 {};
@@ -1,23 +0,0 @@
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
- }
@@ -1,117 +0,0 @@
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
- }
@@ -1,59 +0,0 @@
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;
@@ -1,13 +0,0 @@
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;
@@ -1,3 +0,0 @@
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;
@@ -1,3 +0,0 @@
1
- import { Manifest } from '../types';
2
- export declare const replaceSegmentTemplate: (template: string, data: Partial<Record<"representationId" | "segmentNumber" | "bandwidth" | "segmentTime", string>>) => string;
3
- export declare const parse: (text: string, manifestUrl: string) => Manifest;
@@ -1,20 +0,0 @@
1
- import { type Box } from '../../../../../providers/DashProviderNew/lib/parsers/mpeg/box';
2
- /**
3
- * Queryable object to get needed boxes from structure
4
- */
5
- export declare class BoxModel {
6
- private readonly index;
7
- constructor(initialSet: Box[]);
8
- /**
9
- * Processes index creation
10
- */
11
- private indexBoxLevel;
12
- /**
13
- * Returns first box of given type
14
- */
15
- find<T extends Box>(type: string): T | null;
16
- /**
17
- * Returns all boxes of given typoe
18
- */
19
- findAll<T extends Box>(type: string): T[];
20
- }
@@ -1,21 +0,0 @@
1
- import { type Box } from '../../../../../providers/DashProviderNew/lib/parsers/mpeg/box';
2
- import { BoxTypeEnum } from '../../../../../providers/DashProviderNew/lib/parsers/mpeg/BoxTypeEnum';
3
- export declare const BOX_TYPE_MAP: Record<BoxTypeEnum, typeof Box>;
4
- export interface BoxParserOptions {
5
- offset: number;
6
- }
7
- /**
8
- * Box parsing object
9
- */
10
- export declare class BoxParser {
11
- private options;
12
- constructor(opts?: Partial<BoxParserOptions>);
13
- /**
14
- * Parses DataView into the set of boxes
15
- */
16
- parse(view: DataView): Box[];
17
- /**
18
- * Creates boxes from source DataView with exact type
19
- */
20
- private createBox;
21
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * 'Known' box types
3
- */
4
- export declare enum BoxTypeEnum {
5
- FtypBox = "ftyp",
6
- MoovBox = "moov",
7
- MvhdBox = "mvhd",
8
- MoofBox = "moof",
9
- MdatBox = "mdat",
10
- SidxBox = "sidx",
11
- TrakBox = "trak",
12
- MdiaBox = "mdia",
13
- MfhdBox = "mfhd",
14
- TkhdBox = "tkhd",
15
- TrafBox = "traf",
16
- TfhdBox = "tfhd",
17
- TfdtBox = "tfdt",
18
- TrunBox = "trun",
19
- MinfBox = "minf",
20
- Sv3dBox = "sv3d",
21
- St3dBox = "st3d",
22
- PrhdBox = "prhd",
23
- ProjBox = "proj",
24
- EquiBox = "equi",
25
- UuidBox = "uuid",
26
- StblBox = "stbl",
27
- StsdBox = "stsd",
28
- Avc1Box = "avc1",
29
- UnknownBox = "unknown"
30
- }