@vkontakte/videoplayer-core 2.0.148-dev.f4244a7e.0 → 2.0.149-dev.a444d83a.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 (57) hide show
  1. package/es2015.cjs.js +55 -51
  2. package/es2015.esm.js +53 -49
  3. package/es2018.cjs.js +53 -49
  4. package/es2018.esm.js +53 -49
  5. package/es2024.cjs.js +52 -48
  6. package/es2024.esm.js +55 -51
  7. package/esnext.cjs.js +52 -48
  8. package/esnext.esm.js +55 -51
  9. package/evergreen.esm.js +46 -42
  10. package/package.json +2 -2
  11. package/types/player/Player.d.ts +1 -0
  12. package/types/player/types.d.ts +7 -1
  13. package/types/providers/ChromecastPresentationApiProvider/ChromecastPresentationApiConnector.d.ts +124 -0
  14. package/types/providers/ChromecastPresentationApiProvider/ChromecastPresentationApiInitializer.d.ts +25 -0
  15. package/types/providers/ChromecastPresentationApiProvider/ChromecastPresentationApiProvider.d.ts +36 -0
  16. package/types/providers/ChromecastPresentationApiProvider/ProgressTicker.d.ts +11 -0
  17. package/types/providers/ChromecastPresentationApiProvider/index.d.ts +3 -0
  18. package/types/providers/ChromecastPresentationApiProvider/types.d.ts +49 -0
  19. package/types/providers/ChromecastPresentationApiProvider/utils.d.ts +4 -0
  20. package/types/providers/ChromecastProvider/ChromecastInitializer/index.d.ts +2 -10
  21. package/types/providers/ChromecastProvider/ChromecastInitializer/types.d.ts +8 -1
  22. package/types/providers/ChromecastProvider/index.d.ts +2 -10
  23. package/types/providers/ChromecastProvider/types.d.ts +8 -0
  24. package/types/providers/ChromecastProvider/utils.d.ts +2 -0
  25. package/types/providers/DashLiveProvider/utils/LiveDashPlayer.d.ts +1 -0
  26. package/types/providers/DashProvider/lib/fetcher.d.ts +0 -1
  27. package/types/providers/DashProvider/lib/sourceBufferTaskQueue.d.ts +2 -1
  28. package/types/providers/DashProviderNew/lib/fetcher.d.ts +0 -1
  29. package/types/providers/DashProviderNew/lib/sourceBufferTaskQueue.d.ts +2 -1
  30. package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +61 -0
  31. package/types/providers/DashProviderVirtual/consts.d.ts +3 -0
  32. package/types/providers/DashProviderVirtual/dashCmafLiveProvider.d.ts +10 -0
  33. package/types/providers/DashProviderVirtual/dashProvider.d.ts +8 -0
  34. package/types/providers/DashProviderVirtual/index.d.ts +2 -0
  35. package/types/providers/DashProviderVirtual/lib/ElementSizeManager.d.ts +19 -0
  36. package/types/providers/DashProviderVirtual/lib/LiveTextManager.d.ts +23 -0
  37. package/types/providers/DashProviderVirtual/lib/buffer/nativeBufferManager.d.ts +19 -0
  38. package/types/providers/DashProviderVirtual/lib/buffer/sourceBufferTaskQueue.d.ts +19 -0
  39. package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +46 -0
  40. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +93 -0
  41. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/byteRangeVirtualBufferManager.d.ts +21 -0
  42. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/liveVirtualBuffer.d.ts +27 -0
  43. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/templateVirtualBufferManager.d.ts +21 -0
  44. package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/virtualBufferFactory.d.ts +6 -0
  45. package/types/providers/DashProviderVirtual/lib/fetcher.d.ts +63 -0
  46. package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +100 -0
  47. package/types/providers/DashProviderVirtual/lib/player/livePlayer.d.ts +36 -0
  48. package/types/providers/DashProviderVirtual/lib/player/player.d.ts +11 -0
  49. package/types/providers/DashProviderVirtual/lib/player/types.d.ts +17 -0
  50. package/types/providers/DashProviderVirtual/lib/types.d.ts +29 -0
  51. package/types/providers/DashProviderVirtual/lib/utils.d.ts +14 -0
  52. package/types/providers/types.d.ts +1 -0
  53. package/types/providers/utils/debug.d.ts +16 -0
  54. package/types/providers/utils/mergeIntervals.d.ts +3 -0
  55. package/types/providers/utils/parsers/types.d.ts +28 -7
  56. package/types/utils/ClientChecker/services/DeviceChecker.d.ts +19 -0
  57. package/types/utils/tuningConfig.d.ts +11 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/videoplayer-core",
3
- "version": "2.0.148-dev.f4244a7e.0",
3
+ "version": "2.0.149-dev.a444d83a.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,6 +54,6 @@
54
54
  "**/*.d.ts"
55
55
  ],
56
56
  "dependencies": {
57
- "@vkontakte/videoplayer-shared": "1.0.76-dev.f4244a7e.0"
57
+ "@vkontakte/videoplayer-shared": "1.0.78-dev.a444d83a.0"
58
58
  }
59
59
  }
@@ -44,6 +44,7 @@ export default class Player implements IPlayer {
44
44
  isAudioAvailable$: ValueSubject<boolean>;
45
45
  currentPlaybackRate$: ValueSubject<number>;
46
46
  currentBuffer$: ValueSubject<StartEnd<number>>;
47
+ currentNativeBuffer$: ValueSubject<StartEnd<number>>;
47
48
  isBuffering$: ValueSubject<boolean>;
48
49
  isStalled$: ValueSubject<boolean>;
49
50
  isEnded$: ValueSubject<boolean>;
@@ -317,11 +317,17 @@ export interface IPlayerInfo {
317
317
  */
318
318
  currentPlaybackRate$: IValueObservable<PlaybackRate>;
319
319
  /**
320
- * Текущий буффер (тот, который содержит текущую позицию воспроизведения)
320
+ * Текущий буффер плеера (тот, который содержит текущую позицию воспроизведения)
321
321
  *
322
322
  * default value: `undefined`
323
323
  */
324
324
  currentBuffer$: IValueObservable<StartEnd<Seconds> | undefined>;
325
+ /**
326
+ * Текущий браузерный буффер (тот, который содержит текущую позицию воспроизведения)
327
+ *
328
+ * default value: `undefined`
329
+ */
330
+ currentNativeBuffer$: IValueObservable<StartEnd<Seconds> | undefined>;
325
331
  /**
326
332
  * Статус буферизации видео. true если буфер пустой и воспроизведение прервано
327
333
  * В отличии от isStalled показывает и буферизации на старте и после перемотки
@@ -0,0 +1,124 @@
1
+ import { IError, ILogger, ISubject, IValueSubject } from '@vkontakte/videoplayer-shared';
2
+ interface IParams {
3
+ appId: string;
4
+ logger: ILogger;
5
+ }
6
+ export declare class ChromecastPresentationApiConnector {
7
+ protected readonly params: IParams;
8
+ private readonly clientId;
9
+ private readonly capabilities;
10
+ private readonly presentationRequest$;
11
+ private readonly log;
12
+ private readonly sessionId$;
13
+ private readonly broadcastChannel;
14
+ private readonly subscription;
15
+ private subscriptionEvents;
16
+ private isDestroyed;
17
+ private sequenceNumber;
18
+ readonly presentationAvailable$: IValueSubject<boolean>;
19
+ readonly presentationConnection$: IValueSubject<PresentationConnection | null>;
20
+ readonly message$: IValueSubject<PresentationConnectionMessages | null>;
21
+ readonly friendlyName$: IValueSubject<string | null>;
22
+ readonly errorEvent$: ISubject<IError>;
23
+ constructor(params: IParams);
24
+ destroy(): void;
25
+ /**
26
+ * в случае перехвата соединения другим плеером важно не останавливать медийку,
27
+ * иначе прервется кастинг у того плеера, который его запустил
28
+ */
29
+ disconnect(withStopMedia?: boolean): void;
30
+ /**
31
+ * нужно вызывать перед `disconnect`, потому что если хромкаст был инициализирован на чужом соединении
32
+ * (те успешно сработал `presentationRequest.reconnect('auto-join')`), то `presentationConnection.close()`
33
+ * не отключит медийку на девайсе, если до этого оно не стояло на `PAUSE` или `STOP` (сделал через `STOP`,
34
+ * в итоге, для обратной совместимости с обвязкой для гуглового сдк)
35
+ */
36
+ stopMedia(): void;
37
+ /**
38
+ * @param reconnect включает попытку восстановить соединение через `.reconnect('auto-join')`
39
+ */
40
+ private reinitPresentation;
41
+ /** должен быть инициализирован с user-input'ом */
42
+ connect(): Promise<void>;
43
+ private subscribe;
44
+ private send;
45
+ sendV2Message(message: object): void;
46
+ private safeSend;
47
+ private handleMessage;
48
+ private createCastUrl;
49
+ private getSequenceNumber;
50
+ private resetSequenceNumber;
51
+ private getClientId;
52
+ private resetSubscriptionEvents;
53
+ private handleConnection;
54
+ }
55
+ declare global {
56
+ interface Window {
57
+ __vk_player_chromecast_id?: string;
58
+ }
59
+ interface Navigator {
60
+ presentation: {
61
+ defaultRequest: PresentationRequest | null;
62
+ };
63
+ }
64
+ type PresentationUrls = string | string[];
65
+ type PresentationConnectionState = 'connecting' | 'connected' | 'closed' | 'terminated';
66
+ class PresentationRequest extends EventTarget {
67
+ constructor(presentationUrls: PresentationUrls | undefined);
68
+ start(): Promise<PresentationConnection>;
69
+ reconnect(presentationId: string): Promise<PresentationConnection>;
70
+ getAvailability(): Promise<PresentationAvailability>;
71
+ onconnectionavailable: ((this: PresentationRequest, ev: PresentationConnectionAvailableEvent) => void) | null;
72
+ }
73
+ class PresentationConnection extends EventTarget {
74
+ readonly id: string;
75
+ readonly state: PresentationConnectionState;
76
+ onclose: ((this: PresentationConnection, ev: PresentationConnectionCloseEvent) => void) | null;
77
+ onconnect: ((this: PresentationConnection) => void) | null;
78
+ onmessage: ((this: PresentationConnection, ev: PresentationConnectionMessageEvent) => void) | null;
79
+ onterminate: ((this: PresentationConnection) => void) | null;
80
+ send: (data: string) => void;
81
+ terminate: () => void;
82
+ close: () => void;
83
+ }
84
+ interface PresentationAvailability extends EventTarget {
85
+ value: boolean;
86
+ onchange: ((this: PresentationAvailability, ev: Event) => void) | null;
87
+ }
88
+ interface PresentationConnectionAvailableEvent extends Event {
89
+ readonly connection: PresentationConnection;
90
+ }
91
+ interface PresentationConnectionCloseEvent extends Event {
92
+ readonly reason: 'closed' | 'error';
93
+ }
94
+ interface PresentationConnectionMessageEvent extends Event {
95
+ readonly data: string;
96
+ }
97
+ }
98
+ interface PresentationConnectionMessage {
99
+ clientId: string;
100
+ timeoutMillis: number;
101
+ }
102
+ interface PresentationConnectionMessageReceiverAction extends PresentationConnectionMessage {
103
+ type: 'receiver_action';
104
+ message: {
105
+ action: 'cast' | 'stop';
106
+ receiver: chrome.cast.Receiver;
107
+ };
108
+ }
109
+ interface PresentationConnectionMessageSession extends PresentationConnectionMessage {
110
+ type: 'new_session' | 'update_session';
111
+ message: chrome.cast.Session;
112
+ }
113
+ interface PresentationConnectionMessageV2Message extends PresentationConnectionMessage {
114
+ type: 'v2_message';
115
+ message: PresentationConnectionMessageV2MessageMessage;
116
+ }
117
+ interface PresentationConnectionMessageV2MessageMessage {
118
+ type: 'MEDIA_STATUS';
119
+ requestId: number;
120
+ sessionId: string;
121
+ status: chrome.cast.media.Media[];
122
+ }
123
+ export type PresentationConnectionMessages = PresentationConnectionMessageReceiverAction | PresentationConnectionMessageSession | PresentationConnectionMessageV2Message;
124
+ export {};
@@ -0,0 +1,25 @@
1
+ import { ChromecastState } from '../../player/types';
2
+ import { IError, IValueSubject, ISubject } from '@vkontakte/videoplayer-shared';
3
+ import { IChromecastConnection } from '../ChromecastProvider/ChromecastInitializer/types';
4
+ import { ChromecastPresentationApiConnector } from './ChromecastPresentationApiConnector';
5
+ import { IChromecastPresentationApiInitializer } from './types';
6
+ import { IParams } from '../ChromecastProvider/ChromecastInitializer/types';
7
+ export declare class ChromecastPresentationApiInitializer implements IChromecastPresentationApiInitializer {
8
+ private readonly subscription;
9
+ private readonly log;
10
+ contentId?: string | undefined;
11
+ readonly connection$: IValueSubject<IChromecastConnection | undefined>;
12
+ readonly castState$: IValueSubject<ChromecastState>;
13
+ readonly errorEvent$: ISubject<IError>;
14
+ readonly chromecastConnector: ChromecastPresentationApiConnector | undefined;
15
+ static isSupported(): boolean;
16
+ constructor(params: IParams);
17
+ private subscribe;
18
+ connect(): void;
19
+ disconnect(): void;
20
+ stopMedia(): Promise<void>;
21
+ toggleConnection(): void;
22
+ setVolume(_volume: number): void;
23
+ setMuted(_muted: boolean): void;
24
+ destroy(): void;
25
+ }
@@ -0,0 +1,36 @@
1
+ import { IProvider } from '../types';
2
+ import { IParams } from './types';
3
+ export declare class ChromecastPresentationApiProvider implements IProvider {
4
+ private readonly subscription;
5
+ private readonly log;
6
+ private readonly params;
7
+ private readonly sessionId$;
8
+ private readonly mediaSessionId$;
9
+ private readonly contentId$;
10
+ private readonly progressTicker;
11
+ private readonly isMobile;
12
+ private readonly mobileVolumeState;
13
+ private media;
14
+ private lastRequestedVolume;
15
+ constructor(params: IParams);
16
+ private subscribe;
17
+ private handleMessage;
18
+ /**
19
+ * ключевая проблема хромкаста - синхронизировать состояния плеера, потому что
20
+ * устройством может управлять не только текущая вкладка браузера, но и любая
21
+ * другая как вкладка, так и устройство. поэтому мы считаем, что если доехали
22
+ * до этапа инициализации провадера, то форсим именно нашу медийку с нашим уникальным
23
+ * айдишником.
24
+ */
25
+ private loadMedia;
26
+ private stop;
27
+ private play;
28
+ private pause;
29
+ private seek;
30
+ private setVolume;
31
+ private syncPlaybackState;
32
+ private syncPlayback;
33
+ private syncMediaState;
34
+ private syncVolumeState;
35
+ destroy(): void;
36
+ }
@@ -0,0 +1,11 @@
1
+ import { IParams } from './types';
2
+ export declare class ProgressTicker {
3
+ private readonly params;
4
+ private interval;
5
+ private startVideoPosition;
6
+ private startTs;
7
+ constructor(params: Pick<IParams, 'output'>);
8
+ start(from?: number): void;
9
+ pause(): void;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1,3 @@
1
+ export { ChromecastPresentationApiProvider } from './ChromecastPresentationApiProvider';
2
+ export { ChromecastPresentationApiConnector } from './ChromecastPresentationApiConnector';
3
+ export { ChromecastPresentationApiInitializer } from './ChromecastPresentationApiInitializer';
@@ -0,0 +1,49 @@
1
+ import { IChromecastInitializer } from '../ChromecastProvider/ChromecastInitializer/types';
2
+ import type { IParams as IParamsChromecastProvider } from '../ChromecastProvider/types';
3
+ import { ChromecastPresentationApiConnector } from './ChromecastPresentationApiConnector';
4
+ export declare enum ProviderState {
5
+ STOPPED = "stopped",
6
+ READY = "ready",
7
+ PLAYING = "playing",
8
+ PAUSED = "paused"
9
+ }
10
+ export declare enum PlayerState {
11
+ IDLE = "IDLE",
12
+ PLAYING = "PLAYING",
13
+ PAUSED = "PAUSED",
14
+ BUFFERING = "BUFFERING"
15
+ }
16
+ export interface IChromecastPresentationApiInitializer extends IChromecastInitializer {
17
+ chromecastConnector?: ChromecastPresentationApiConnector;
18
+ }
19
+ export interface IParams extends Omit<IParamsChromecastProvider, 'connection'> {
20
+ chromecastConnector: ChromecastPresentationApiConnector;
21
+ }
22
+ /**
23
+ * @see https://developers.google.com/cast/docs/reference/chrome/chrome.cast#.DefaultActionPolicy
24
+ */
25
+ export declare enum DefaultActionPolicy {
26
+ CREATE_SESSION = "create_session",
27
+ CAST_THIS_TAB = "cast_this_tab"
28
+ }
29
+ /**
30
+ * @see https://developers.google.com/cast/docs/reference/chrome/chrome.cast#.AutoJoinPolicy
31
+ */
32
+ export declare enum AutoJoinPolicy {
33
+ CUSTOM_CONTROLLER_SCOPED = "custom_controller_scoped",
34
+ TAB_AND_ORIGIN_SCOPED = "tab_and_origin_scoped",
35
+ ORIGIN_SCOPED = "origin_scoped",
36
+ PAGE_SCOPED = "page_scoped"
37
+ }
38
+ /**
39
+ * @see https://developers.google.com/cast/docs/reference/chrome/chrome.cast.media#.IdleReason
40
+ */
41
+ export declare enum IdleReason {
42
+ CANCELLED = "CANCELLED",
43
+ INTERRUPTED = "INTERRUPTED",
44
+ FINISHED = "FINISHED",
45
+ ERROR = "ERROR"
46
+ }
47
+ export declare enum BroadcastChannelEventName {
48
+ Connection = "connection"
49
+ }
@@ -0,0 +1,4 @@
1
+ import { IChromecastConnection } from '../ChromecastProvider/ChromecastInitializer/types';
2
+ export declare const createFakeChromecastConnection: (friendlyName: string) => IChromecastConnection;
3
+ /** скопировал из сдк гугла */
4
+ export declare const createId: () => string;
@@ -1,13 +1,6 @@
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
- import { IChromecastConnection, IChromecastInitializer } from './types';
4
- interface IParams {
5
- receiverApplicationId?: string;
6
- isDisabled?: boolean;
7
- dependencies: {
8
- logger: ILogger;
9
- };
10
- }
3
+ import { IChromecastConnection, IChromecastInitializer, IParams } from './types';
11
4
  export declare class ChromecastInitializer implements IChromecastInitializer {
12
5
  readonly connection$: IValueSubject<IChromecastConnection | undefined>;
13
6
  readonly castState$: IValueSubject<ChromecastState>;
@@ -29,4 +22,3 @@ export declare class ChromecastInitializer implements IChromecastInitializer {
29
22
  private initListeners;
30
23
  private initializeCastApi;
31
24
  }
32
- export {};
@@ -1,4 +1,4 @@
1
- import { IObservable, IValueObservable, IError } from '@vkontakte/videoplayer-shared';
1
+ import { IObservable, IValueObservable, IError, ILogger } from '@vkontakte/videoplayer-shared';
2
2
  import { ChromecastState } from '../../../player/types';
3
3
  export interface IChromecastInitializer {
4
4
  connect(): void;
@@ -19,3 +19,10 @@ export interface IChromecastConnection {
19
19
  session: cast.framework.CastSession;
20
20
  castDevice: chrome.cast.Receiver;
21
21
  }
22
+ export interface IParams {
23
+ receiverApplicationId?: string;
24
+ isDisabled?: boolean;
25
+ dependencies: {
26
+ logger: ILogger;
27
+ };
28
+ }
@@ -1,11 +1,5 @@
1
- import { IMetadata, ISources, VideoFormat } from '../../player/types';
2
- import { IChromecastConnection } from '../../providers/ChromecastProvider/ChromecastInitializer/types';
3
- import { IProvider, IProviderParams } from '../types';
4
- interface IParams extends IProviderParams<ISources> {
5
- meta: IMetadata;
6
- format: VideoFormat;
7
- connection: IChromecastConnection;
8
- }
1
+ import { IProvider } from '../types';
2
+ import { IParams } from './types';
9
3
  export default class ChromecastProvider implements IProvider {
10
4
  private subscription;
11
5
  private loadMediaTimeoutSubscription;
@@ -24,10 +18,8 @@ export default class ChromecastProvider implements IProvider {
24
18
  private handleRemoteVolumeChange;
25
19
  private seek;
26
20
  private stop;
27
- private createMediaInfo;
28
21
  private createLoadRequest;
29
22
  private loadMedia;
30
23
  private logRemoteEvent;
31
24
  private syncPlayback;
32
25
  }
33
- export {};
@@ -0,0 +1,8 @@
1
+ import { IMetadata, ISources, VideoFormat } from '../../player/types';
2
+ import { IProviderParams } from '../types';
3
+ import { IChromecastConnection } from './ChromecastInitializer/types';
4
+ export interface IParams extends IProviderParams<ISources> {
5
+ meta: IMetadata;
6
+ format: VideoFormat;
7
+ connection: IChromecastConnection;
8
+ }
@@ -0,0 +1,2 @@
1
+ import { IParams } from './types';
2
+ export declare const createMediaInfo: (params: Pick<IParams, "meta" | "format" | "output" | "source">) => chrome.cast.media.MediaInfo;
@@ -20,6 +20,7 @@ interface IParams {
20
20
  manifestRetryInterval: number;
21
21
  manifestRetryMaxInterval: number;
22
22
  manifestRetryMaxCount: number;
23
+ useInvalidBufferFix: boolean;
23
24
  };
24
25
  logger: (...args: any[]) => void;
25
26
  }
@@ -40,7 +40,6 @@ export declare class Fetcher {
40
40
  private tracer;
41
41
  manifestRequested$: ISubject<void>;
42
42
  firstBytesManifest$: ISubject<void>;
43
- manifestReceived$: ISubject<void>;
44
43
  firstBytesRequested$: ISubject<void>;
45
44
  firstBytesReceived$: ISubject<void>;
46
45
  lastConnectionType$: IValueSubject<HttpConnectionType | undefined>;
@@ -7,7 +7,8 @@ declare class SourceBufferTaskQueue {
7
7
  private currentTask;
8
8
  private destroyed;
9
9
  private abortRequested;
10
- constructor(buffer: SourceBuffer);
10
+ private isAbortFixEnabled;
11
+ constructor(buffer: SourceBuffer, isAbortFixEnabled?: boolean);
11
12
  append(data: BufferSource, signal?: AbortSignal): Promise<boolean>;
12
13
  remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
13
14
  abort(init?: BufferSource): Promise<boolean>;
@@ -39,7 +39,6 @@ export declare class Fetcher {
39
39
  private tracer;
40
40
  manifestRequested$: ISubject<void>;
41
41
  firstBytesManifest$: ISubject<void>;
42
- manifestReceived$: ISubject<void>;
43
42
  firstBytesRequested$: ISubject<void>;
44
43
  firstBytesReceived$: ISubject<void>;
45
44
  lastConnectionType$: IValueSubject<HttpConnectionType | undefined>;
@@ -7,7 +7,8 @@ declare class SourceBufferTaskQueue {
7
7
  private currentTask;
8
8
  private destroyed;
9
9
  private abortRequested;
10
- constructor(buffer: SourceBuffer);
10
+ private isAbortFixEnabled;
11
+ constructor(buffer: SourceBuffer, isAbortFixEnabled?: boolean);
11
12
  append(data: BufferSource, signal?: AbortSignal): Promise<boolean>;
12
13
  remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
13
14
  abort(init?: BufferSource): Promise<boolean>;
@@ -0,0 +1,61 @@
1
+ import { IAudioTrack, IDashURLSource, IHLSSource, IInternalTextTrack, IVideoTrack, VideoCodec } from '../../player/types';
2
+ import { IProviderSubscriptionInfo, ProviderState } from './lib/types';
3
+ import { CommonInit, Representation, Stream } from '../../providers/utils/parsers/types';
4
+ import { IProvider, IProviderParams } from '../../providers/types';
5
+ import { IObservableVideo } from '../../providers/utils/HTMLVideoElement/observable';
6
+ import { TrackHistory } from '../../utils/autoSelectTrack';
7
+ import { IStateMachine } from '../../utils/StateMachine/types';
8
+ import { ISubscription, ITracer, Milliseconds } from '@vkontakte/videoplayer-shared';
9
+ import { Scene3D } from '../../utils/3d/Scene3D';
10
+ import DroppedFramesManager from '../../providers/utils/HTMLVideoElement/DroppedFramesManager';
11
+ import TextTrackManager from '../../providers/utils/HTMLVideoElement/TextTrackManager';
12
+ import StallsManager from '../../providers/utils/StallsManager';
13
+ import { ElementSizeManager } from './lib/ElementSizeManager';
14
+ import { BasePlayer } from '../../providers/DashProviderVirtual/lib/player/basePlayer';
15
+ type IParams = IProviderParams<IDashURLSource> & {
16
+ sourceHls?: IHLSSource;
17
+ forceVideoCodec?: VideoCodec;
18
+ };
19
+ export default abstract class BaseDashProvider implements IProvider {
20
+ scene3D: Scene3D | undefined;
21
+ protected subscription: ISubscription;
22
+ protected videoState: IStateMachine<ProviderState>;
23
+ protected video: HTMLVideoElement;
24
+ protected observableVideo: IObservableVideo | null;
25
+ protected player: BasePlayer;
26
+ protected params: IParams;
27
+ protected tracer: ITracer;
28
+ protected textTracksManager: TextTrackManager;
29
+ protected droppedFramesManager: DroppedFramesManager;
30
+ protected stallsManager: StallsManager;
31
+ protected elementSizeManager: ElementSizeManager;
32
+ protected videoTracksMap: Map<IVideoTrack, {
33
+ stream: Stream;
34
+ representation: Representation;
35
+ }>;
36
+ protected audioTracksMap: Map<IAudioTrack, {
37
+ stream: Stream;
38
+ representation: Representation;
39
+ }>;
40
+ protected textTracksMap: Map<IInternalTextTrack, {
41
+ stream: Stream;
42
+ representation: Representation;
43
+ }>;
44
+ protected videoStreamsMap: Map<Stream, IVideoTrack[]>;
45
+ protected audioStreamsMap: Map<Stream, IAudioTrack[]>;
46
+ protected videoTrackSwitchHistory: TrackHistory<IVideoTrack>;
47
+ protected audioTrackSwitchHistory: TrackHistory<import("../../player/types").IBaseTrack>;
48
+ constructor(params: IParams);
49
+ protected abstract seek(position: Milliseconds, forcePrecise: boolean): void;
50
+ protected abstract getPlayer(): BasePlayer;
51
+ protected getProviderSubscriptionInfo(): IProviderSubscriptionInfo;
52
+ protected subscribe(): void;
53
+ protected selectVideoAudioRepresentations(): [Representation, Representation | undefined] | undefined;
54
+ protected prepare(manifestOffset?: number): void;
55
+ protected syncPlayback: () => undefined;
56
+ protected init3DScene: (init: CommonInit) => void;
57
+ protected destroy3DScene: () => void;
58
+ protected playIfAllowed(): void;
59
+ destroy(): void;
60
+ }
61
+ 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,10 @@
1
+ import { Milliseconds } from '@vkontakte/videoplayer-shared';
2
+ import { IParams } from './lib/types';
3
+ import BaseDashProvider from './baseDashProvider';
4
+ import { LivePlayer } from '../../providers/DashProviderVirtual/lib/player/livePlayer';
5
+ export default class DashCmafLiveProvider extends BaseDashProvider {
6
+ constructor(params: IParams);
7
+ protected getPlayer(): LivePlayer;
8
+ protected subscribe(): void;
9
+ protected seek(position: Milliseconds): void;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { Milliseconds } from '@vkontakte/videoplayer-shared';
2
+ import BaseDashProvider from './baseDashProvider';
3
+ import { Player } from '../../providers/DashProviderVirtual/lib/player/player';
4
+ export default class DashProvider extends BaseDashProvider {
5
+ protected subscribe(): void;
6
+ protected getPlayer(): Player;
7
+ protected seek(position: Milliseconds, forcePrecise: boolean): void;
8
+ }
@@ -0,0 +1,2 @@
1
+ export { default as DashProvider } from './dashProvider';
2
+ export { default as DashCmafLiveProvider } from './dashCmafLiveProvider';
@@ -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 { Manifest, Stream, TextRepresentation } from '../../../providers/utils/parsers/types';
3
+ import { Dependencies } from '../../../providers/DashProviderVirtual/lib/buffer/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,19 @@
1
+ import { IError, IRange, ISubject, Milliseconds } from '@vkontakte/videoplayer-shared';
2
+ export declare class NativeBufferManager {
3
+ error$: ISubject<IError>;
4
+ private mediaSource;
5
+ private sourceBuffer;
6
+ private sourceBufferTaskQueue;
7
+ private subscription;
8
+ constructor(mediaSource: MediaSource);
9
+ init(mime: string, codecs: string): void;
10
+ addInitSegment(initView: BufferSource, signal?: AbortSignal): Promise<boolean>;
11
+ append(segmentView: BufferSource, signal?: AbortSignal): Promise<boolean>;
12
+ remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
13
+ clear(signal?: AbortSignal): Promise<boolean>;
14
+ warmUpMediaSource(): void;
15
+ getBufferState(): IRange<Milliseconds>[] | null;
16
+ getForwardBufferDuration(currentPosition: Milliseconds | undefined): Milliseconds;
17
+ abortBuffer(init: ArrayBuffer | undefined): Promise<boolean>;
18
+ destroy(): void;
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Byte, IError, ISubject, Milliseconds } from '@vkontakte/videoplayer-shared';
2
+ declare class SourceBufferTaskQueue {
3
+ bufferFull$: ISubject<Byte>;
4
+ error$: ISubject<IError>;
5
+ private buffer;
6
+ private queue;
7
+ private currentTask;
8
+ private destroyed;
9
+ private abortRequested;
10
+ constructor(buffer: SourceBuffer);
11
+ append(data: BufferSource, signal?: AbortSignal): Promise<boolean>;
12
+ remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
13
+ abort(init?: BufferSource): Promise<boolean>;
14
+ destroy(): void;
15
+ private completeTask;
16
+ private pull;
17
+ private execute;
18
+ }
19
+ export default SourceBufferTaskQueue;