xgplayer-transmuxer 3.0.0-alpha.2
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/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/es/codec/aac.d.ts +34 -0
- package/es/codec/aac.js +242 -0
- package/es/codec/avc.d.ts +35 -0
- package/es/codec/avc.js +250 -0
- package/es/codec/hevc.d.ts +38 -0
- package/es/codec/hevc.js +202 -0
- package/es/codec/index.d.ts +4 -0
- package/es/codec/nalu.d.ts +11 -0
- package/es/codec/nalu.js +194 -0
- package/es/flv/amf.d.ts +16 -0
- package/es/flv/amf.js +247 -0
- package/es/flv/fixer.d.ts +31 -0
- package/es/flv/fixer.js +437 -0
- package/es/flv/index.d.ts +65 -0
- package/es/flv/index.js +441 -0
- package/es/index.d.ts +5 -0
- package/es/index.js +13 -0
- package/es/model/audio-sample.d.ts +18 -0
- package/es/model/audio-sample.js +26 -0
- package/es/model/audio-track.d.ts +38 -0
- package/es/model/audio-track.js +94 -0
- package/es/model/index.d.ts +6 -0
- package/es/model/metadata-track.d.ts +36 -0
- package/es/model/metadata-track.js +100 -0
- package/es/model/types.d.ts +26 -0
- package/es/model/types.js +31 -0
- package/es/model/video-sample.d.ts +44 -0
- package/es/model/video-sample.js +66 -0
- package/es/model/video-track.d.ts +45 -0
- package/es/model/video-track.js +99 -0
- package/es/mp4/fmp4-remuxer.d.ts +32 -0
- package/es/mp4/fmp4-remuxer.js +172 -0
- package/es/mp4/index.d.ts +4 -0
- package/es/mp4/logger.d.ts +13 -0
- package/es/mp4/logger.js +97 -0
- package/es/mp4/mp4-demuxer.d.ts +24 -0
- package/es/mp4/mp4-demuxer.js +268 -0
- package/es/mp4/mp4-parser.d.ts +161 -0
- package/es/mp4/mp4-parser.js +776 -0
- package/es/mp4/mp4-remuxer.d.ts +23 -0
- package/es/mp4/mp4-remuxer.js +273 -0
- package/es/mp4/mp4.d.ts +56 -0
- package/es/mp4/mp4.js +574 -0
- package/es/mpeg-ts/fixer.d.ts +23 -0
- package/es/mpeg-ts/fixer.js +383 -0
- package/es/mpeg-ts/index.d.ts +60 -0
- package/es/mpeg-ts/index.js +480 -0
- package/es/utils/env.d.ts +4 -0
- package/es/utils/env.js +10 -0
- package/es/utils/exp-golomb.d.ts +17 -0
- package/es/utils/exp-golomb.js +172 -0
- package/es/utils/index.d.ts +11 -0
- package/es/utils/index.js +77 -0
- package/es/utils/logger.d.ts +9 -0
- package/es/utils/logger.js +45 -0
- package/es/utils/utf8.d.ts +9 -0
- package/es/utils/utf8.js +91 -0
- package/package.json +25 -0
package/es/codec/hevc.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
2
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
3
|
+
import { NALu } from './nalu.js';
|
|
4
|
+
import { ExpGolomb } from '../utils/exp-golomb.js';
|
|
5
|
+
|
|
6
|
+
var HEVC = /*#__PURE__*/function () {
|
|
7
|
+
function HEVC() {
|
|
8
|
+
_classCallCheck(this, HEVC);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_createClass(HEVC, null, [{
|
|
12
|
+
key: "parseHEVCDecoderConfigurationRecord",
|
|
13
|
+
value: function parseHEVCDecoderConfigurationRecord(data) {
|
|
14
|
+
if (data.length < 23) return;
|
|
15
|
+
var nalUnitSize = (data[21] & 3) + 1;
|
|
16
|
+
var spsParsed;
|
|
17
|
+
var spsArr = [];
|
|
18
|
+
var ppsArr = [];
|
|
19
|
+
var vpsArr = [];
|
|
20
|
+
var offset = 23;
|
|
21
|
+
var numOfArrays = data[22];
|
|
22
|
+
var nalUnitType;
|
|
23
|
+
var numNalus;
|
|
24
|
+
var nalSize;
|
|
25
|
+
|
|
26
|
+
for (var i = 0; i < numOfArrays; i++) {
|
|
27
|
+
nalUnitType = data[offset] & 0x3f;
|
|
28
|
+
numNalus = data[offset + 1] << 8 | data[offset + 2];
|
|
29
|
+
offset += 3;
|
|
30
|
+
|
|
31
|
+
for (var j = 0; j < numNalus; j++) {
|
|
32
|
+
nalSize = data[offset] << 8 | data[offset + 1];
|
|
33
|
+
offset += 2;
|
|
34
|
+
if (!nalSize) continue;
|
|
35
|
+
|
|
36
|
+
switch (nalUnitType) {
|
|
37
|
+
case 32:
|
|
38
|
+
vpsArr.push(data.subarray(offset, offset + nalSize));
|
|
39
|
+
break;
|
|
40
|
+
|
|
41
|
+
case 33:
|
|
42
|
+
{
|
|
43
|
+
var sps = data.subarray(offset, offset + nalSize);
|
|
44
|
+
if (!spsParsed) spsParsed = HEVC.parseSPS(NALu.removeEPB(sps));
|
|
45
|
+
spsArr.push(sps);
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
|
|
49
|
+
case 34:
|
|
50
|
+
ppsArr.push(data.subarray(offset, offset + nalSize));
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
offset += nalSize;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
sps: spsParsed,
|
|
60
|
+
spsArr: spsArr,
|
|
61
|
+
ppsArr: ppsArr,
|
|
62
|
+
vpsArr: vpsArr,
|
|
63
|
+
nalUnitSize: nalUnitSize
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}, {
|
|
67
|
+
key: "parseSPS",
|
|
68
|
+
value: function parseSPS(unit) {
|
|
69
|
+
var eg = new ExpGolomb(unit);
|
|
70
|
+
eg.readUByte();
|
|
71
|
+
eg.readUByte();
|
|
72
|
+
eg.readBits(4);
|
|
73
|
+
var spsMaxSubLayersMinus1 = eg.readBits(3);
|
|
74
|
+
eg.readBits(1);
|
|
75
|
+
|
|
76
|
+
var tierLevel = this._parseProfileTierLevel(eg, spsMaxSubLayersMinus1);
|
|
77
|
+
|
|
78
|
+
eg.readUEG(); // sps_seq_parameter_set_id
|
|
79
|
+
|
|
80
|
+
var chromaFormatIdc = eg.readUEG();
|
|
81
|
+
var chromaFormat = 420;
|
|
82
|
+
if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc];
|
|
83
|
+
var separateColourPlaneFlag = 0;
|
|
84
|
+
|
|
85
|
+
if (chromaFormatIdc === 3) {
|
|
86
|
+
separateColourPlaneFlag = eg.readBits(1);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
var width = eg.readUEG(); // pic_width_in_luma_samples
|
|
90
|
+
|
|
91
|
+
var height = eg.readUEG(); // pic_height_in_luma_samples
|
|
92
|
+
|
|
93
|
+
var conformanceWindowFlag = eg.readBits(1);
|
|
94
|
+
var confWinLeftOffset;
|
|
95
|
+
var confWinRightOffset;
|
|
96
|
+
var confWinTopOffset;
|
|
97
|
+
var confWinBottomOffset;
|
|
98
|
+
|
|
99
|
+
if (conformanceWindowFlag === 1) {
|
|
100
|
+
confWinLeftOffset = eg.readUEG(); // conf_win_left_offset
|
|
101
|
+
|
|
102
|
+
confWinRightOffset = eg.readUEG(); // conf_win_right_offset
|
|
103
|
+
|
|
104
|
+
confWinTopOffset = eg.readUEG(); // conf_win_top_offset
|
|
105
|
+
|
|
106
|
+
confWinBottomOffset = eg.readUEG(); // conf_win_bottom_offset
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var bitDepthLumaMinus8 = eg.readUEG(); // bit_depth_luma_minus8
|
|
110
|
+
|
|
111
|
+
var bitDepthChromaMinus8 = eg.readUEG(); // bit_depth_chroma_minus8
|
|
112
|
+
|
|
113
|
+
if (conformanceWindowFlag === 1) {
|
|
114
|
+
var subWidthC = (chromaFormatIdc === 1 || chromaFormatIdc === 2) && separateColourPlaneFlag === 0 ? 2 : 1;
|
|
115
|
+
var subHeightC = chromaFormatIdc === 1 && separateColourPlaneFlag === 0 ? 2 : 1;
|
|
116
|
+
width -= subWidthC * (confWinRightOffset + confWinLeftOffset);
|
|
117
|
+
height -= subHeightC * (confWinBottomOffset + confWinTopOffset);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
codec: 'hev1.1.6.L93.B0',
|
|
122
|
+
width: width,
|
|
123
|
+
height: height,
|
|
124
|
+
chromaFormat: chromaFormat,
|
|
125
|
+
bitDepthLumaMinus8: bitDepthLumaMinus8,
|
|
126
|
+
bitDepthChromaMinus8: bitDepthChromaMinus8,
|
|
127
|
+
generalProfileSpace: tierLevel.generalProfileSpace,
|
|
128
|
+
generalTierFlag: tierLevel.generalTierFlag,
|
|
129
|
+
generalProfileIdc: tierLevel.generalProfileIdc,
|
|
130
|
+
generalLevelIdc: tierLevel.generalLevelIdc
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
134
|
+
key: "_parseProfileTierLevel",
|
|
135
|
+
value: function _parseProfileTierLevel(eg, maxSubLayersMinus1) {
|
|
136
|
+
var profilePresentFlag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
137
|
+
var generalProfileSpace;
|
|
138
|
+
var generalTierFlag;
|
|
139
|
+
var generalProfileIdc;
|
|
140
|
+
|
|
141
|
+
if (profilePresentFlag) {
|
|
142
|
+
generalProfileSpace = eg.readBits(2);
|
|
143
|
+
generalTierFlag = eg.readBits(1);
|
|
144
|
+
generalProfileIdc = eg.readBits(5);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
eg.readBits(32);
|
|
148
|
+
eg.readBits(1); // general_progressive_source_flag
|
|
149
|
+
|
|
150
|
+
eg.readBits(1); // general_interlaced_source_flag
|
|
151
|
+
|
|
152
|
+
eg.readBits(1); // general_non_packed_constraint_flag
|
|
153
|
+
|
|
154
|
+
eg.readBits(1); // general_frame_only_constraint_flag
|
|
155
|
+
|
|
156
|
+
eg.readBits(16);
|
|
157
|
+
eg.readBits(16);
|
|
158
|
+
eg.readBits(12);
|
|
159
|
+
var generalLevelIdc = eg.readUByte();
|
|
160
|
+
var subLayerProfilePresentFlag = [];
|
|
161
|
+
var subLayerLevelPresentFlag = [];
|
|
162
|
+
|
|
163
|
+
for (var j = 0; j < maxSubLayersMinus1; j++) {
|
|
164
|
+
subLayerProfilePresentFlag[j] = eg.readBits(1);
|
|
165
|
+
subLayerLevelPresentFlag[j] = eg.readBits(1);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (maxSubLayersMinus1 > 0) {
|
|
169
|
+
eg.readBits((8 - maxSubLayersMinus1) * 2);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
for (var i = 0; i < maxSubLayersMinus1; i++) {
|
|
173
|
+
if (subLayerProfilePresentFlag[i] !== 0) {
|
|
174
|
+
eg.readBits(2);
|
|
175
|
+
eg.readBits(1);
|
|
176
|
+
eg.readBits(5);
|
|
177
|
+
eg.readBits(16);
|
|
178
|
+
eg.readBits(16);
|
|
179
|
+
eg.readBits(4);
|
|
180
|
+
eg.readBits(16);
|
|
181
|
+
eg.readBits(16);
|
|
182
|
+
eg.readBits(12);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (subLayerLevelPresentFlag[i] !== 0) {
|
|
186
|
+
eg.readBits(8);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
generalProfileSpace: generalProfileSpace,
|
|
192
|
+
generalTierFlag: generalTierFlag,
|
|
193
|
+
generalProfileIdc: generalProfileIdc,
|
|
194
|
+
generalLevelIdc: generalLevelIdc
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}]);
|
|
198
|
+
|
|
199
|
+
return HEVC;
|
|
200
|
+
}();
|
|
201
|
+
|
|
202
|
+
export { HEVC };
|
package/es/codec/nalu.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
2
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
3
|
+
import 'core-js/modules/es.object.to-string.js';
|
|
4
|
+
import 'core-js/modules/es.regexp.to-string.js';
|
|
5
|
+
import 'core-js/modules/es.array.iterator.js';
|
|
6
|
+
import 'core-js/modules/es.typed-array.uint8-array.js';
|
|
7
|
+
import 'core-js/modules/es.typed-array.copy-within.js';
|
|
8
|
+
import 'core-js/modules/es.typed-array.every.js';
|
|
9
|
+
import 'core-js/modules/es.typed-array.fill.js';
|
|
10
|
+
import 'core-js/modules/es.typed-array.filter.js';
|
|
11
|
+
import 'core-js/modules/es.typed-array.find.js';
|
|
12
|
+
import 'core-js/modules/es.typed-array.find-index.js';
|
|
13
|
+
import 'core-js/modules/es.typed-array.for-each.js';
|
|
14
|
+
import 'core-js/modules/es.typed-array.includes.js';
|
|
15
|
+
import 'core-js/modules/es.typed-array.index-of.js';
|
|
16
|
+
import 'core-js/modules/es.typed-array.iterator.js';
|
|
17
|
+
import 'core-js/modules/es.typed-array.join.js';
|
|
18
|
+
import 'core-js/modules/es.typed-array.last-index-of.js';
|
|
19
|
+
import 'core-js/modules/es.typed-array.map.js';
|
|
20
|
+
import 'core-js/modules/es.typed-array.reduce.js';
|
|
21
|
+
import 'core-js/modules/es.typed-array.reduce-right.js';
|
|
22
|
+
import 'core-js/modules/es.typed-array.reverse.js';
|
|
23
|
+
import 'core-js/modules/es.typed-array.set.js';
|
|
24
|
+
import 'core-js/modules/es.typed-array.slice.js';
|
|
25
|
+
import 'core-js/modules/es.typed-array.some.js';
|
|
26
|
+
import 'core-js/modules/es.typed-array.sort.js';
|
|
27
|
+
import 'core-js/modules/es.typed-array.subarray.js';
|
|
28
|
+
import 'core-js/modules/es.typed-array.to-locale-string.js';
|
|
29
|
+
import 'core-js/modules/es.typed-array.to-string.js';
|
|
30
|
+
import { readBig32 } from '../utils/index.js';
|
|
31
|
+
|
|
32
|
+
var NALu = /*#__PURE__*/function () {
|
|
33
|
+
function NALu() {
|
|
34
|
+
_classCallCheck(this, NALu);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_createClass(NALu, null, [{
|
|
38
|
+
key: "parseAnnexB",
|
|
39
|
+
value: function parseAnnexB(data) {
|
|
40
|
+
var len = data.length;
|
|
41
|
+
var start = 2;
|
|
42
|
+
var end = 0;
|
|
43
|
+
|
|
44
|
+
while (data[start] != null && data[start] !== 1) {
|
|
45
|
+
start++;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
start++;
|
|
49
|
+
end = start + 2;
|
|
50
|
+
if (end >= len) return [];
|
|
51
|
+
var units = [];
|
|
52
|
+
|
|
53
|
+
while (end < len) {
|
|
54
|
+
switch (data[end]) {
|
|
55
|
+
case 0:
|
|
56
|
+
if (data[end - 1] !== 0) {
|
|
57
|
+
end += 2;
|
|
58
|
+
break;
|
|
59
|
+
} else if (data[end - 2] !== 0) {
|
|
60
|
+
end++;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (start !== end - 2) units.push(data.subarray(start, end - 2));
|
|
65
|
+
|
|
66
|
+
do {
|
|
67
|
+
end++;
|
|
68
|
+
} while (data[end] !== 1 && end < len);
|
|
69
|
+
|
|
70
|
+
start = end + 1;
|
|
71
|
+
end = start + 2;
|
|
72
|
+
break;
|
|
73
|
+
|
|
74
|
+
case 1:
|
|
75
|
+
if (data[end - 1] !== 0 || data[end - 2] !== 0) {
|
|
76
|
+
end += 3;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (start !== end - 2) units.push(data.subarray(start, end - 2));
|
|
81
|
+
start = end + 1;
|
|
82
|
+
end = start + 2;
|
|
83
|
+
break;
|
|
84
|
+
|
|
85
|
+
default:
|
|
86
|
+
end += 3;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (start < len) units.push(data.subarray(start));
|
|
92
|
+
return units;
|
|
93
|
+
}
|
|
94
|
+
}, {
|
|
95
|
+
key: "parseAvcC",
|
|
96
|
+
value: function parseAvcC(data) {
|
|
97
|
+
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;
|
|
98
|
+
if (data.length < 4) return;
|
|
99
|
+
var dataLen = data.length;
|
|
100
|
+
var units = [];
|
|
101
|
+
var offset = 0;
|
|
102
|
+
var length;
|
|
103
|
+
|
|
104
|
+
while (offset + size < dataLen) {
|
|
105
|
+
length = readBig32(data, offset);
|
|
106
|
+
if (size === 3) length >>>= 8;
|
|
107
|
+
offset += size;
|
|
108
|
+
if (!length) continue;
|
|
109
|
+
|
|
110
|
+
if (offset + length > dataLen) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
units.push(data.subarray(offset, offset + length));
|
|
115
|
+
offset += length;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return units;
|
|
119
|
+
}
|
|
120
|
+
}, {
|
|
121
|
+
key: "parseSEI",
|
|
122
|
+
value: function parseSEI(unit) {
|
|
123
|
+
var len = unit.length;
|
|
124
|
+
var i = 1;
|
|
125
|
+
var type = 0;
|
|
126
|
+
var size = 0;
|
|
127
|
+
var uuid = '';
|
|
128
|
+
|
|
129
|
+
while (unit[i] === 255) {
|
|
130
|
+
type += 255;
|
|
131
|
+
i++;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
type += unit[i++];
|
|
135
|
+
|
|
136
|
+
while (unit[i] === 255) {
|
|
137
|
+
size += 255;
|
|
138
|
+
i++;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
size += unit[i++];
|
|
142
|
+
|
|
143
|
+
if (type === 5 && len > i + 16) {
|
|
144
|
+
for (var j = 0; j < 16; j++) {
|
|
145
|
+
uuid += unit[i].toString(16);
|
|
146
|
+
i++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
payload: unit.subarray(i),
|
|
152
|
+
type: type,
|
|
153
|
+
size: size,
|
|
154
|
+
uuid: uuid
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}, {
|
|
158
|
+
key: "removeEPB",
|
|
159
|
+
value: function removeEPB(uint) {
|
|
160
|
+
var length = uint.byteLength;
|
|
161
|
+
var emulationPreventionBytesPositions = [];
|
|
162
|
+
var i = 1;
|
|
163
|
+
|
|
164
|
+
while (i < length - 2) {
|
|
165
|
+
if (uint[i] === 0 && uint[i + 1] === 0 && uint[i + 2] === 0x03) {
|
|
166
|
+
emulationPreventionBytesPositions.push(i + 2);
|
|
167
|
+
i += 2;
|
|
168
|
+
} else {
|
|
169
|
+
i++;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!emulationPreventionBytesPositions.length) return uint;
|
|
174
|
+
var newLength = length - emulationPreventionBytesPositions.length;
|
|
175
|
+
var newData = new Uint8Array(newLength);
|
|
176
|
+
var sourceIndex = 0;
|
|
177
|
+
|
|
178
|
+
for (i = 0; i < newLength; sourceIndex++, i++) {
|
|
179
|
+
if (sourceIndex === emulationPreventionBytesPositions[0]) {
|
|
180
|
+
sourceIndex++;
|
|
181
|
+
emulationPreventionBytesPositions.shift();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
newData[i] = uint[sourceIndex];
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return newData;
|
|
188
|
+
}
|
|
189
|
+
}]);
|
|
190
|
+
|
|
191
|
+
return NALu;
|
|
192
|
+
}();
|
|
193
|
+
|
|
194
|
+
export { NALu };
|
package/es/flv/amf.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class AMF {
|
|
2
|
+
static parse(data: any): {};
|
|
3
|
+
static _parseValue(view: any): any;
|
|
4
|
+
static _parseString(view: any): {
|
|
5
|
+
data: string;
|
|
6
|
+
size: any;
|
|
7
|
+
};
|
|
8
|
+
static _parseObject(view: any): {
|
|
9
|
+
data: {
|
|
10
|
+
name: string;
|
|
11
|
+
value: any;
|
|
12
|
+
};
|
|
13
|
+
size: any;
|
|
14
|
+
isEnd: any;
|
|
15
|
+
};
|
|
16
|
+
}
|
package/es/flv/amf.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
2
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
3
|
+
import 'core-js/modules/es.object.to-string.js';
|
|
4
|
+
import 'core-js/modules/es.function.name.js';
|
|
5
|
+
import 'core-js/modules/es.array.iterator.js';
|
|
6
|
+
import 'core-js/modules/es.typed-array.uint8-array.js';
|
|
7
|
+
import 'core-js/modules/es.typed-array.copy-within.js';
|
|
8
|
+
import 'core-js/modules/es.typed-array.every.js';
|
|
9
|
+
import 'core-js/modules/es.typed-array.fill.js';
|
|
10
|
+
import 'core-js/modules/es.typed-array.filter.js';
|
|
11
|
+
import 'core-js/modules/es.typed-array.find.js';
|
|
12
|
+
import 'core-js/modules/es.typed-array.find-index.js';
|
|
13
|
+
import 'core-js/modules/es.typed-array.for-each.js';
|
|
14
|
+
import 'core-js/modules/es.typed-array.includes.js';
|
|
15
|
+
import 'core-js/modules/es.typed-array.index-of.js';
|
|
16
|
+
import 'core-js/modules/es.typed-array.iterator.js';
|
|
17
|
+
import 'core-js/modules/es.typed-array.join.js';
|
|
18
|
+
import 'core-js/modules/es.typed-array.last-index-of.js';
|
|
19
|
+
import 'core-js/modules/es.typed-array.map.js';
|
|
20
|
+
import 'core-js/modules/es.typed-array.reduce.js';
|
|
21
|
+
import 'core-js/modules/es.typed-array.reduce-right.js';
|
|
22
|
+
import 'core-js/modules/es.typed-array.reverse.js';
|
|
23
|
+
import 'core-js/modules/es.typed-array.set.js';
|
|
24
|
+
import 'core-js/modules/es.typed-array.slice.js';
|
|
25
|
+
import 'core-js/modules/es.typed-array.some.js';
|
|
26
|
+
import 'core-js/modules/es.typed-array.sort.js';
|
|
27
|
+
import 'core-js/modules/es.typed-array.subarray.js';
|
|
28
|
+
import 'core-js/modules/es.typed-array.to-locale-string.js';
|
|
29
|
+
import 'core-js/modules/es.typed-array.to-string.js';
|
|
30
|
+
import { UTF8 } from '../utils/utf8.js';
|
|
31
|
+
|
|
32
|
+
var AMF = /*#__PURE__*/function () {
|
|
33
|
+
function AMF() {
|
|
34
|
+
_classCallCheck(this, AMF);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_createClass(AMF, null, [{
|
|
38
|
+
key: "parse",
|
|
39
|
+
value: function parse(data) {
|
|
40
|
+
if (data.length < 3) return;
|
|
41
|
+
var ret = {};
|
|
42
|
+
|
|
43
|
+
var name = AMF._parseValue(new DataView(data.buffer, data.byteOffset, data.byteLength));
|
|
44
|
+
|
|
45
|
+
var value = AMF._parseValue(new DataView(data.buffer, data.byteOffset + name.size, data.byteLength - name.size));
|
|
46
|
+
|
|
47
|
+
ret[name.data] = value.data;
|
|
48
|
+
return ret;
|
|
49
|
+
}
|
|
50
|
+
}, {
|
|
51
|
+
key: "_parseValue",
|
|
52
|
+
value: function _parseValue(view) {
|
|
53
|
+
var dataLen = view.byteLength;
|
|
54
|
+
var type = view.getUint8(0);
|
|
55
|
+
var offset = 1;
|
|
56
|
+
var isEnd = false;
|
|
57
|
+
var value;
|
|
58
|
+
|
|
59
|
+
switch (type) {
|
|
60
|
+
case 0:
|
|
61
|
+
// Number(Double) type
|
|
62
|
+
value = view.getFloat64(1);
|
|
63
|
+
offset += 8;
|
|
64
|
+
break;
|
|
65
|
+
|
|
66
|
+
case 1:
|
|
67
|
+
{
|
|
68
|
+
// Boolean type
|
|
69
|
+
value = !!view.getUint8(1);
|
|
70
|
+
offset += 1;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
case 2:
|
|
75
|
+
{
|
|
76
|
+
// String type
|
|
77
|
+
var _AMF$_parseString = AMF._parseString(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset)),
|
|
78
|
+
data = _AMF$_parseString.data,
|
|
79
|
+
size = _AMF$_parseString.size;
|
|
80
|
+
|
|
81
|
+
value = data;
|
|
82
|
+
offset += size;
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
|
|
86
|
+
case 3:
|
|
87
|
+
{
|
|
88
|
+
// Object(s) type
|
|
89
|
+
value = {};
|
|
90
|
+
var terminal = 0;
|
|
91
|
+
|
|
92
|
+
if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {
|
|
93
|
+
terminal = 3;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
while (offset < dataLen - 4) {
|
|
97
|
+
// 4 === type(UI8) + ScriptDataObjectEnd(UI24)
|
|
98
|
+
var _AMF$_parseObject = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal)),
|
|
99
|
+
_size = _AMF$_parseObject.size,
|
|
100
|
+
_data = _AMF$_parseObject.data,
|
|
101
|
+
_isEnd = _AMF$_parseObject.isEnd;
|
|
102
|
+
|
|
103
|
+
if (_isEnd) break;
|
|
104
|
+
value[_data.name] = _data.value;
|
|
105
|
+
offset += _size;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (offset <= dataLen - 3) {
|
|
109
|
+
var marker = view.getUint32(offset - 1) & 0x00FFFFFF;
|
|
110
|
+
if (marker === 9) offset += 3;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case 8:
|
|
116
|
+
{
|
|
117
|
+
// ECMA array type (Mixed array)
|
|
118
|
+
value = {};
|
|
119
|
+
offset += 4; // ECMAArrayLength(UI32)
|
|
120
|
+
|
|
121
|
+
var _terminal = 0; // workaround for malformed MixedArrays which has missing ScriptDataObjectEnd
|
|
122
|
+
|
|
123
|
+
if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {
|
|
124
|
+
_terminal = 3;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
while (offset < dataLen - 8) {
|
|
128
|
+
// 8 === type(UI8) + ECMAArrayLength(UI32) + ScriptDataVariableEnd(UI24)
|
|
129
|
+
var _AMF$_parseObject2 = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - _terminal)),
|
|
130
|
+
_size2 = _AMF$_parseObject2.size,
|
|
131
|
+
_data2 = _AMF$_parseObject2.data,
|
|
132
|
+
_isEnd2 = _AMF$_parseObject2.isEnd;
|
|
133
|
+
|
|
134
|
+
if (_isEnd2) break;
|
|
135
|
+
value[_data2.name] = _data2.value;
|
|
136
|
+
offset += _size2;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (offset <= dataLen - 3) {
|
|
140
|
+
var _marker = view.getUint32(offset - 1) & 0x00FFFFFF;
|
|
141
|
+
|
|
142
|
+
if (_marker === 9) {
|
|
143
|
+
offset += 3;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
|
|
149
|
+
case 9:
|
|
150
|
+
// ScriptDataObjectEnd
|
|
151
|
+
value = undefined;
|
|
152
|
+
offset = 1;
|
|
153
|
+
isEnd = true;
|
|
154
|
+
break;
|
|
155
|
+
|
|
156
|
+
case 10:
|
|
157
|
+
{
|
|
158
|
+
// Strict array type
|
|
159
|
+
value = [];
|
|
160
|
+
var strictArrayLength = view.getUint32(1);
|
|
161
|
+
offset += 4;
|
|
162
|
+
|
|
163
|
+
for (var i = 0; i < strictArrayLength; i++) {
|
|
164
|
+
var _AMF$_parseValue = AMF._parseValue(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset)),
|
|
165
|
+
_data3 = _AMF$_parseValue.data,
|
|
166
|
+
_size3 = _AMF$_parseValue.size;
|
|
167
|
+
|
|
168
|
+
value.push(_data3);
|
|
169
|
+
offset += _size3;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
|
|
174
|
+
case 11:
|
|
175
|
+
{
|
|
176
|
+
// Date type
|
|
177
|
+
var timestamp = view.getFloat64(offset) + view.getInt16(offset + 8) * 60000;
|
|
178
|
+
value = new Date(timestamp);
|
|
179
|
+
offset += 10;
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
|
|
183
|
+
case 12:
|
|
184
|
+
{
|
|
185
|
+
// Long string type
|
|
186
|
+
var length = view.getUint32(1);
|
|
187
|
+
offset += 4;
|
|
188
|
+
value = '';
|
|
189
|
+
|
|
190
|
+
if (length > 0) {
|
|
191
|
+
value = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + offset, length));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
offset += length;
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
|
|
198
|
+
default:
|
|
199
|
+
offset = dataLen;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
data: value,
|
|
205
|
+
size: offset,
|
|
206
|
+
isEnd: isEnd
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}, {
|
|
210
|
+
key: "_parseString",
|
|
211
|
+
value: function _parseString(view) {
|
|
212
|
+
var length = view.getUint16(0);
|
|
213
|
+
var data = '';
|
|
214
|
+
|
|
215
|
+
if (length > 0) {
|
|
216
|
+
data = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + 2, length));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
data: data,
|
|
221
|
+
size: 2 + length
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}, {
|
|
225
|
+
key: "_parseObject",
|
|
226
|
+
value: function _parseObject(view) {
|
|
227
|
+
if (view.byteLength < 3) return;
|
|
228
|
+
|
|
229
|
+
var name = AMF._parseString(view);
|
|
230
|
+
|
|
231
|
+
var value = AMF._parseValue(new DataView(view.buffer, view.byteOffset + name.size, view.byteLength - name.size));
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
data: {
|
|
235
|
+
name: name.data,
|
|
236
|
+
value: value.data
|
|
237
|
+
},
|
|
238
|
+
size: name.size + value.size,
|
|
239
|
+
isEnd: value.isEnd
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}]);
|
|
243
|
+
|
|
244
|
+
return AMF;
|
|
245
|
+
}();
|
|
246
|
+
|
|
247
|
+
export { AMF };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class FlvFixer {
|
|
2
|
+
constructor(videoTrack: any, audioTrack: any, metadataTrack: any);
|
|
3
|
+
videoTrack: any;
|
|
4
|
+
audioTrack: any;
|
|
5
|
+
metadataTrack: any;
|
|
6
|
+
_baseDts: number;
|
|
7
|
+
_baseDtsInited: boolean;
|
|
8
|
+
_audioNextPts: any;
|
|
9
|
+
_videoNextDts: any;
|
|
10
|
+
_audioTimestampBreak: number;
|
|
11
|
+
_videoTimestampBreak: number;
|
|
12
|
+
_lastAudioExceptionGapDot: number;
|
|
13
|
+
_lastAudioExceptionOverlapDot: number;
|
|
14
|
+
_lastAudioExceptionLargeGapDot: number;
|
|
15
|
+
_lastVideoExceptionLargeGapDot: number;
|
|
16
|
+
_lastVideoExceptionChunkFirstDtsDot: number;
|
|
17
|
+
/**
|
|
18
|
+
* @param {number} startTime 点播seek到的时间点
|
|
19
|
+
* @param {boolean} discontinuity 是否换流
|
|
20
|
+
* @param {boolean} contiguous 前后chunk时间戳是否连续
|
|
21
|
+
*/
|
|
22
|
+
fix(startTime?: number, discontinuity?: boolean, contiguous?: boolean): void;
|
|
23
|
+
_videoLastSample: any;
|
|
24
|
+
_fixVideo(videoTrack: any): void;
|
|
25
|
+
_fixAudio(audioTrack: any): void;
|
|
26
|
+
_calculateBaseDts(audioTrack: any, videoTrack: any): boolean;
|
|
27
|
+
_resetBaseDtsWhenStreamBreaked(): void;
|
|
28
|
+
_doFixAudioInternal(audioTrack: any, samples: any, timescale: any): void;
|
|
29
|
+
_getG711Duration(track: any): number;
|
|
30
|
+
_getSilentFrame(track: any): Uint8Array;
|
|
31
|
+
}
|