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.
Files changed (60) hide show
  1. package/dist/index.min.js +2 -0
  2. package/dist/index.min.js.map +1 -0
  3. package/es/codec/aac.d.ts +34 -0
  4. package/es/codec/aac.js +242 -0
  5. package/es/codec/avc.d.ts +35 -0
  6. package/es/codec/avc.js +250 -0
  7. package/es/codec/hevc.d.ts +38 -0
  8. package/es/codec/hevc.js +202 -0
  9. package/es/codec/index.d.ts +4 -0
  10. package/es/codec/nalu.d.ts +11 -0
  11. package/es/codec/nalu.js +194 -0
  12. package/es/flv/amf.d.ts +16 -0
  13. package/es/flv/amf.js +247 -0
  14. package/es/flv/fixer.d.ts +31 -0
  15. package/es/flv/fixer.js +437 -0
  16. package/es/flv/index.d.ts +65 -0
  17. package/es/flv/index.js +441 -0
  18. package/es/index.d.ts +5 -0
  19. package/es/index.js +13 -0
  20. package/es/model/audio-sample.d.ts +18 -0
  21. package/es/model/audio-sample.js +26 -0
  22. package/es/model/audio-track.d.ts +38 -0
  23. package/es/model/audio-track.js +94 -0
  24. package/es/model/index.d.ts +6 -0
  25. package/es/model/metadata-track.d.ts +36 -0
  26. package/es/model/metadata-track.js +100 -0
  27. package/es/model/types.d.ts +26 -0
  28. package/es/model/types.js +31 -0
  29. package/es/model/video-sample.d.ts +44 -0
  30. package/es/model/video-sample.js +66 -0
  31. package/es/model/video-track.d.ts +45 -0
  32. package/es/model/video-track.js +99 -0
  33. package/es/mp4/fmp4-remuxer.d.ts +32 -0
  34. package/es/mp4/fmp4-remuxer.js +172 -0
  35. package/es/mp4/index.d.ts +4 -0
  36. package/es/mp4/logger.d.ts +13 -0
  37. package/es/mp4/logger.js +97 -0
  38. package/es/mp4/mp4-demuxer.d.ts +24 -0
  39. package/es/mp4/mp4-demuxer.js +268 -0
  40. package/es/mp4/mp4-parser.d.ts +161 -0
  41. package/es/mp4/mp4-parser.js +776 -0
  42. package/es/mp4/mp4-remuxer.d.ts +23 -0
  43. package/es/mp4/mp4-remuxer.js +273 -0
  44. package/es/mp4/mp4.d.ts +56 -0
  45. package/es/mp4/mp4.js +574 -0
  46. package/es/mpeg-ts/fixer.d.ts +23 -0
  47. package/es/mpeg-ts/fixer.js +383 -0
  48. package/es/mpeg-ts/index.d.ts +60 -0
  49. package/es/mpeg-ts/index.js +480 -0
  50. package/es/utils/env.d.ts +4 -0
  51. package/es/utils/env.js +10 -0
  52. package/es/utils/exp-golomb.d.ts +17 -0
  53. package/es/utils/exp-golomb.js +172 -0
  54. package/es/utils/index.d.ts +11 -0
  55. package/es/utils/index.js +77 -0
  56. package/es/utils/logger.d.ts +9 -0
  57. package/es/utils/logger.js +45 -0
  58. package/es/utils/utf8.d.ts +9 -0
  59. package/es/utils/utf8.js +91 -0
  60. package/package.json +25 -0
@@ -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 };
@@ -0,0 +1,4 @@
1
+ export { AVC } from "./avc";
2
+ export { AAC } from "./aac";
3
+ export { HEVC } from "./hevc";
4
+ export { NALu } from "./nalu";
@@ -0,0 +1,11 @@
1
+ export class NALu {
2
+ static parseAnnexB(data: any): any[];
3
+ static parseAvcC(data: any, size?: number): any[];
4
+ static parseSEI(unit: any): {
5
+ payload: any;
6
+ type: number;
7
+ size: number;
8
+ uuid: string;
9
+ };
10
+ static removeEPB(uint: any): any;
11
+ }
@@ -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 };
@@ -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
+ }