@alessmicrosystems/mpegts.js 1.8.1

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 (121) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +158 -0
  3. package/README_ja.md +153 -0
  4. package/README_zh.md +157 -0
  5. package/d.ts/mpegts.d.ts +524 -0
  6. package/d.ts/src/core/mse-events.d.ts +9 -0
  7. package/d.ts/src/core/transmuxing-events.d.ts +24 -0
  8. package/d.ts/src/demux/aac.d.ts +44 -0
  9. package/d.ts/src/demux/ac3.d.ts +70 -0
  10. package/d.ts/src/demux/av1-parser.d.ts +77 -0
  11. package/d.ts/src/demux/av1.d.ts +11 -0
  12. package/d.ts/src/demux/base-demuxer.d.ts +55 -0
  13. package/d.ts/src/demux/h264.d.ts +40 -0
  14. package/d.ts/src/demux/h265.d.ts +65 -0
  15. package/d.ts/src/demux/klv.d.ts +17 -0
  16. package/d.ts/src/demux/mp3.d.ts +6 -0
  17. package/d.ts/src/demux/mpeg4-audio.d.ts +28 -0
  18. package/d.ts/src/demux/pat-pmt-pes.d.ts +106 -0
  19. package/d.ts/src/demux/patpmt.d.ts +40 -0
  20. package/d.ts/src/demux/pes-private-data.d.ts +14 -0
  21. package/d.ts/src/demux/pgs-data.d.ts +9 -0
  22. package/d.ts/src/demux/scte35.d.ts +250 -0
  23. package/d.ts/src/demux/sei.d.ts +8 -0
  24. package/d.ts/src/demux/smpte2038.d.ts +22 -0
  25. package/d.ts/src/demux/ts-demuxer.d.ts +124 -0
  26. package/d.ts/src/player/live-latency-chaser.d.ts +10 -0
  27. package/d.ts/src/player/live-latency-synchronizer.d.ts +10 -0
  28. package/d.ts/src/player/loading-controller.d.ts +19 -0
  29. package/d.ts/src/player/mse-player.d.ts +30 -0
  30. package/d.ts/src/player/player-engine-dedicated-thread-worker.d.ts +2 -0
  31. package/d.ts/src/player/player-engine-dedicated-thread.d.ts +48 -0
  32. package/d.ts/src/player/player-engine-main-thread.d.ts +50 -0
  33. package/d.ts/src/player/player-engine-worker-cmd-def.d.ts +25 -0
  34. package/d.ts/src/player/player-engine-worker-msg-def.d.ts +54 -0
  35. package/d.ts/src/player/player-engine-worker.d.ts +2 -0
  36. package/d.ts/src/player/player-engine.d.ts +16 -0
  37. package/d.ts/src/player/player-events.d.ts +21 -0
  38. package/d.ts/src/player/seeking-handler.d.ts +22 -0
  39. package/d.ts/src/player/startup-stall-jumper.d.ts +14 -0
  40. package/d.ts/src/utils/typedarray-equality.d.ts +2 -0
  41. package/dist/mpegts.js +3 -0
  42. package/dist/mpegts.js.LICENSE.txt +7 -0
  43. package/dist/mpegts.js.map +1 -0
  44. package/package.json +53 -0
  45. package/src/config.js +67 -0
  46. package/src/core/features.js +88 -0
  47. package/src/core/media-info.js +127 -0
  48. package/src/core/media-segment-info.js +230 -0
  49. package/src/core/mse-controller.js +599 -0
  50. package/src/core/mse-events.ts +28 -0
  51. package/src/core/transmuxer.js +346 -0
  52. package/src/core/transmuxing-controller.js +628 -0
  53. package/src/core/transmuxing-events.ts +43 -0
  54. package/src/core/transmuxing-worker.js +286 -0
  55. package/src/demux/aac.ts +397 -0
  56. package/src/demux/ac3.ts +335 -0
  57. package/src/demux/amf-parser.js +243 -0
  58. package/src/demux/av1-parser.ts +629 -0
  59. package/src/demux/av1.ts +103 -0
  60. package/src/demux/base-demuxer.ts +69 -0
  61. package/src/demux/demux-errors.js +26 -0
  62. package/src/demux/exp-golomb.js +116 -0
  63. package/src/demux/flv-demuxer.js +1854 -0
  64. package/src/demux/h264.ts +187 -0
  65. package/src/demux/h265-parser.js +501 -0
  66. package/src/demux/h265.ts +214 -0
  67. package/src/demux/klv.ts +40 -0
  68. package/src/demux/mp3.ts +7 -0
  69. package/src/demux/mpeg4-audio.ts +45 -0
  70. package/src/demux/pat-pmt-pes.ts +132 -0
  71. package/src/demux/pes-private-data.ts +16 -0
  72. package/src/demux/pgs-data.ts +11 -0
  73. package/src/demux/scte35.ts +723 -0
  74. package/src/demux/sei.ts +99 -0
  75. package/src/demux/smpte2038.ts +89 -0
  76. package/src/demux/sps-parser.js +298 -0
  77. package/src/demux/ts-demuxer.ts +2405 -0
  78. package/src/index.js +4 -0
  79. package/src/io/fetch-stream-loader.js +266 -0
  80. package/src/io/io-controller.js +647 -0
  81. package/src/io/loader.js +134 -0
  82. package/src/io/param-seek-handler.js +85 -0
  83. package/src/io/range-seek-handler.js +52 -0
  84. package/src/io/speed-sampler.js +93 -0
  85. package/src/io/websocket-loader.js +151 -0
  86. package/src/io/xhr-moz-chunked-loader.js +211 -0
  87. package/src/io/xhr-msstream-loader.js +307 -0
  88. package/src/io/xhr-range-loader.js +366 -0
  89. package/src/mpegts.js +95 -0
  90. package/src/player/live-latency-chaser.ts +66 -0
  91. package/src/player/live-latency-synchronizer.ts +79 -0
  92. package/src/player/loading-controller.ts +142 -0
  93. package/src/player/mse-player.ts +150 -0
  94. package/src/player/native-player.js +262 -0
  95. package/src/player/player-engine-dedicated-thread.ts +479 -0
  96. package/src/player/player-engine-main-thread.ts +463 -0
  97. package/src/player/player-engine-worker-cmd-def.ts +62 -0
  98. package/src/player/player-engine-worker-msg-def.ts +102 -0
  99. package/src/player/player-engine-worker.ts +370 -0
  100. package/src/player/player-engine.ts +35 -0
  101. package/src/player/player-errors.js +39 -0
  102. package/src/player/player-events.ts +40 -0
  103. package/src/player/seeking-handler.ts +205 -0
  104. package/src/player/startup-stall-jumper.ts +86 -0
  105. package/src/remux/aac-silent.js +56 -0
  106. package/src/remux/mp4-generator.js +866 -0
  107. package/src/remux/mp4-remuxer.js +778 -0
  108. package/src/utils/browser.js +128 -0
  109. package/src/utils/exception.js +73 -0
  110. package/src/utils/logger.js +140 -0
  111. package/src/utils/logging-control.js +165 -0
  112. package/src/utils/polyfill.js +68 -0
  113. package/src/utils/typedarray-equality.ts +69 -0
  114. package/src/utils/utf8-conv.js +84 -0
  115. package/src/utils/webworkify-webpack.js +202 -0
  116. package/tsconfig.json +16 -0
  117. package/tslint.json +1 -0
  118. package/types/index.d.ts +3 -0
  119. package/types/test-flv.ts +8 -0
  120. package/types/tsconfig.json +24 -0
  121. package/webpack.config.js +55 -0
@@ -0,0 +1,214 @@
1
+ import Log from "../utils/logger";
2
+
3
+ export enum H265NaluType {
4
+ kSliceIDR_W_RADL = 19,
5
+ kSliceIDR_N_LP = 20,
6
+ kSliceCRA_NUT = 21,
7
+ kSliceVPS = 32,
8
+ kSliceSPS = 33,
9
+ kSlicePPS = 34,
10
+ kSliceAUD = 35,
11
+ kSliceSEI = 39,
12
+ kSliceSEISuffix = 40,
13
+ }
14
+
15
+ export class H265NaluPayload {
16
+ type: H265NaluType;
17
+ data: Uint8Array;
18
+ }
19
+
20
+ export class H265NaluHVC1 {
21
+ type: H265NaluType;
22
+ data: Uint8Array;
23
+
24
+ constructor(nalu: H265NaluPayload) {
25
+ let nalu_size = nalu.data.byteLength;
26
+
27
+ this.type = nalu.type;
28
+ this.data = new Uint8Array(4 + nalu_size); // 4 byte length-header + nalu payload
29
+
30
+ let v = new DataView(this.data.buffer);
31
+ // Fill 4 byte length-header
32
+ v.setUint32(0, nalu_size);
33
+ // Copy payload
34
+ this.data.set(nalu.data, 4);
35
+ }
36
+ }
37
+
38
+ export class H265AnnexBParser {
39
+
40
+ private readonly TAG: string = "H265AnnexBParser";
41
+
42
+ private data_: Uint8Array;
43
+ private current_startcode_offset_: number = 0;
44
+ private eof_flag_: boolean = false;
45
+
46
+ public constructor(data: Uint8Array) {
47
+ this.data_ = data;
48
+ this.current_startcode_offset_ = this.findNextStartCodeOffset(0);
49
+ if (this.eof_flag_) {
50
+ Log.e(this.TAG, "Could not find H265 startcode until payload end!");
51
+ }
52
+ }
53
+
54
+ private findNextStartCodeOffset(start_offset: number) {
55
+ let i = start_offset;
56
+ let data = this.data_;
57
+
58
+ while (true) {
59
+ if (i + 3 >= data.byteLength) {
60
+ this.eof_flag_ = true;
61
+ return data.byteLength;
62
+ }
63
+
64
+ // search 00 00 00 01 or 00 00 01
65
+ let uint32 = (data[i + 0] << 24)
66
+ | (data[i + 1] << 16)
67
+ | (data[i + 2] << 8)
68
+ | (data[i + 3]);
69
+ let uint24 = (data[i + 0] << 16)
70
+ | (data[i + 1] << 8)
71
+ | (data[i + 2]);
72
+ if (uint32 === 0x00000001 || uint24 === 0x000001) {
73
+ return i;
74
+ } else {
75
+ i++;
76
+ }
77
+ }
78
+ }
79
+
80
+ public readNextNaluPayload(): H265NaluPayload | null {
81
+ let data = this.data_;
82
+ let nalu_payload: H265NaluPayload = null;
83
+
84
+ while (nalu_payload == null) {
85
+ if (this.eof_flag_) {
86
+ break;
87
+ }
88
+ // offset pointed to start code
89
+ let startcode_offset = this.current_startcode_offset_;
90
+
91
+ // nalu payload start offset
92
+ let offset = startcode_offset;
93
+ let u32 = (data[offset] << 24) | (data[offset + 1] << 16) | (data[offset + 2] << 8) | (data[offset + 3]);
94
+ if (u32 === 0x00000001) {
95
+ offset += 4;
96
+ } else {
97
+ offset += 3;
98
+ }
99
+
100
+ let nalu_type: H265NaluType = (data[offset] >> 1) & 0x3F;
101
+ let forbidden_bit = (data[offset] & 0x80) >>> 7;
102
+
103
+ let next_startcode_offset = this.findNextStartCodeOffset(offset);
104
+ this.current_startcode_offset_ = next_startcode_offset;
105
+
106
+ if (forbidden_bit !== 0) {
107
+ // Log.e(this.TAG, `forbidden_bit near offset ${offset} should be 0 but has value ${forbidden_bit}`);
108
+ continue;
109
+ }
110
+
111
+ let payload_data = data.subarray(offset, next_startcode_offset);
112
+
113
+ nalu_payload = new H265NaluPayload();
114
+ nalu_payload.type = nalu_type;
115
+ nalu_payload.data = payload_data;
116
+ }
117
+
118
+ return nalu_payload;
119
+ }
120
+
121
+ }
122
+
123
+ export type HEVCDecoderConfigurationRecordType = {
124
+ configurationVersion: 1;
125
+ } & VPSHEVCDecoderConfigurationRecordType & SPSHEVCDecoderConfigurationRecordType & PPSHEVCDecoderConfigurationRecordType;
126
+
127
+ export type VPSHEVCDecoderConfigurationRecordType = {
128
+ num_temporal_layers: number;
129
+ temporal_id_nested: boolean;
130
+ }
131
+
132
+ export type SPSHEVCDecoderConfigurationRecordType = {
133
+ general_profile_space: number;
134
+ general_tier_flag: number;
135
+ general_level_idc: number;
136
+ general_profile_idc: number;
137
+ general_profile_compatibility_flags_1: number;
138
+ general_profile_compatibility_flags_2: number;
139
+ general_profile_compatibility_flags_3: number;
140
+ general_profile_compatibility_flags_4: number;
141
+ general_constraint_indicator_flags_1: number;
142
+ general_constraint_indicator_flags_2: number;
143
+ general_constraint_indicator_flags_3: number;
144
+ general_constraint_indicator_flags_4: number;
145
+ general_constraint_indicator_flags_5: number;
146
+ general_constraint_indicator_flags_6: number;
147
+ constant_frame_rate: number;
148
+ min_spatial_segmentation_idc: number;
149
+ chroma_format_idc: number,
150
+ bit_depth_luma_minus8: number,
151
+ bit_depth_chroma_minus8: number,
152
+ }
153
+
154
+ export type PPSHEVCDecoderConfigurationRecordType = {
155
+ parallelismType: number;
156
+ }
157
+
158
+ export class HEVCDecoderConfigurationRecord {
159
+
160
+ private data: Uint8Array;
161
+
162
+ // sps, pps: require Nalu without 4 byte length-header
163
+ public constructor(vps: Uint8Array, sps: Uint8Array, pps: Uint8Array, detail: HEVCDecoderConfigurationRecordType) {
164
+ let length = 23 + (3 + 2 + vps.byteLength) + (3 + 2 + sps.byteLength) + (3 + 2 + pps.byteLength);
165
+ let data = this.data = new Uint8Array(length);
166
+
167
+ data[0] = 0x01; // configurationVersion
168
+ data[1] = ((detail.general_profile_space & 0x03) << 6) | ((detail.general_tier_flag ? 1 : 0) << 5) | ((detail.general_profile_idc & 0x1F));
169
+ data[2] = detail.general_profile_compatibility_flags_1;
170
+ data[3] = detail.general_profile_compatibility_flags_2;
171
+ data[4] = detail.general_profile_compatibility_flags_3;
172
+ data[5] = detail.general_profile_compatibility_flags_4;
173
+ data[6] = detail.general_constraint_indicator_flags_1;
174
+ data[7] = detail.general_constraint_indicator_flags_2;
175
+ data[8] = detail.general_constraint_indicator_flags_3;
176
+ data[9] = detail.general_constraint_indicator_flags_4;
177
+ data[10] = detail.general_constraint_indicator_flags_5;
178
+ data[11] = detail.general_constraint_indicator_flags_6;
179
+ data[12] = detail.general_level_idc;
180
+ data[13] = 0xF0 | ((detail.min_spatial_segmentation_idc & 0x0F00) >> 8)
181
+ data[14] = (detail.min_spatial_segmentation_idc & 0xFF);
182
+ data[15] = 0xFC | (detail.parallelismType & 0x03);
183
+ data[16] = 0xFC | (detail.chroma_format_idc & 0x03);
184
+ data[17] = 0xF8 | (detail.bit_depth_luma_minus8 & 0x07);
185
+ data[18] = 0xF8 | (detail.bit_depth_chroma_minus8 & 0x07);
186
+ data[19] = 0;
187
+ data[20] = 0;
188
+ data[21] = ((detail.constant_frame_rate & 0x03) << 6) | ((detail.num_temporal_layers & 0x07) << 3) | ((detail.temporal_id_nested ? 1 : 0) << 2) | 3;
189
+ data[22] = 3;
190
+ data[23 + 0 + 0] = 0x80 | H265NaluType.kSliceVPS;
191
+ data[23 + 0 + 1] = 0;
192
+ data[23 + 0 + 2] = 1;
193
+ data[23 + 0 + 3] = (vps.byteLength & 0xFF00) >> 8;
194
+ data[23 + 0 + 4] = (vps.byteLength & 0x00FF) >> 0;
195
+ data.set(vps, 23 + 0 + 5);
196
+ data[23 + (5 + vps.byteLength) + 0] = 0x80 | H265NaluType.kSliceSPS;
197
+ data[23 + (5 + vps.byteLength) + 1] = 0;
198
+ data[23 + (5 + vps.byteLength) + 2] = 1;
199
+ data[23 + (5 + vps.byteLength) + 3] = (sps.byteLength & 0xFF00) >> 8;
200
+ data[23 + (5 + vps.byteLength) + 4] = (sps.byteLength & 0x00FF) >> 0;
201
+ data.set(sps, 23 + (5 + vps.byteLength) + 5);
202
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 0] = 0x80 | H265NaluType.kSlicePPS;
203
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 1] = 0;
204
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 2] = 1;
205
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 3] = (pps.byteLength & 0xFF00) >> 8;
206
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 4] = (pps.byteLength & 0x00FF) >> 0;
207
+ data.set(pps, 23 + (5 + vps.byteLength + 5 + sps.byteLength) + 5);
208
+ }
209
+
210
+ public getData() {
211
+ return this.data;
212
+ }
213
+
214
+ }
@@ -0,0 +1,40 @@
1
+ export class KLVData {
2
+ pid: number;
3
+ stream_id: number;
4
+ pts?: number;
5
+ dts?: number;
6
+ access_units: AccessUnit[];
7
+ data: Uint8Array;
8
+ len: number;
9
+ }
10
+
11
+ type AccessUnit = {
12
+ service_id: number;
13
+ sequence_number: number;
14
+ flags: number;
15
+ data: Uint8Array;
16
+ }
17
+
18
+ export const klv_parse = (data: Uint8Array) => {
19
+ let result: AccessUnit[] = [];
20
+
21
+ let offset = 0;
22
+ while (offset + 5 < data.byteLength) {
23
+ let service_id = data[offset + 0];
24
+ let sequence_number = data[offset + 1];
25
+ let flags = data[offset + 2];
26
+ let au_size = (data[offset + 3] << 8) | (data[offset + 4] << 0);
27
+ let au_data = data.slice(offset + 5, offset + 5 + au_size);
28
+
29
+ result.push({
30
+ service_id,
31
+ sequence_number,
32
+ flags,
33
+ data: au_data
34
+ });
35
+
36
+ offset += 5 + au_size;
37
+ }
38
+
39
+ return result;
40
+ }
@@ -0,0 +1,7 @@
1
+ export class MP3Data {
2
+ object_type: number;
3
+ sample_rate: number;
4
+ channel_count: number;
5
+
6
+ data: Uint8Array;
7
+ }
@@ -0,0 +1,45 @@
1
+ export enum MPEG4AudioObjectTypes {
2
+ kNull = 0,
3
+ kAACMain,
4
+ kAAC_LC, // LC-AAC
5
+ kAAC_SSR,
6
+ kAAC_LTP,
7
+ kAAC_SBR, // HE-AAC
8
+ kAAC_Scalable,
9
+
10
+ kLayer1 = 32,
11
+ kLayer2,
12
+ kLayer3, // MP3
13
+ }
14
+
15
+ export enum MPEG4SamplingFrequencyIndex {
16
+ k96000Hz = 0,
17
+ k88200Hz,
18
+ k64000Hz,
19
+ k48000Hz,
20
+ k44100Hz,
21
+ k32000Hz,
22
+ k24000Hz,
23
+ k22050Hz,
24
+ k16000Hz,
25
+ k12000Hz,
26
+ k11025Hz,
27
+ k8000Hz,
28
+ k7350Hz,
29
+ }
30
+
31
+ export const MPEG4SamplingFrequencies = [
32
+ 96000,
33
+ 88200,
34
+ 64000,
35
+ 48000,
36
+ 44100,
37
+ 32000,
38
+ 24000,
39
+ 22050,
40
+ 16000,
41
+ 12000,
42
+ 11025,
43
+ 8000,
44
+ 7350,
45
+ ];
@@ -0,0 +1,132 @@
1
+ interface ProgramToPMTPIDMap {
2
+ [program: number]: number;
3
+ }
4
+
5
+ export class PAT {
6
+ version_number: number;
7
+ network_pid: number;
8
+ // program_number -> pmt_pid
9
+ program_pmt_pid: ProgramToPMTPIDMap = {};
10
+ }
11
+
12
+ export enum StreamType {
13
+ kMPEG1Audio = 0x03,
14
+ kMPEG2Audio = 0x04,
15
+ kPESPrivateData = 0x06,
16
+ kADTSAAC = 0x0F,
17
+ kLOASAAC = 0x11,
18
+ kAC3 = 0x81,
19
+ kEAC3 = 0x87,
20
+ kMetadata = 0x15,
21
+ kSCTE35 = 0x86,
22
+ kPGS = 0x90,
23
+ kH264 = 0x1b,
24
+ kH265 = 0x24
25
+ }
26
+
27
+ interface PIDToStreamTypeMap {
28
+ [pid: number]: StreamType;
29
+ }
30
+
31
+ export class PMT {
32
+ program_number: number;
33
+ version_number: number;
34
+ pcr_pid: number;
35
+ // pid -> stream_type
36
+ pid_stream_type: PIDToStreamTypeMap = {};
37
+
38
+ common_pids: {
39
+ h264: number | undefined,
40
+ h265: number | undefined,
41
+ av1: number | undefined,
42
+ adts_aac: number | undefined,
43
+ loas_aac: number | undefined,
44
+ opus: number | undefined,
45
+ ac3: number | undefined,
46
+ eac3: number | undefined,
47
+ mp3: number | undefined
48
+ } = {
49
+ h264: undefined,
50
+ h265: undefined,
51
+ av1: undefined,
52
+ adts_aac: undefined,
53
+ loas_aac: undefined,
54
+ opus: undefined,
55
+ ac3: undefined,
56
+ eac3: undefined,
57
+ mp3: undefined
58
+ };
59
+
60
+ pes_private_data_pids: {
61
+ [pid: number]: boolean
62
+ } = {};
63
+
64
+ timed_id3_pids: {
65
+ [pid: number]: boolean
66
+ } = {};
67
+
68
+ pgs_pids: {
69
+ [pid: number]: boolean;
70
+ } = {};
71
+ pgs_langs: {
72
+ [pid: number]: string;
73
+ } = {};
74
+
75
+ synchronous_klv_pids: {
76
+ [pid: number]: boolean
77
+ } = {};
78
+
79
+ asynchronous_klv_pids: {
80
+ [pid: number]: boolean
81
+ } = {};
82
+
83
+ scte_35_pids: {
84
+ [pid: number]: boolean
85
+ } = {};
86
+
87
+ smpte2038_pids: {
88
+ [oid: number]: boolean
89
+ } = {};
90
+
91
+ // All discovered audio streams (including secondary/alternate languages).
92
+ // Each entry: { pid, codec, lang? }
93
+ all_audio_pids: Array<{pid: number, codec: string, lang?: string}> = [];
94
+
95
+ // All subtitle/teletext streams discovered in the PMT.
96
+ // Each entry: { pid, type: 'pgs'|'timed_id3'|'teletext', lang? }
97
+ subtitle_pids: Array<{pid: number, type: string, lang?: string}> = [];
98
+
99
+ // Tracks which sections of this version have been parsed
100
+ parsed_sections: {[section_number: number]: boolean} = {};
101
+ }
102
+
103
+ export interface ProgramToPMTMap {
104
+ [program: number]: PMT;
105
+ }
106
+
107
+ export class PESData {
108
+ pid: number;
109
+ data: Uint8Array;
110
+ stream_type: StreamType;
111
+ file_position: number;
112
+ random_access_indicator: number;
113
+ }
114
+
115
+ export class SectionData {
116
+ pid: number;
117
+ data: Uint8Array;
118
+ file_position: number;
119
+ random_access_indicator: number;
120
+ }
121
+
122
+ export class SliceQueue {
123
+ slices: Uint8Array[] = [];
124
+ total_length: number = 0;
125
+ expected_length: number = 0;
126
+ file_position: number = 0;
127
+ random_access_indicator: 0;
128
+ }
129
+
130
+ export interface PIDToSliceQueues {
131
+ [pid: number]: SliceQueue;
132
+ }
@@ -0,0 +1,16 @@
1
+ // ISO/IEC 13818-1 PES packets containing private data (stream_type=0x06)
2
+ export class PESPrivateData {
3
+ pid: number;
4
+ stream_id: number;
5
+ pts?: number;
6
+ dts?: number;
7
+ nearest_pts?: number;
8
+ data: Uint8Array;
9
+ len: number;
10
+ }
11
+
12
+ export class PESPrivateDataDescriptor {
13
+ pid: number;
14
+ stream_type: number;
15
+ descriptor: Uint8Array;
16
+ }
@@ -0,0 +1,11 @@
1
+ // ISO/IEC 13818-1 PES packets containing private data (stream_type=0x06)
2
+ export class PGSData {
3
+ pid: number;
4
+ stream_id: number;
5
+ pts?: number;
6
+ dts?: number;
7
+ lang: string;
8
+ data: Uint8Array;
9
+ len: number;
10
+ }
11
+