hls-streamer 2.1.0 → 2.2.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/README.md +136 -197
- package/dist/Interfaces/HlsStreamer.d.ts +17 -0
- package/dist/Interfaces/HlsStreamer.d.ts.map +1 -1
- package/dist/Libs/FileLib.d.ts +15 -1
- package/dist/Libs/FileLib.d.ts.map +1 -1
- package/dist/Libs/FileLib.js +238 -108
- package/dist/Libs/FileLib.js.map +1 -1
- package/dist/cjs/Interfaces/HlsStreamer.d.ts +17 -0
- package/dist/cjs/Interfaces/HlsStreamer.d.ts.map +1 -1
- package/dist/cjs/Libs/FileLib.d.ts +15 -1
- package/dist/cjs/Libs/FileLib.d.ts.map +1 -1
- package/dist/cjs/Libs/FileLib.js +241 -108
- package/dist/cjs/Libs/FileLib.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -7
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +133 -133
- package/dist/cjs/index.js.map +1 -1
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +133 -133
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -40,17 +40,11 @@ export class HlsStreamer {
|
|
|
40
40
|
writable: true,
|
|
41
41
|
value: void 0
|
|
42
42
|
});
|
|
43
|
-
Object.defineProperty(this, "
|
|
43
|
+
Object.defineProperty(this, "segments", {
|
|
44
44
|
enumerable: true,
|
|
45
45
|
configurable: true,
|
|
46
46
|
writable: true,
|
|
47
|
-
value:
|
|
48
|
-
});
|
|
49
|
-
Object.defineProperty(this, "frameAlignedSegments", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
configurable: true,
|
|
52
|
-
writable: true,
|
|
53
|
-
value: new Map()
|
|
47
|
+
value: void 0
|
|
54
48
|
});
|
|
55
49
|
this.validateOptions(options);
|
|
56
50
|
this.validateFile(options.filePath);
|
|
@@ -87,18 +81,12 @@ export class HlsStreamer {
|
|
|
87
81
|
}
|
|
88
82
|
async getFileInfo() {
|
|
89
83
|
if (!this.fileInfo) {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
if (size <= 0) {
|
|
84
|
+
const analysis = await FileLib.analyzeMP3File(this.filePath);
|
|
85
|
+
if (analysis.size <= 0) {
|
|
93
86
|
throw new InvalidFileError('File is empty');
|
|
94
87
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
this.fileInfo = {
|
|
99
|
-
size,
|
|
100
|
-
duration: 0
|
|
101
|
-
};
|
|
88
|
+
this.fileInfo = analysis;
|
|
89
|
+
this.segments = undefined;
|
|
102
90
|
}
|
|
103
91
|
return this.fileInfo;
|
|
104
92
|
}
|
|
@@ -110,26 +98,14 @@ export class HlsStreamer {
|
|
|
110
98
|
if (endByte > fileInfo.size) {
|
|
111
99
|
throw new InvalidRangeError(startByte, endByte);
|
|
112
100
|
}
|
|
113
|
-
const
|
|
114
|
-
const searchStartByte = Math.max(0, startByte - 1024);
|
|
115
|
-
const searchEndByte = Math.min(fileInfo.size, startByte + searchBufferSize);
|
|
101
|
+
const length = endByte - startByte;
|
|
116
102
|
const fd = fs.openSync(this.filePath, "r");
|
|
117
103
|
try {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const targetOffsetInSearch = startByte - searchStartByte;
|
|
121
|
-
const frameAlignedOffsetInSearch = this.findNextMp3Frame(searchBuffer, Math.max(0, targetOffsetInSearch));
|
|
122
|
-
const actualStartByte = searchStartByte + frameAlignedOffsetInSearch;
|
|
123
|
-
const actualEndByte = Math.min(endByte, fileInfo.size);
|
|
124
|
-
const bufferLength = actualEndByte - actualStartByte;
|
|
125
|
-
if (bufferLength <= 0) {
|
|
126
|
-
const fallbackLength = endByte - startByte;
|
|
127
|
-
const fallbackBuffer = Buffer.alloc(fallbackLength);
|
|
128
|
-
const bytesRead = fs.readSync(fd, fallbackBuffer, 0, fallbackLength, startByte);
|
|
129
|
-
return fallbackBuffer.subarray(0, bytesRead);
|
|
104
|
+
if (length === 0) {
|
|
105
|
+
return Buffer.alloc(0);
|
|
130
106
|
}
|
|
131
|
-
const buffer = Buffer.alloc(
|
|
132
|
-
const bytesRead = fs.readSync(fd, buffer, 0,
|
|
107
|
+
const buffer = Buffer.alloc(length);
|
|
108
|
+
const bytesRead = fs.readSync(fd, buffer, 0, length, startByte);
|
|
133
109
|
return buffer.subarray(0, bytesRead);
|
|
134
110
|
}
|
|
135
111
|
finally {
|
|
@@ -137,32 +113,131 @@ export class HlsStreamer {
|
|
|
137
113
|
}
|
|
138
114
|
}
|
|
139
115
|
async createM3U8() {
|
|
140
|
-
const fileInfo = await
|
|
141
|
-
|
|
116
|
+
const [fileInfo, segments] = await Promise.all([
|
|
117
|
+
this.getFileInfo(),
|
|
118
|
+
this.getSegments()
|
|
119
|
+
]);
|
|
120
|
+
if (!segments.length) {
|
|
121
|
+
throw new InvalidFileError('Unable to generate segments for MP3 file');
|
|
122
|
+
}
|
|
123
|
+
const maxSegmentDuration = segments.reduce((max, segment) => Math.max(max, segment.duration), 0);
|
|
124
|
+
const targetDurationSeconds = Math.max(1, Math.ceil(maxSegmentDuration || fileInfo.duration || 1));
|
|
142
125
|
const m3u8 = [
|
|
143
126
|
'#EXTM3U',
|
|
144
127
|
'#EXT-X-VERSION:6',
|
|
145
128
|
'#EXT-X-PLAYLIST-TYPE:VOD',
|
|
146
|
-
|
|
129
|
+
`#EXT-X-TARGETDURATION:${targetDurationSeconds}`,
|
|
147
130
|
'#EXT-X-MEDIA-SEQUENCE:0',
|
|
148
131
|
];
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
const segmentUrl = this.buildSegmentUrl(start, end, i);
|
|
153
|
-
m3u8.push(`#EXTINF:${estimatedDuration.toFixed(3)}`);
|
|
132
|
+
segments.forEach((segment, index) => {
|
|
133
|
+
const segmentUrl = this.buildSegmentUrl(segment.start, segment.end, index);
|
|
134
|
+
m3u8.push(`#EXTINF:${segment.duration.toFixed(3)}`);
|
|
154
135
|
m3u8.push(segmentUrl);
|
|
155
|
-
}
|
|
136
|
+
});
|
|
156
137
|
m3u8.push('#EXT-X-ENDLIST');
|
|
157
138
|
return m3u8.join('\n');
|
|
158
139
|
}
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
return
|
|
140
|
+
async getSegments() {
|
|
141
|
+
if (this.segments) {
|
|
142
|
+
return this.segments;
|
|
143
|
+
}
|
|
144
|
+
const fileInfo = await this.getFileInfo();
|
|
145
|
+
if (!fileInfo.frames.length) {
|
|
146
|
+
this.segments = this.buildSegmentsWithoutFrameTable(fileInfo);
|
|
147
|
+
return this.segments;
|
|
148
|
+
}
|
|
149
|
+
const targetSizes = this.computeTargetSizes(fileInfo);
|
|
150
|
+
const segments = [];
|
|
151
|
+
const frames = fileInfo.frames;
|
|
152
|
+
let frameCursor = 0;
|
|
153
|
+
const consumeFrames = (targetBytes) => {
|
|
154
|
+
if (frameCursor >= frames.length) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const startFrameIndex = frameCursor;
|
|
158
|
+
let consumedBytes = 0;
|
|
159
|
+
let duration = 0;
|
|
160
|
+
while (frameCursor < frames.length) {
|
|
161
|
+
const frame = frames[frameCursor];
|
|
162
|
+
const nextBytes = consumedBytes + frame.length;
|
|
163
|
+
if (consumedBytes > 0 && nextBytes > targetBytes) {
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
consumedBytes = nextBytes;
|
|
167
|
+
duration += frame.duration;
|
|
168
|
+
frameCursor++;
|
|
169
|
+
if (consumedBytes >= targetBytes) {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (frameCursor === startFrameIndex && frameCursor < frames.length) {
|
|
174
|
+
const frame = frames[frameCursor];
|
|
175
|
+
consumedBytes += frame.length;
|
|
176
|
+
duration += frame.duration;
|
|
177
|
+
frameCursor++;
|
|
178
|
+
}
|
|
179
|
+
if (frameCursor === startFrameIndex) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const start = frames[startFrameIndex].offset;
|
|
183
|
+
const lastFrame = frames[frameCursor - 1];
|
|
184
|
+
const end = lastFrame.offset + lastFrame.length;
|
|
185
|
+
segments.push({
|
|
186
|
+
start,
|
|
187
|
+
end,
|
|
188
|
+
duration
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
targetSizes.forEach(consumeFrames);
|
|
192
|
+
while (frameCursor < frames.length) {
|
|
193
|
+
consumeFrames(this.segmentSize);
|
|
194
|
+
}
|
|
195
|
+
if (!segments.length) {
|
|
196
|
+
this.segments = this.buildSegmentsWithoutFrameTable(fileInfo);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.segments = segments;
|
|
200
|
+
}
|
|
201
|
+
return this.segments;
|
|
202
|
+
}
|
|
203
|
+
computeTargetSizes(fileInfo) {
|
|
204
|
+
const totalBytes = fileInfo.audioDataSize || fileInfo.size;
|
|
205
|
+
return this.computeTargetSizesFromBytes(totalBytes);
|
|
206
|
+
}
|
|
207
|
+
computeTargetSizesFromBytes(totalBytes) {
|
|
208
|
+
if (totalBytes <= 0) {
|
|
209
|
+
return [];
|
|
162
210
|
}
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
211
|
+
const targets = [];
|
|
212
|
+
let remaining = totalBytes;
|
|
213
|
+
let index = 0;
|
|
214
|
+
while (remaining > 0) {
|
|
215
|
+
const targetSize = Math.min(this.calculateSegmentSize(index), remaining);
|
|
216
|
+
targets.push(targetSize);
|
|
217
|
+
remaining -= targetSize;
|
|
218
|
+
index++;
|
|
219
|
+
}
|
|
220
|
+
return targets.length ? targets : [totalBytes];
|
|
221
|
+
}
|
|
222
|
+
buildSegmentsWithoutFrameTable(fileInfo) {
|
|
223
|
+
const segments = [];
|
|
224
|
+
const totalBytes = Math.max(fileInfo.size, fileInfo.audioDataSize);
|
|
225
|
+
if (totalBytes <= 0) {
|
|
226
|
+
return segments;
|
|
227
|
+
}
|
|
228
|
+
const targets = this.computeTargetSizesFromBytes(totalBytes);
|
|
229
|
+
let start = 0;
|
|
230
|
+
targets.forEach((targetSize) => {
|
|
231
|
+
const end = Math.min(totalBytes, start + targetSize);
|
|
232
|
+
const duration = this.estimateSegmentDuration(end - start);
|
|
233
|
+
segments.push({ start, end, duration });
|
|
234
|
+
start = end;
|
|
235
|
+
});
|
|
236
|
+
if (start < totalBytes) {
|
|
237
|
+
const duration = this.estimateSegmentDuration(totalBytes - start);
|
|
238
|
+
segments.push({ start, end: totalBytes, duration });
|
|
239
|
+
}
|
|
240
|
+
return segments;
|
|
166
241
|
}
|
|
167
242
|
estimateSegmentDuration(segmentSize) {
|
|
168
243
|
const estimatedBytesPerSecond = 16000;
|
|
@@ -185,94 +260,19 @@ export class HlsStreamer {
|
|
|
185
260
|
return this.segmentSize;
|
|
186
261
|
}
|
|
187
262
|
}
|
|
188
|
-
calculateSegment(segmentIndex, fileSize) {
|
|
189
|
-
let start = 0;
|
|
190
|
-
if (this.enableFastStart && segmentIndex < 2) {
|
|
191
|
-
start = segmentIndex * (this.segmentSize / 4);
|
|
192
|
-
}
|
|
193
|
-
else if (this.enableFastStart) {
|
|
194
|
-
start = (3 * this.segmentSize) / 4 + (segmentIndex - 2) * this.segmentSize;
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
start = segmentIndex * this.segmentSize;
|
|
198
|
-
}
|
|
199
|
-
const segmentSize = this.calculateSegmentSize(segmentIndex);
|
|
200
|
-
const end = Math.min(start + segmentSize, fileSize);
|
|
201
|
-
return { start: Math.floor(start), end: Math.floor(end) };
|
|
202
|
-
}
|
|
203
|
-
async getFrameAlignedSegment(segmentIndex, fileSize) {
|
|
204
|
-
if (this.frameAlignedSegments.has(segmentIndex)) {
|
|
205
|
-
return this.frameAlignedSegments.get(segmentIndex);
|
|
206
|
-
}
|
|
207
|
-
const rawSegment = this.calculateSegment(segmentIndex, fileSize);
|
|
208
|
-
if (segmentIndex === 0) {
|
|
209
|
-
const fd = fs.openSync(this.filePath, "r");
|
|
210
|
-
try {
|
|
211
|
-
const headerBuffer = Buffer.alloc(Math.min(8192, fileSize));
|
|
212
|
-
fs.readSync(fd, headerBuffer, 0, headerBuffer.length, 0);
|
|
213
|
-
const frameStart = this.findNextMp3Frame(headerBuffer, 0);
|
|
214
|
-
const alignedSegment = { start: frameStart, end: rawSegment.end };
|
|
215
|
-
this.frameAlignedSegments.set(segmentIndex, alignedSegment);
|
|
216
|
-
return alignedSegment;
|
|
217
|
-
}
|
|
218
|
-
finally {
|
|
219
|
-
fs.closeSync(fd);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
this.frameAlignedSegments.set(segmentIndex, rawSegment);
|
|
223
|
-
return rawSegment;
|
|
224
|
-
}
|
|
225
|
-
findNextMp3Frame(buffer, startPos) {
|
|
226
|
-
let pos = startPos;
|
|
227
|
-
if (pos === 0 && buffer.length > 10 && buffer.toString('ascii', 0, 3) === 'ID3') {
|
|
228
|
-
const tagSize = ((buffer[6] & 0x7f) << 21) |
|
|
229
|
-
((buffer[7] & 0x7f) << 14) |
|
|
230
|
-
((buffer[8] & 0x7f) << 7) |
|
|
231
|
-
(buffer[9] & 0x7f);
|
|
232
|
-
pos = 10 + tagSize;
|
|
233
|
-
}
|
|
234
|
-
while (pos < buffer.length - 1) {
|
|
235
|
-
if (buffer[pos] === 0xFF && (buffer[pos + 1] & 0xE0) === 0xE0) {
|
|
236
|
-
if (pos + 3 < buffer.length) {
|
|
237
|
-
const header = (buffer[pos] << 24) |
|
|
238
|
-
(buffer[pos + 1] << 16) |
|
|
239
|
-
(buffer[pos + 2] << 8) |
|
|
240
|
-
buffer[pos + 3];
|
|
241
|
-
const version = (header >> 19) & 0x3;
|
|
242
|
-
const layer = (header >> 17) & 0x3;
|
|
243
|
-
const bitrateIndex = (header >> 12) & 0xF;
|
|
244
|
-
const sampleRateIndex = (header >> 10) & 0x3;
|
|
245
|
-
if (version !== 1 && layer !== 0 && bitrateIndex !== 0 &&
|
|
246
|
-
bitrateIndex !== 15 && sampleRateIndex !== 3) {
|
|
247
|
-
return pos;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
pos++;
|
|
252
|
-
}
|
|
253
|
-
return startPos;
|
|
254
|
-
}
|
|
255
|
-
calculatefirst2SegmentSize() {
|
|
256
|
-
return (this.segmentSize / 4) * 3;
|
|
257
|
-
}
|
|
258
263
|
padNumber(value, padding) {
|
|
259
264
|
return value.toString().padStart(padding, '0');
|
|
260
265
|
}
|
|
261
266
|
async getSegmentDuration(segmentIndex) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return cachedSegment.duration;
|
|
267
|
+
if (!Number.isInteger(segmentIndex) || segmentIndex < 0) {
|
|
268
|
+
throw new InvalidParameterError('segmentIndex', segmentIndex);
|
|
265
269
|
}
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
end,
|
|
273
|
-
duration
|
|
274
|
-
});
|
|
275
|
-
return duration;
|
|
270
|
+
const segments = await this.getSegments();
|
|
271
|
+
const segment = segments[segmentIndex];
|
|
272
|
+
if (!segment) {
|
|
273
|
+
throw new InvalidParameterError('segmentIndex', segmentIndex);
|
|
274
|
+
}
|
|
275
|
+
return segment.duration;
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
278
|
export * from './Interfaces/HlsStreamer';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AAKpC,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED