feat: add support for custom data range

This commit is contained in:
LuanRT
2021-11-04 04:05:16 -03:00
parent 62fbc166c5
commit b9c9d40077

View File

@@ -372,7 +372,7 @@ class Innertube extends EventEmitter {
stream.emit('info', { video_details, selected_format, formats });
}
if (options.type == 'videoandaudio') {
if (options.type == 'videoandaudio' && !options.range) {
const response = await Axios.get(selected_format.url, {
responseType: 'stream',
cancelToken: new CancelToken(function executor(c) { cancel = c; }),
@@ -405,17 +405,19 @@ class Innertube extends EventEmitter {
response.data.pipe(stream, { end: true });
} else {
const chunk_size = 1048576 * 10; // 10MB
let chunk_start = 0;
let chunk_end = chunk_size;
options.range && (options.range.end > chunk_size && (options.range.end = chunk_size));
let chunk_start = (options.range && options.range.start || 0);
let chunk_end = (options.range && options.range.end || chunk_size);
let downloaded_size = 0;
let end = false;
let must_end = false;
stream.emit('start');
const downloadChunk = async () => {
if (chunk_end >= selected_format.contentLength) end = true;
(chunk_end >= selected_format.contentLength || options.range) && (must_end = true);
options.range && (selected_format.contentLength = options.range.end);
const response = await Axios.get(`${selected_format.url}&range=${chunk_start}-${chunk_end || ''}`, {
responseType: 'stream',
cancelToken: new CancelToken(function executor(c) { cancel = c; }),
@@ -443,14 +445,14 @@ class Innertube extends EventEmitter {
});
response.data.on('end', () => {
if (!end) {
if (!must_end && !options.range) {
chunk_start = chunk_end + 1;
chunk_end += chunk_size;
downloadChunk();
}
});
response.data.pipe(stream, { end });
response.data.pipe(stream, { end: must_end });
};
downloadChunk();
}