@vkontakte/videoplayer-core 2.0.132 → 2.0.133-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es2015.cjs.js +38 -45
- package/es2015.esm.js +36 -43
- package/es2018.cjs.js +43 -50
- package/es2018.esm.js +44 -51
- package/es2024.cjs.js +42 -49
- package/es2024.esm.js +41 -48
- package/esnext.cjs.js +42 -49
- package/esnext.esm.js +41 -48
- package/evergreen.esm.js +52 -59
- package/package.json +2 -2
- package/types/providers/DashProvider/baseDashProvider.d.ts +2 -1
- package/types/providers/DashProvider/lib/LiveTextManager.d.ts +1 -1
- package/types/providers/DashProvider/lib/buffer.d.ts +1 -1
- package/types/providers/DashProvider/lib/fetcher.d.ts +1 -1
- package/types/providers/DashProvider/lib/player.d.ts +2 -1
- package/types/providers/DashProvider/lib/types.d.ts +2 -159
- package/types/providers/DashProvider/lib/utils.d.ts +1 -1
- package/types/providers/DashProviderNew/baseDashProvider.d.ts +2 -1
- package/types/providers/DashProviderNew/lib/LiveTextManager.d.ts +1 -1
- package/types/providers/DashProviderNew/lib/buffer.d.ts +11 -1
- package/types/providers/DashProviderNew/lib/fetcher.d.ts +1 -1
- package/types/providers/DashProviderNew/lib/player.d.ts +2 -1
- package/types/providers/DashProviderNew/lib/sourceBufferBufferedDiff.d.ts +19 -0
- package/types/providers/DashProviderNew/lib/types.d.ts +2 -159
- package/types/providers/DashProviderNew/lib/utils.d.ts +5 -1
- package/types/providers/utils/StallsManager.d.ts +3 -1
- package/types/providers/{DashProvider/lib → utils}/parsers/index.d.ts +1 -1
- package/types/providers/{DashProviderNew/lib → utils}/parsers/mpd.d.ts +1 -1
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/BoxModel.d.ts +4 -4
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/BoxParser.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/box.d.ts +8 -8
- package/types/providers/utils/parsers/mpeg/boxes/avc1.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/equi.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/ftyp.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/index.d.ts +26 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/mdat.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/mdia.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/mfhd.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/minf.d.ts +8 -0
- package/types/providers/utils/parsers/mpeg/boxes/moof.d.ts +8 -0
- package/types/providers/utils/parsers/mpeg/boxes/moov.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/mvhd.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/prhd.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/proj.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/sidx.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/st3d.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/stbl.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/stsd.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/sv3d.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/tfdt.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/tfhd.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/tkhd.d.ts +2 -2
- package/types/providers/utils/parsers/mpeg/boxes/traf.d.ts +8 -0
- package/types/providers/utils/parsers/mpeg/boxes/trak.d.ts +8 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/trun.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/boxes/unknown.d.ts +1 -1
- package/types/providers/utils/parsers/mpeg/boxes/uuid.d.ts +18 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/fullBox.d.ts +2 -2
- package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/isobmff.d.ts +1 -1
- package/types/providers/utils/parsers/types.d.ts +159 -0
- package/types/providers/{DashProvider/lib → utils}/parsers/webm/webm.d.ts +1 -1
- package/types/utils/ClientChecker/services/BrowserChecker.d.ts +3 -0
- package/types/utils/buffer/createTimeRanges.d.ts +1 -0
- package/types/utils/tuningConfig.d.ts +3 -0
- package/types/providers/DashProvider/lib/parsers/mpd.d.ts +0 -3
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/avc1.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/index.d.ts +0 -26
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/mdia.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/minf.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/moof.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/moov.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/proj.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/stbl.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/sv3d.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/traf.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/trak.d.ts +0 -8
- package/types/providers/DashProvider/lib/parsers/mpeg/boxes/uuid.d.ts +0 -11
- package/types/providers/DashProviderNew/lib/parsers/ietf/index.d.ts +0 -13
- package/types/providers/DashProviderNew/lib/parsers/index.d.ts +0 -3
- package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxModel.d.ts +0 -20
- package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxParser.d.ts +0 -21
- package/types/providers/DashProviderNew/lib/parsers/mpeg/BoxTypeEnum.d.ts +0 -30
- package/types/providers/DashProviderNew/lib/parsers/mpeg/box.d.ts +0 -74
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/avc1.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/equi.d.ts +0 -21
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/ftyp.d.ts +0 -17
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/index.d.ts +0 -26
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdat.d.ts +0 -15
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mdia.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mfhd.d.ts +0 -11
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/minf.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moof.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/moov.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/mvhd.d.ts +0 -35
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/prhd.d.ts +0 -16
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/proj.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sidx.d.ts +0 -48
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/st3d.d.ts +0 -23
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stbl.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/stsd.d.ts +0 -11
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/sv3d.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfdt.d.ts +0 -17
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tfhd.d.ts +0 -22
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/tkhd.d.ts +0 -42
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/traf.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trak.d.ts +0 -8
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/trun.d.ts +0 -31
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/unknown.d.ts +0 -6
- package/types/providers/DashProviderNew/lib/parsers/mpeg/boxes/uuid.d.ts +0 -11
- package/types/providers/DashProviderNew/lib/parsers/mpeg/fullBox.d.ts +0 -15
- package/types/providers/DashProviderNew/lib/parsers/mpeg/isobmff.d.ts +0 -12
- package/types/providers/DashProviderNew/lib/parsers/webm/ebml.d.ts +0 -76
- package/types/providers/DashProviderNew/lib/parsers/webm/webm.d.ts +0 -3
- /package/types/providers/{DashProvider/lib → utils}/parsers/ietf/index.d.ts +0 -0
- /package/types/providers/{DashProvider/lib → utils}/parsers/mpeg/BoxTypeEnum.d.ts +0 -0
- /package/types/providers/{DashProvider/lib → utils}/parsers/webm/ebml.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.133-beta.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.
|
|
57
|
+
"@vkontakte/videoplayer-shared": "1.0.61-beta.0",
|
|
58
58
|
"hls.js": "~1.4.7"
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IAudioTrack, IDashURLSource, IHLSSource, IInternalTextTrack, IVideoTrack } from '../../player/types';
|
|
2
|
-
import {
|
|
2
|
+
import { IProviderSubscriptionInfo, ProviderState } from './lib/types';
|
|
3
|
+
import { CommonInit, Representation, Stream } from '../../providers/utils/parsers/types';
|
|
3
4
|
import { IProvider, IProviderParams } from '../../providers/types';
|
|
4
5
|
import { TrackHistory } from '../../utils/autoSelectTrack';
|
|
5
6
|
import { IStateMachine } from '../../utils/StateMachine/types';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
|
|
2
2
|
import { Dependencies } from './buffer';
|
|
3
|
-
import { Manifest, Stream, TextRepresentation } from '
|
|
3
|
+
import { Manifest, Stream, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
4
4
|
export declare class LiveTextManager {
|
|
5
5
|
currentRepresentation$: IValueSubject<TextRepresentation | null>;
|
|
6
6
|
private readonly maxRepresentations;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ITuningConfig } from '../../../utils/tuningConfig';
|
|
2
2
|
import { IError, IRange, ISubject, IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
|
|
3
3
|
import type { Fetcher } from './fetcher';
|
|
4
|
-
import { CommonInit, Manifest, Representation, Stream, StreamKind } from '
|
|
4
|
+
import { CommonInit, Manifest, Representation, Stream, StreamKind } from '../../../providers/utils/parsers/types';
|
|
5
5
|
export interface Dependencies {
|
|
6
6
|
fetcher: Fetcher;
|
|
7
7
|
tuning: ITuningConfig;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpConnectionType } from '../../../player/types';
|
|
2
2
|
import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
|
|
3
3
|
import { Byte, IValueSubject, Milliseconds, IRange, Subject, ITracer, IError } from '@vkontakte/videoplayer-shared';
|
|
4
|
-
import { CommonInit, GenericContainerParser, Segment, SegmentReference } from '
|
|
4
|
+
import { CommonInit, GenericContainerParser, Segment, SegmentReference } from '../../../providers/utils/parsers/types';
|
|
5
5
|
export declare enum RangeMethod {
|
|
6
6
|
HEADER = 0,
|
|
7
7
|
PARAM = 1
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpConnectionType } from '../../../player/types';
|
|
2
|
-
import {
|
|
2
|
+
import { LiveStreamStatus } from './types';
|
|
3
|
+
import { CommonInit, Manifest, Representation, StreamKind, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
3
4
|
import StateMachine from '../../../utils/StateMachine/StateMachine';
|
|
4
5
|
import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
|
|
5
6
|
import { ITuningConfig } from '../../../utils/tuningConfig';
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IObservable, ISubject, IValueSubject } from '@vkontakte/videoplayer-shared';
|
|
2
2
|
import { IDesiredState, IProviderOutput, IProviderParams } from '../../../providers/types';
|
|
3
3
|
import { IObservableVideo } from '../../../providers/utils/HTMLVideoElement/observable';
|
|
4
|
-
import { IDashURLSource
|
|
5
|
-
export declare enum StreamKind {
|
|
6
|
-
VIDEO = "video",
|
|
7
|
-
AUDIO = "audio",
|
|
8
|
-
TEXT = "text"
|
|
9
|
-
}
|
|
4
|
+
import { IDashURLSource } from '../../../player/types';
|
|
10
5
|
export declare enum LiveStatus {
|
|
11
6
|
ActiveLowLatency = "active_low_latency",
|
|
12
7
|
LiveWithTargetOffset = "live_with_target_offset",
|
|
@@ -18,150 +13,6 @@ export declare enum LiveStreamStatus {
|
|
|
18
13
|
UnexpectedlyDown = "unexpectedly_down",// Стрим в сети, но трансляция оборвалась из-за тех. проблем
|
|
19
14
|
Unpublished = "unpublished"
|
|
20
15
|
}
|
|
21
|
-
export declare enum Profile {
|
|
22
|
-
WEBM_AS_IN_SPEC = "urn:mpeg:dash:profile:webm-on-demand:2012",// Такой указан в спеке
|
|
23
|
-
WEBM_AS_IN_FFMPEG = "urn:webm:dash:profile:webm-on-demand:2012"
|
|
24
|
-
}
|
|
25
|
-
export interface Representation {
|
|
26
|
-
id: string;
|
|
27
|
-
kind: StreamKind;
|
|
28
|
-
segmentReference: SegmentReference;
|
|
29
|
-
profiles: Array<Profile | string>;
|
|
30
|
-
duration?: Milliseconds;
|
|
31
|
-
bitrate: Kbps;
|
|
32
|
-
mime: string;
|
|
33
|
-
codecs: string;
|
|
34
|
-
width: number;
|
|
35
|
-
height: number;
|
|
36
|
-
fps?: number;
|
|
37
|
-
quality?: string;
|
|
38
|
-
streamId?: IVideoStream['id'];
|
|
39
|
-
}
|
|
40
|
-
export interface TextRepresentation extends Representation {
|
|
41
|
-
language: string;
|
|
42
|
-
label: string;
|
|
43
|
-
url: string;
|
|
44
|
-
isAuto: boolean;
|
|
45
|
-
}
|
|
46
|
-
export interface ServerLatencyTimestamps {
|
|
47
|
-
serverDataReceivedTimestamp?: Milliseconds;
|
|
48
|
-
serverDataPreparedTime?: Milliseconds;
|
|
49
|
-
}
|
|
50
|
-
export declare enum SegmentReferencingType {
|
|
51
|
-
BYTE_RANGE = "byteRange",
|
|
52
|
-
TEMPLATE = "template"
|
|
53
|
-
}
|
|
54
|
-
export type ByteRangeSegmentReference = {
|
|
55
|
-
type: SegmentReferencingType.BYTE_RANGE;
|
|
56
|
-
url: string;
|
|
57
|
-
initRange: IRange<Byte>;
|
|
58
|
-
indexRange?: IRange<Byte>;
|
|
59
|
-
};
|
|
60
|
-
export type TemplateSegmentReference = {
|
|
61
|
-
type: SegmentReferencingType.TEMPLATE;
|
|
62
|
-
baseUrl: string;
|
|
63
|
-
initUrl: string;
|
|
64
|
-
segmentTemplateUrl: string;
|
|
65
|
-
totalSegmentsDurationMs: Milliseconds;
|
|
66
|
-
segments: {
|
|
67
|
-
url: string;
|
|
68
|
-
time: IRange<Milliseconds>;
|
|
69
|
-
}[];
|
|
70
|
-
nextSegmentBeyondManifest: {
|
|
71
|
-
url: string;
|
|
72
|
-
time: IRange<Milliseconds>;
|
|
73
|
-
};
|
|
74
|
-
timescale: number;
|
|
75
|
-
};
|
|
76
|
-
export type SegmentReference = ByteRangeSegmentReference | TemplateSegmentReference;
|
|
77
|
-
export interface ByteRangeSegment {
|
|
78
|
-
status: SegmentStatus;
|
|
79
|
-
time: IRange<Milliseconds>;
|
|
80
|
-
byte: IRange<Byte>;
|
|
81
|
-
}
|
|
82
|
-
export interface TemplateSegment {
|
|
83
|
-
status: SegmentStatus;
|
|
84
|
-
time: IRange<Milliseconds>;
|
|
85
|
-
size?: Byte;
|
|
86
|
-
url: string;
|
|
87
|
-
}
|
|
88
|
-
export type Segment = ByteRangeSegment | TemplateSegment;
|
|
89
|
-
export declare enum SegmentStatus {
|
|
90
|
-
NONE = "none",
|
|
91
|
-
DOWNLOADING = "downloading",
|
|
92
|
-
DOWNLOADED = "downloaded",
|
|
93
|
-
PARTIALLY_FED = "partially_fed",
|
|
94
|
-
PARTIALLY_EJECTED = "partially_ejected",
|
|
95
|
-
FED = "fed"
|
|
96
|
-
}
|
|
97
|
-
export interface Stream {
|
|
98
|
-
id: string;
|
|
99
|
-
hdr?: boolean;
|
|
100
|
-
language?: string;
|
|
101
|
-
isDefault?: boolean;
|
|
102
|
-
label?: string;
|
|
103
|
-
codecs: string;
|
|
104
|
-
mime: string;
|
|
105
|
-
representations: Representation[];
|
|
106
|
-
}
|
|
107
|
-
export interface LiveMetadata {
|
|
108
|
-
availabilityStartTime: Milliseconds;
|
|
109
|
-
publishTime: Milliseconds;
|
|
110
|
-
latestSegmentPublishTime: Milliseconds;
|
|
111
|
-
streamIsAlive: boolean;
|
|
112
|
-
streamIsUnpublished: boolean;
|
|
113
|
-
}
|
|
114
|
-
export interface Manifest {
|
|
115
|
-
duration: Milliseconds | undefined;
|
|
116
|
-
streams: {
|
|
117
|
-
[key in StreamKind]: Stream[];
|
|
118
|
-
};
|
|
119
|
-
baseUrls: string[];
|
|
120
|
-
live?: LiveMetadata;
|
|
121
|
-
}
|
|
122
|
-
export declare enum ProjectionType {
|
|
123
|
-
RECTANGULAR = 0,
|
|
124
|
-
EQUIRECTANGULAR = 1,
|
|
125
|
-
CUBEMAP = 2,
|
|
126
|
-
MESH = 3
|
|
127
|
-
}
|
|
128
|
-
export interface BoxLike {
|
|
129
|
-
id: string;
|
|
130
|
-
size: Byte;
|
|
131
|
-
contents: DataView;
|
|
132
|
-
}
|
|
133
|
-
export interface GenericContainerParser<InitData> {
|
|
134
|
-
validateData(data: DataView): boolean;
|
|
135
|
-
getIndexRange(init: InitData): IRange<Byte> | undefined;
|
|
136
|
-
parseInit(data: DataView): InitData;
|
|
137
|
-
parseSegments(data: DataView, init: InitData, indexRange?: IRange<Byte>): Segment[];
|
|
138
|
-
parseFeedableSegmentChunk(data: DataView, isLive?: boolean): DataView | null;
|
|
139
|
-
}
|
|
140
|
-
export interface CommonInit {
|
|
141
|
-
is3dVideo: boolean;
|
|
142
|
-
stereoMode?: number;
|
|
143
|
-
projectionType?: ProjectionType;
|
|
144
|
-
projectionData?: {
|
|
145
|
-
pose: {
|
|
146
|
-
yaw: number;
|
|
147
|
-
pitch: number;
|
|
148
|
-
roll: number;
|
|
149
|
-
};
|
|
150
|
-
bounds: {
|
|
151
|
-
top: number;
|
|
152
|
-
bottom: number;
|
|
153
|
-
left: number;
|
|
154
|
-
right: number;
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
export interface WebmInit extends CommonInit {
|
|
159
|
-
segmentStart: Byte;
|
|
160
|
-
segmentEnd: Byte;
|
|
161
|
-
timeScale: number;
|
|
162
|
-
segmentDuration: number;
|
|
163
|
-
cuesSeekPosition?: Byte;
|
|
164
|
-
}
|
|
165
16
|
export interface IProviderSubscriptionInfo {
|
|
166
17
|
output: IProviderOutput;
|
|
167
18
|
desiredState: IDesiredState;
|
|
@@ -176,11 +27,3 @@ export declare enum ProviderState {
|
|
|
176
27
|
PAUSED = "paused"
|
|
177
28
|
}
|
|
178
29
|
export type IParams = IProviderParams<IDashURLSource>;
|
|
179
|
-
export type MpegInit = CommonInit;
|
|
180
|
-
export type WebmParser = GenericContainerParser<WebmInit>;
|
|
181
|
-
export type MpegParser = GenericContainerParser<MpegInit> & {
|
|
182
|
-
getChunkEndTime(data: DataView, timescale: number): Milliseconds;
|
|
183
|
-
getServerLatencyTimestamps(view: DataView): ServerLatencyTimestamps;
|
|
184
|
-
getTimescaleFromIndex(view: DataView): number | undefined;
|
|
185
|
-
};
|
|
186
|
-
export type ContainerParser = WebmParser | MpegParser;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Representation, Segment, SegmentReference, Stream, TemplateSegment, TemplateSegmentReference, TextRepresentation } from '../../../providers/
|
|
1
|
+
import { Representation, Segment, SegmentReference, Stream, TemplateSegment, TemplateSegmentReference, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
2
2
|
import { IAudioStream, IAudioTrack, IInternalTextTrack, IVideoStream, IVideoTrack } from '../../../player/types';
|
|
3
3
|
export declare const representationToVideoTrack: ({ id, width, height, bitrate, fps, quality: qualityString, streamId }: Representation) => IVideoTrack | undefined;
|
|
4
4
|
export declare const representationToAudioTrack: ({ id, bitrate }: Representation) => IAudioTrack;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IAudioTrack, IDashURLSource, IHLSSource, IInternalTextTrack, IVideoTrack } from '../../player/types';
|
|
2
|
-
import {
|
|
2
|
+
import { IProviderSubscriptionInfo, ProviderState } from './lib/types';
|
|
3
|
+
import { CommonInit, Representation, Stream } from '../../providers/utils/parsers/types';
|
|
3
4
|
import { IProvider, IProviderParams } from '../../providers/types';
|
|
4
5
|
import { TrackHistory } from '../../utils/autoSelectTrack';
|
|
5
6
|
import { IStateMachine } from '../../utils/StateMachine/types';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
|
|
2
2
|
import { Dependencies } from './buffer';
|
|
3
|
-
import { Manifest, Stream, TextRepresentation } from '
|
|
3
|
+
import { Manifest, Stream, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
4
4
|
export declare class LiveTextManager {
|
|
5
5
|
currentRepresentation$: IValueSubject<TextRepresentation | null>;
|
|
6
6
|
private readonly maxRepresentations;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ITuningConfig } from '../../../utils/tuningConfig';
|
|
2
2
|
import { IError, IRange, ISubject, IValueSubject, Milliseconds } from '@vkontakte/videoplayer-shared';
|
|
3
3
|
import type { Fetcher } from './fetcher';
|
|
4
|
-
import { CommonInit, Manifest, Representation, Stream, StreamKind } from '
|
|
4
|
+
import { CommonInit, Manifest, Representation, Stream, StreamKind } from '../../../providers/utils/parsers/types';
|
|
5
5
|
export interface Dependencies {
|
|
6
6
|
fetcher: Fetcher;
|
|
7
7
|
tuning: ITuningConfig;
|
|
@@ -12,6 +12,15 @@ export interface Dependencies {
|
|
|
12
12
|
}
|
|
13
13
|
export interface Gap extends IRange<Milliseconds> {
|
|
14
14
|
representation: Representation['id'];
|
|
15
|
+
/**
|
|
16
|
+
* дырки, которые не нужно удалять при парсинге буфера (те `detectGapsWhenIdle`).
|
|
17
|
+
* те, например, которые были обнаружены при парсинге сегментов из манифеста.
|
|
18
|
+
*
|
|
19
|
+
* в функции `detectGapsWhenIdle` мы сравниваем ранее найденные дырки с данными буфера,
|
|
20
|
+
* проблема в том, что не смотря на то, что буфер может показать, что как будто дырки нет,
|
|
21
|
+
* по факту, найденная в манифесте дырка, скорее всего, никуда не делась и это приведет к зависанию видео.
|
|
22
|
+
*/
|
|
23
|
+
persistent: boolean;
|
|
15
24
|
}
|
|
16
25
|
export declare class BufferManager {
|
|
17
26
|
currentLiveSegmentServerLatency$: IValueSubject<number>;
|
|
@@ -60,6 +69,7 @@ export declare class BufferManager {
|
|
|
60
69
|
private index;
|
|
61
70
|
private lastDataObtainedTimestampMs;
|
|
62
71
|
private loadByteRangeSegmentsTimeoutId;
|
|
72
|
+
private sourceBufferBufferedDiff;
|
|
63
73
|
constructor(kind: StreamKind, mediaSource: MediaSource, representations: Representation[], { fetcher, tuning, getCurrentPosition, isActiveLowLatency, compatibilityMode, manifest }: Dependencies);
|
|
64
74
|
startWith: (param_0: string) => Promise<void | undefined>;
|
|
65
75
|
switchToWithPreviousAbort(newRepresentationId: Representation['id'], dropBuffer?: boolean): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpConnectionType } from '../../../player/types';
|
|
2
2
|
import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
|
|
3
3
|
import { Byte, IValueSubject, Milliseconds, IRange, Subject, ITracer, IError } from '@vkontakte/videoplayer-shared';
|
|
4
|
-
import { CommonInit, GenericContainerParser, Segment, SegmentReference } from '
|
|
4
|
+
import { CommonInit, GenericContainerParser, Segment, SegmentReference } from '../../../providers/utils/parsers/types';
|
|
5
5
|
export declare enum RangeMethod {
|
|
6
6
|
HEADER = 0,
|
|
7
7
|
PARAM = 1
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpConnectionType } from '../../../player/types';
|
|
2
|
-
import {
|
|
2
|
+
import { LiveStreamStatus } from './types';
|
|
3
|
+
import { CommonInit, Manifest, Representation, StreamKind, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
3
4
|
import StateMachine from '../../../utils/StateMachine/StateMachine';
|
|
4
5
|
import type ThroughputEstimator from '../../../utils/ThroughputEstimator';
|
|
5
6
|
import { ITuningConfig } from '../../../utils/tuningConfig';
|
|
@@ -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,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IObservable, ISubject, IValueSubject } from '@vkontakte/videoplayer-shared';
|
|
2
2
|
import { IDesiredState, IProviderOutput, IProviderParams } from '../../../providers/types';
|
|
3
3
|
import { IObservableVideo } from '../../../providers/utils/HTMLVideoElement/observable';
|
|
4
|
-
import { IDashURLSource
|
|
5
|
-
export declare enum StreamKind {
|
|
6
|
-
VIDEO = "video",
|
|
7
|
-
AUDIO = "audio",
|
|
8
|
-
TEXT = "text"
|
|
9
|
-
}
|
|
4
|
+
import { IDashURLSource } from '../../../player/types';
|
|
10
5
|
export declare enum LiveStatus {
|
|
11
6
|
ActiveLowLatency = "active_low_latency",
|
|
12
7
|
LiveWithTargetOffset = "live_with_target_offset",
|
|
@@ -18,150 +13,6 @@ export declare enum LiveStreamStatus {
|
|
|
18
13
|
UnexpectedlyDown = "unexpectedly_down",// Стрим в сети, но трансляция оборвалась из-за тех. проблем
|
|
19
14
|
Unpublished = "unpublished"
|
|
20
15
|
}
|
|
21
|
-
export declare enum Profile {
|
|
22
|
-
WEBM_AS_IN_SPEC = "urn:mpeg:dash:profile:webm-on-demand:2012",// Такой указан в спеке
|
|
23
|
-
WEBM_AS_IN_FFMPEG = "urn:webm:dash:profile:webm-on-demand:2012"
|
|
24
|
-
}
|
|
25
|
-
export interface Representation {
|
|
26
|
-
id: string;
|
|
27
|
-
kind: StreamKind;
|
|
28
|
-
segmentReference: SegmentReference;
|
|
29
|
-
profiles: Array<Profile | string>;
|
|
30
|
-
duration?: Milliseconds;
|
|
31
|
-
bitrate: Kbps;
|
|
32
|
-
mime: string;
|
|
33
|
-
codecs: string;
|
|
34
|
-
width: number;
|
|
35
|
-
height: number;
|
|
36
|
-
fps?: number;
|
|
37
|
-
quality?: string;
|
|
38
|
-
streamId?: IVideoStream['id'];
|
|
39
|
-
}
|
|
40
|
-
export interface TextRepresentation extends Representation {
|
|
41
|
-
language: string;
|
|
42
|
-
label: string;
|
|
43
|
-
url: string;
|
|
44
|
-
isAuto: boolean;
|
|
45
|
-
}
|
|
46
|
-
export interface ServerLatencyTimestamps {
|
|
47
|
-
serverDataReceivedTimestamp?: Milliseconds;
|
|
48
|
-
serverDataPreparedTime?: Milliseconds;
|
|
49
|
-
}
|
|
50
|
-
export declare enum SegmentReferencingType {
|
|
51
|
-
BYTE_RANGE = "byteRange",
|
|
52
|
-
TEMPLATE = "template"
|
|
53
|
-
}
|
|
54
|
-
export type ByteRangeSegmentReference = {
|
|
55
|
-
type: SegmentReferencingType.BYTE_RANGE;
|
|
56
|
-
url: string;
|
|
57
|
-
initRange: IRange<Byte>;
|
|
58
|
-
indexRange?: IRange<Byte>;
|
|
59
|
-
};
|
|
60
|
-
export type TemplateSegmentReference = {
|
|
61
|
-
type: SegmentReferencingType.TEMPLATE;
|
|
62
|
-
baseUrl: string;
|
|
63
|
-
initUrl: string;
|
|
64
|
-
segmentTemplateUrl: string;
|
|
65
|
-
totalSegmentsDurationMs: Milliseconds;
|
|
66
|
-
segments: {
|
|
67
|
-
url: string;
|
|
68
|
-
time: IRange<Milliseconds>;
|
|
69
|
-
}[];
|
|
70
|
-
nextSegmentBeyondManifest: {
|
|
71
|
-
url: string;
|
|
72
|
-
time: IRange<Milliseconds>;
|
|
73
|
-
};
|
|
74
|
-
timescale: number;
|
|
75
|
-
};
|
|
76
|
-
export type SegmentReference = ByteRangeSegmentReference | TemplateSegmentReference;
|
|
77
|
-
export interface ByteRangeSegment {
|
|
78
|
-
status: SegmentStatus;
|
|
79
|
-
time: IRange<Milliseconds>;
|
|
80
|
-
byte: IRange<Byte>;
|
|
81
|
-
}
|
|
82
|
-
export interface TemplateSegment {
|
|
83
|
-
status: SegmentStatus;
|
|
84
|
-
time: IRange<Milliseconds>;
|
|
85
|
-
size?: Byte;
|
|
86
|
-
url: string;
|
|
87
|
-
}
|
|
88
|
-
export type Segment = ByteRangeSegment | TemplateSegment;
|
|
89
|
-
export declare enum SegmentStatus {
|
|
90
|
-
NONE = "none",
|
|
91
|
-
DOWNLOADING = "downloading",
|
|
92
|
-
DOWNLOADED = "downloaded",
|
|
93
|
-
PARTIALLY_FED = "partially_fed",
|
|
94
|
-
PARTIALLY_EJECTED = "partially_ejected",
|
|
95
|
-
FED = "fed"
|
|
96
|
-
}
|
|
97
|
-
export interface Stream {
|
|
98
|
-
id: string;
|
|
99
|
-
hdr?: boolean;
|
|
100
|
-
language?: string;
|
|
101
|
-
isDefault?: boolean;
|
|
102
|
-
label?: string;
|
|
103
|
-
codecs: string;
|
|
104
|
-
mime: string;
|
|
105
|
-
representations: Representation[];
|
|
106
|
-
}
|
|
107
|
-
export interface LiveMetadata {
|
|
108
|
-
availabilityStartTime: Milliseconds;
|
|
109
|
-
publishTime: Milliseconds;
|
|
110
|
-
latestSegmentPublishTime: Milliseconds;
|
|
111
|
-
streamIsAlive: boolean;
|
|
112
|
-
streamIsUnpublished: boolean;
|
|
113
|
-
}
|
|
114
|
-
export interface Manifest {
|
|
115
|
-
duration: Milliseconds | undefined;
|
|
116
|
-
streams: {
|
|
117
|
-
[key in StreamKind]: Stream[];
|
|
118
|
-
};
|
|
119
|
-
baseUrls: string[];
|
|
120
|
-
live?: LiveMetadata;
|
|
121
|
-
}
|
|
122
|
-
export declare enum ProjectionType {
|
|
123
|
-
RECTANGULAR = 0,
|
|
124
|
-
EQUIRECTANGULAR = 1,
|
|
125
|
-
CUBEMAP = 2,
|
|
126
|
-
MESH = 3
|
|
127
|
-
}
|
|
128
|
-
export interface BoxLike {
|
|
129
|
-
id: string;
|
|
130
|
-
size: Byte;
|
|
131
|
-
contents: DataView;
|
|
132
|
-
}
|
|
133
|
-
export interface GenericContainerParser<InitData> {
|
|
134
|
-
validateData(data: DataView): boolean;
|
|
135
|
-
getIndexRange(init: InitData): IRange<Byte> | undefined;
|
|
136
|
-
parseInit(data: DataView): InitData;
|
|
137
|
-
parseSegments(data: DataView, init: InitData, indexRange?: IRange<Byte>): Segment[];
|
|
138
|
-
parseFeedableSegmentChunk(data: DataView, isLive?: boolean): DataView | null;
|
|
139
|
-
}
|
|
140
|
-
export interface CommonInit {
|
|
141
|
-
is3dVideo: boolean;
|
|
142
|
-
stereoMode?: number;
|
|
143
|
-
projectionType?: ProjectionType;
|
|
144
|
-
projectionData?: {
|
|
145
|
-
pose: {
|
|
146
|
-
yaw: number;
|
|
147
|
-
pitch: number;
|
|
148
|
-
roll: number;
|
|
149
|
-
};
|
|
150
|
-
bounds: {
|
|
151
|
-
top: number;
|
|
152
|
-
bottom: number;
|
|
153
|
-
left: number;
|
|
154
|
-
right: number;
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
export interface WebmInit extends CommonInit {
|
|
159
|
-
segmentStart: Byte;
|
|
160
|
-
segmentEnd: Byte;
|
|
161
|
-
timeScale: number;
|
|
162
|
-
segmentDuration: number;
|
|
163
|
-
cuesSeekPosition?: Byte;
|
|
164
|
-
}
|
|
165
16
|
export interface IProviderSubscriptionInfo {
|
|
166
17
|
output: IProviderOutput;
|
|
167
18
|
desiredState: IDesiredState;
|
|
@@ -176,11 +27,3 @@ export declare enum ProviderState {
|
|
|
176
27
|
PAUSED = "paused"
|
|
177
28
|
}
|
|
178
29
|
export type IParams = IProviderParams<IDashURLSource>;
|
|
179
|
-
export type MpegInit = CommonInit;
|
|
180
|
-
export type WebmParser = GenericContainerParser<WebmInit>;
|
|
181
|
-
export type MpegParser = GenericContainerParser<MpegInit> & {
|
|
182
|
-
getChunkEndTime(data: DataView, timescale: number): Milliseconds;
|
|
183
|
-
getServerLatencyTimestamps(view: DataView): ServerLatencyTimestamps;
|
|
184
|
-
getTimescaleFromIndex(view: DataView): number | undefined;
|
|
185
|
-
};
|
|
186
|
-
export type ContainerParser = WebmParser | MpegParser;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Representation, Segment, SegmentReference, Stream, TemplateSegment, TemplateSegmentReference, TextRepresentation } from '../../../providers/
|
|
1
|
+
import { Representation, Segment, SegmentReference, Stream, TemplateSegment, TemplateSegmentReference, TextRepresentation } from '../../../providers/utils/parsers/types';
|
|
2
2
|
import { IAudioStream, IAudioTrack, IInternalTextTrack, IVideoStream, IVideoTrack } from '../../../player/types';
|
|
3
3
|
import { IRange, Milliseconds } from '@vkontakte/videoplayer-shared';
|
|
4
4
|
export declare const representationToVideoTrack: ({ id, width, height, bitrate, fps, quality: qualityString, streamId }: Representation) => IVideoTrack | undefined;
|
|
@@ -19,3 +19,7 @@ export declare const isTextRepresentation: (representation: Representation | Tex
|
|
|
19
19
|
*/
|
|
20
20
|
export declare const mergeIntervals: (intervals: IRange<Milliseconds>[]) => IRange<Milliseconds>[];
|
|
21
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;
|
|
@@ -33,16 +33,18 @@ declare class StallsManager {
|
|
|
33
33
|
private qualityRestrictionTimer;
|
|
34
34
|
private subscription;
|
|
35
35
|
severeStallOccurred$: IValueSubject<boolean>;
|
|
36
|
-
|
|
36
|
+
init(data: IConnectData): void;
|
|
37
37
|
get videoMaxQualityLimit(): ExactVideoQuality | undefined;
|
|
38
38
|
get predictedThroughput(): Kbps;
|
|
39
39
|
get abrTuningParams(): ITuningConfig['autoTrackSelection'];
|
|
40
40
|
set lastVideoTrackSelected(lastUniqueVideoTrackSelected: IVideoTrack);
|
|
41
41
|
destroy(): void;
|
|
42
|
+
private resetStoredAbrParamsIfNeeded;
|
|
42
43
|
private updateStoredAbrParams;
|
|
43
44
|
private calculateOptimalAbrParams;
|
|
44
45
|
private getStoredData;
|
|
45
46
|
private setStoredData;
|
|
47
|
+
private removeStoredData;
|
|
46
48
|
private addStallInfoToHistory;
|
|
47
49
|
private updateStallData;
|
|
48
50
|
private subscribe;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ContainerParser, MpegParser } from '
|
|
1
|
+
import { ContainerParser, MpegParser } from './types';
|
|
2
2
|
export declare const getContainerParser: (mime: string) => ContainerParser;
|
|
3
3
|
export declare const isMp4Parser: (parser: ContainerParser) => parser is MpegParser;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Manifest } from '
|
|
1
|
+
import { Manifest } from './types';
|
|
2
2
|
export declare const replaceSegmentTemplate: (template: string, data: Partial<Record<"representationId" | "segmentNumber" | "bandwidth" | "segmentTime", string>>) => string;
|
|
3
3
|
export declare const parse: (text: string, manifestUrl: string) => Manifest;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Box } from '
|
|
1
|
+
import { type Box, ValidBox } from './box';
|
|
2
2
|
/**
|
|
3
3
|
* Queryable object to get needed boxes from structure
|
|
4
4
|
*/
|
|
@@ -12,9 +12,9 @@ export declare class BoxModel {
|
|
|
12
12
|
/**
|
|
13
13
|
* Returns first box of given type
|
|
14
14
|
*/
|
|
15
|
-
find<T extends Box>(type: string): T | null;
|
|
15
|
+
find<T extends Box>(type: string): ValidBox<T> | null;
|
|
16
16
|
/**
|
|
17
|
-
* Returns all boxes of given
|
|
17
|
+
* Returns all boxes of given type
|
|
18
18
|
*/
|
|
19
|
-
findAll<T extends Box>(type: string): T[];
|
|
19
|
+
findAll<T extends Box>(type: string): ValidBox<T>[];
|
|
20
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Box } from '
|
|
2
|
-
import { BoxTypeEnum } from '
|
|
1
|
+
import { type Box } from './box';
|
|
2
|
+
import { BoxTypeEnum } from './BoxTypeEnum';
|
|
3
3
|
export declare const BOX_TYPE_MAP: Record<BoxTypeEnum, typeof Box>;
|
|
4
4
|
export interface BoxParserOptions {
|
|
5
5
|
offset: number;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { type BoxParser } from '
|
|
1
|
+
import { type BoxParser } from './BoxParser';
|
|
2
|
+
export type ValidBox<T extends Box> = T & {
|
|
3
|
+
valid: true;
|
|
4
|
+
size: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const isValid: <T extends Box>(box: T) => box is ValidBox<T>;
|
|
2
7
|
/**
|
|
3
8
|
* Generic boxes description
|
|
4
9
|
*
|
|
@@ -19,10 +24,9 @@ export declare class Box {
|
|
|
19
24
|
source: DataView;
|
|
20
25
|
boxParser: BoxParser;
|
|
21
26
|
type: string;
|
|
22
|
-
|
|
23
|
-
size64: number;
|
|
24
|
-
usertype: number;
|
|
27
|
+
size: number | undefined;
|
|
25
28
|
content: DataView;
|
|
29
|
+
valid: boolean;
|
|
26
30
|
children: Box[];
|
|
27
31
|
/**
|
|
28
32
|
* Next byte in source buffer to be read
|
|
@@ -32,10 +36,6 @@ export declare class Box {
|
|
|
32
36
|
* for compatibility with old Box type
|
|
33
37
|
*/
|
|
34
38
|
get id(): string;
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
*/
|
|
38
|
-
get size(): number;
|
|
39
39
|
constructor(source: DataView, boxParser: BoxParser);
|
|
40
40
|
/**
|
|
41
41
|
* Internal method to scan for children
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FullBox } from '
|
|
2
|
-
import { type BoxParser } from '
|
|
1
|
+
import { FullBox } from '../fullBox';
|
|
2
|
+
import { type BoxParser } from '../BoxParser';
|
|
3
3
|
/**
|
|
4
4
|
* aligned(8) class ProjectionDataBox(unsigned int(32) proj_type, unsigned int(8)version, unsigned int(24) flags)
|
|
5
5
|
* extends FullBox(proj_type, version, flags) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Box } from '
|
|
2
|
-
import { type BoxParser } from '
|
|
1
|
+
import { Box } from '../box';
|
|
2
|
+
import { type BoxParser } from '../BoxParser';
|
|
3
3
|
/**
|
|
4
4
|
* File Type Box description
|
|
5
5
|
*
|