@ziplayer/plugin 0.2.1 → 0.2.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/YouTubePlugin.d.ts +2 -1
- package/dist/YouTubePlugin.d.ts.map +1 -1
- package/dist/YouTubePlugin.js +45 -6
- package/dist/YouTubePlugin.js.map +1 -1
- package/dist/utils/sabr-stream-factory.d.ts +2 -1
- package/dist/utils/sabr-stream-factory.d.ts.map +1 -1
- package/dist/utils/sabr-stream-factory.js +38 -9
- package/dist/utils/sabr-stream-factory.js.map +1 -1
- package/dist/utils/stream-converter.d.ts +1 -4
- package/dist/utils/stream-converter.d.ts.map +1 -1
- package/dist/utils/stream-converter.js +14 -25
- package/dist/utils/stream-converter.js.map +1 -1
- package/package.json +1 -1
- package/src/YouTubePlugin.ts +48 -7
- package/src/utils/sabr-stream-factory.ts +44 -9
- package/src/utils/stream-converter.ts +12 -27
package/dist/YouTubePlugin.d.ts
CHANGED
|
@@ -2,13 +2,14 @@ import { BasePlugin, Track, SearchResult, StreamInfo, Player } from "ziplayer";
|
|
|
2
2
|
import { Innertube } from "youtubei.js";
|
|
3
3
|
export interface PluginOptions {
|
|
4
4
|
player: Player;
|
|
5
|
-
debug?:
|
|
5
|
+
debug?: (message?: any, ...optionalParams: any[]) => any;
|
|
6
6
|
searchClient?: Innertube;
|
|
7
7
|
client?: Innertube;
|
|
8
8
|
searchLimit?: number;
|
|
9
9
|
clientType?: "WEB" | "ANDROID" | "IOS";
|
|
10
10
|
searchClientType?: "WEB" | "ANDROID" | "IOS";
|
|
11
11
|
fallbackStream?: (track: Track) => Promise<StreamInfo>;
|
|
12
|
+
fistStream?: (track: Track) => Promise<StreamInfo>;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* A plugin for handling YouTube audio content including videos, playlists, and search functionality.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubePlugin.d.ts","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.d.ts","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACzD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;IACvC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC5C,IAAI,SAAa;IACjB,OAAO,SAAW;IAElB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B;;;;;;;;;OASG;gBACS,OAAO,EAAE,aAAa;YAOpB,IAAI;IAoBlB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,UAAU;IAkFlB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAsBjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU9B;;;;;;;;;;;;;;;;;;OAkBG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8EvE;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA+BzE;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IA2GlD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAwB7H;;;;;;;;;;;;;;;;;;OAkBG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAYpD,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;CAQrB"}
|
package/dist/YouTubePlugin.js
CHANGED
|
@@ -68,9 +68,11 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
68
68
|
youtubei_js_1.Log.setLevel(0);
|
|
69
69
|
}
|
|
70
70
|
debug(message, ...optionalParams) {
|
|
71
|
-
if (this
|
|
71
|
+
if (this?.player && this.player?.listenerCount("debug") > 0) {
|
|
72
72
|
this.player.emit("debug", `[YouTubePlugin] ${message}`, ...optionalParams);
|
|
73
73
|
}
|
|
74
|
+
if (this.options.debug)
|
|
75
|
+
this.options.debug(`[YouTubePlugin] ${message}`, ...optionalParams);
|
|
74
76
|
}
|
|
75
77
|
// Build a Track from various YouTube object shapes (search item, playlist item, watch_next feed, basic_info, info)
|
|
76
78
|
buildTrack(raw, requestedBy, extra) {
|
|
@@ -314,6 +316,24 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
314
316
|
* console.log(streamInfo.stream); // Readable stream
|
|
315
317
|
*/
|
|
316
318
|
async getStream(track) {
|
|
319
|
+
if (this.options?.fistStream && typeof this.options.fistStream === "function") {
|
|
320
|
+
this.debug("🔁 Attempting user-provided fist stream method");
|
|
321
|
+
let fbStream = null;
|
|
322
|
+
try {
|
|
323
|
+
fbStream = await this.options.fistStream(track);
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
fbStream = null;
|
|
327
|
+
this.debug(`⚠️ User-provided fist stream failed: ${err?.message}`);
|
|
328
|
+
}
|
|
329
|
+
if (fbStream && fbStream?.stream) {
|
|
330
|
+
this.debug("✅ User-provided fist stream successful");
|
|
331
|
+
return fbStream;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
this.debug("⚠️ User-provided fist stream failed or returned invalid stream");
|
|
335
|
+
}
|
|
336
|
+
}
|
|
317
337
|
await this.ready;
|
|
318
338
|
const id = this.extractVideoId(track.url) || track.id;
|
|
319
339
|
if (!id)
|
|
@@ -321,11 +341,21 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
321
341
|
try {
|
|
322
342
|
this.debug("🚀 Attempting sabr download for video ID:", id);
|
|
323
343
|
// Use sabr download for better quality and reliability
|
|
324
|
-
|
|
344
|
+
// Pass optimized options for memory efficiency
|
|
345
|
+
const sabrOptions = { ...sabr_stream_factory_1.DEFAULT_SABR_OPTIONS };
|
|
346
|
+
const { stream, title, format } = await (0, sabr_stream_factory_1.createSabrStream)(id, this.client, sabrOptions);
|
|
325
347
|
this.debug("✅ Sabr download successful, stream ready");
|
|
326
348
|
if (!stream) {
|
|
327
349
|
throw new Error("Sabr download did not return a stream");
|
|
328
350
|
}
|
|
351
|
+
// Add error handler to prevent unhandled rejections from SABR
|
|
352
|
+
stream.on("error", (error) => {
|
|
353
|
+
const errorMsg = error.message || String(error);
|
|
354
|
+
// Log but suppress "Controller is already closed" errors as they're expected during cleanup
|
|
355
|
+
if (!errorMsg.includes("Controller is already closed")) {
|
|
356
|
+
this.debug("⚠️ SABR stream error:", errorMsg);
|
|
357
|
+
}
|
|
358
|
+
});
|
|
329
359
|
return {
|
|
330
360
|
stream: stream,
|
|
331
361
|
type: "arbitrary",
|
|
@@ -349,15 +379,23 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
349
379
|
this.debug("⚠️ User-provided fallback stream failed or returned invalid stream");
|
|
350
380
|
}
|
|
351
381
|
}
|
|
382
|
+
// Fallback: Use memory-optimized quality (high instead of best to reduce bandwidth by ~40%)
|
|
352
383
|
const stream = await this.client.download(id, {
|
|
353
384
|
type: "audio",
|
|
354
|
-
quality: "best"
|
|
385
|
+
quality: "high", // Changed from "best" to reduce memory usage
|
|
355
386
|
});
|
|
356
387
|
// Check if it's a Web Stream and convert it
|
|
357
388
|
this.debug("🔍 Checking stream type:", typeof stream, stream?.constructor?.name);
|
|
358
389
|
if (stream && typeof stream.getReader === "function") {
|
|
359
|
-
this.debug("🔄 Converting Web Stream to Node.js Stream");
|
|
360
|
-
const nodeStream = (0, stream_converter_1.webStreamToNodeStream)(stream);
|
|
390
|
+
this.debug("🔄 Converting Web Stream to Node.js Stream with backpressure handling");
|
|
391
|
+
const nodeStream = (0, stream_converter_1.webStreamToNodeStream)(stream, 32 * 1024); // Optimized buffer size
|
|
392
|
+
// Add error handler to prevent unhandled rejections
|
|
393
|
+
nodeStream.on("error", (error) => {
|
|
394
|
+
const errorMsg = error.message || String(error);
|
|
395
|
+
if (!errorMsg.includes("Controller is already closed")) {
|
|
396
|
+
this.debug("⚠️ Fallback stream error:", errorMsg);
|
|
397
|
+
}
|
|
398
|
+
});
|
|
361
399
|
this.debug("✅ Stream converted successfully");
|
|
362
400
|
return {
|
|
363
401
|
stream: nodeStream,
|
|
@@ -368,8 +406,9 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
368
406
|
else {
|
|
369
407
|
this.debug("⚠️ Stream is not a Web Stream or is null");
|
|
370
408
|
}
|
|
409
|
+
// Final fallback - just return the stream with optimized buffer
|
|
371
410
|
return {
|
|
372
|
-
stream: (0, stream_converter_1.webStreamToNodeStream)(stream),
|
|
411
|
+
stream: (0, stream_converter_1.webStreamToNodeStream)(stream, 32 * 1024),
|
|
373
412
|
type: "arbitrary",
|
|
374
413
|
metadata: track.metadata,
|
|
375
414
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubePlugin.js","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.js","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,8 @@ export declare function sanitizeFileName(name: string): string;
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function bytesToMB(bytes: number): string;
|
|
40
40
|
/**
|
|
41
|
-
* Default sabr playback options
|
|
41
|
+
* Default sabr playback options - optimized for memory usage
|
|
42
|
+
* Using MEDIUM quality and WebM/Opus reduces bandwidth by ~30-40%
|
|
42
43
|
*/
|
|
43
44
|
export declare const DEFAULT_SABR_OPTIONS: SabrPlaybackOptions;
|
|
44
45
|
//# sourceMappingURL=sabr-stream-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sabr-stream-factory.d.ts","sourceRoot":"","sources":["../../src/utils/sabr-stream-factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AASzC,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACxB;AA4GD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"sabr-stream-factory.d.ts","sourceRoot":"","sources":["../../src/utils/sabr-stream-factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AASzC,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACxB;AA4GD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,CA0G1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAYrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAkBD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,mBAMlC,CAAC"}
|
|
@@ -121,7 +121,34 @@ async function createSabrStream(videoId, innertube, options) {
|
|
|
121
121
|
if (!serverAbrStreamingUrl || !ustreamerConfig) {
|
|
122
122
|
throw new Error("Missing SABR streaming config");
|
|
123
123
|
}
|
|
124
|
-
const sabrFormats = player.streaming_data?.adaptive_formats.map((f) =>
|
|
124
|
+
// const sabrFormats = player.streaming_data?.adaptive_formats.map((f: any) => buildSabrFormat(f)) || [];
|
|
125
|
+
// const sabrFormats =
|
|
126
|
+
// player.streaming_data?.adaptive_formats?.reduce((acc: any[], f: any) => {
|
|
127
|
+
// if (!!f?.audio_quality) {
|
|
128
|
+
// acc.push(buildSabrFormat(f));
|
|
129
|
+
// }
|
|
130
|
+
// return acc;
|
|
131
|
+
// }, []) ?? [];
|
|
132
|
+
const allFormats = player.streaming_data?.adaptive_formats.map((f) => (0, utils_1.buildSabrFormat)(f)) || [];
|
|
133
|
+
console.log();
|
|
134
|
+
const sabrFormats = allFormats
|
|
135
|
+
.reduce((acc, f) => {
|
|
136
|
+
// Kiểm tra nếu là Audio (có audioQuality)
|
|
137
|
+
if (f.audioQuality) {
|
|
138
|
+
if (!acc[0] || f.bitrate > acc[0].bitrate) {
|
|
139
|
+
acc[0] = f;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Ngược lại là Video (thường có width/height hoặc không có audioQuality)
|
|
143
|
+
else if (f.width) {
|
|
144
|
+
if (!acc[1] || f.bitrate < acc[1].bitrate) {
|
|
145
|
+
acc[1] = f;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return acc;
|
|
149
|
+
}, [null, null]) // [0] là best audio, [1] là worst video
|
|
150
|
+
.filter(Boolean);
|
|
151
|
+
console.log(sabrFormats);
|
|
125
152
|
const sabr = new sabr_stream_1.SabrStream({
|
|
126
153
|
formats: sabrFormats,
|
|
127
154
|
serverAbrStreamingUrl,
|
|
@@ -148,11 +175,12 @@ async function createSabrStream(videoId, innertube, options) {
|
|
|
148
175
|
}
|
|
149
176
|
});
|
|
150
177
|
// Start the stream with audio preference
|
|
178
|
+
const mergedOptions = { ...exports.DEFAULT_SABR_OPTIONS, ...options };
|
|
151
179
|
const { audioStream, selectedFormats } = await sabr.start({
|
|
152
|
-
|
|
180
|
+
audioQuality: mergedOptions?.audioQuality || "medium",
|
|
153
181
|
});
|
|
154
|
-
// Convert Web Stream to Node.js Readable stream
|
|
155
|
-
const nodeStream = (0, stream_converter_1.webStreamToNodeStream)(audioStream);
|
|
182
|
+
// Convert Web Stream to Node.js Readable stream with optimized buffer
|
|
183
|
+
const nodeStream = (0, stream_converter_1.webStreamToNodeStream)(audioStream, 32 * 1024); // 32KB buffer for YouTube streams
|
|
156
184
|
return {
|
|
157
185
|
title,
|
|
158
186
|
stream: nodeStream,
|
|
@@ -208,13 +236,14 @@ function getExtensionFromMimeType(mimeType) {
|
|
|
208
236
|
return mimeMap[mimeType] || "bin";
|
|
209
237
|
}
|
|
210
238
|
/**
|
|
211
|
-
* Default sabr playback options
|
|
239
|
+
* Default sabr playback options - optimized for memory usage
|
|
240
|
+
* Using MEDIUM quality and WebM/Opus reduces bandwidth by ~30-40%
|
|
212
241
|
*/
|
|
213
242
|
exports.DEFAULT_SABR_OPTIONS = {
|
|
214
|
-
preferWebM: true,
|
|
215
|
-
preferOpus: true,
|
|
216
|
-
videoQuality: "
|
|
217
|
-
audioQuality: "
|
|
243
|
+
preferWebM: true, // WebM with Opus is more memory-efficient
|
|
244
|
+
preferOpus: true, // Opus codec = smaller bitrate vs AAC
|
|
245
|
+
videoQuality: "360p", // Lower resolution = less processing
|
|
246
|
+
audioQuality: "medium", // Medium quality balances quality vs bandwidth (~96-128kbps vs 256kbps)
|
|
218
247
|
enabledTrackTypes: "VIDEO_AND_AUDIO",
|
|
219
248
|
};
|
|
220
249
|
//# sourceMappingURL=sabr-stream-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sabr-stream-factory.js","sourceRoot":"","sources":["../../src/utils/sabr-stream-factory.ts"],"names":[],"mappings":";;;AAmJA,
|
|
1
|
+
{"version":3,"file":"sabr-stream-factory.js","sourceRoot":"","sources":["../../src/utils/sabr-stream-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
import { Readable } from "stream";
|
|
2
|
-
|
|
3
|
-
* Converts a Web ReadableStream to a Node.js Readable stream
|
|
4
|
-
*/
|
|
5
|
-
export declare function webStreamToNodeStream(webStream: ReadableStream): Readable;
|
|
2
|
+
export declare function webStreamToNodeStream(webStream: ReadableStream, highWaterMark?: number): Readable;
|
|
6
3
|
//# sourceMappingURL=stream-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-converter.d.ts","sourceRoot":"","sources":["../../src/utils/stream-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC
|
|
1
|
+
{"version":3,"file":"stream-converter.d.ts","sourceRoot":"","sources":["../../src/utils/stream-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,GAAE,MAAkB,GAAG,QAAQ,CAkB5G"}
|
|
@@ -2,35 +2,24 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.webStreamToNodeStream = webStreamToNodeStream;
|
|
4
4
|
const stream_1 = require("stream");
|
|
5
|
-
|
|
6
|
-
* Converts a Web ReadableStream to a Node.js Readable stream
|
|
7
|
-
*/
|
|
8
|
-
function webStreamToNodeStream(webStream) {
|
|
9
|
-
const nodeStream = new stream_1.Readable({
|
|
10
|
-
read() {
|
|
11
|
-
// This will be handled by the Web Stream reader
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
// Create a reader from the Web Stream
|
|
5
|
+
function webStreamToNodeStream(webStream, highWaterMark = 64 * 1024) {
|
|
15
6
|
const reader = webStream.getReader();
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
return new stream_1.Readable({
|
|
8
|
+
highWaterMark: highWaterMark ?? 64 * 1024,
|
|
9
|
+
async read() {
|
|
10
|
+
try {
|
|
20
11
|
const { done, value } = await reader.read();
|
|
21
12
|
if (done) {
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
this.push(null);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
this.push(value);
|
|
24
17
|
}
|
|
25
|
-
nodeStream.push(Buffer.from(value));
|
|
26
18
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
// Start pumping data
|
|
33
|
-
pump();
|
|
34
|
-
return nodeStream;
|
|
19
|
+
catch (err) {
|
|
20
|
+
this.destroy(err);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
});
|
|
35
24
|
}
|
|
36
25
|
//# sourceMappingURL=stream-converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-converter.js","sourceRoot":"","sources":["../../src/utils/stream-converter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"stream-converter.js","sourceRoot":"","sources":["../../src/utils/stream-converter.ts"],"names":[],"mappings":";;AAEA,sDAkBC;AApBD,mCAAkC;AAElC,SAAgB,qBAAqB,CAAC,SAAyB,EAAE,gBAAwB,EAAE,GAAG,IAAI;IACjG,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;IAErC,OAAO,IAAI,iBAAQ,CAAC;QACnB,aAAa,EAAE,aAAa,IAAI,EAAE,GAAG,IAAI;QACzC,KAAK,CAAC,IAAI;YACT,IAAI,CAAC;gBACJ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,GAAY,CAAC,CAAC;YAC5B,CAAC;QACF,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
package/src/YouTubePlugin.ts
CHANGED
|
@@ -6,13 +6,14 @@ import { webStreamToNodeStream } from "./utils/stream-converter";
|
|
|
6
6
|
|
|
7
7
|
export interface PluginOptions {
|
|
8
8
|
player: Player;
|
|
9
|
-
debug?:
|
|
9
|
+
debug?: (message?: any, ...optionalParams: any[]) => any;
|
|
10
10
|
searchClient?: Innertube;
|
|
11
11
|
client?: Innertube;
|
|
12
12
|
searchLimit?: number;
|
|
13
13
|
clientType?: "WEB" | "ANDROID" | "IOS";
|
|
14
14
|
searchClientType?: "WEB" | "ANDROID" | "IOS";
|
|
15
15
|
fallbackStream?: (track: Track) => Promise<StreamInfo>;
|
|
16
|
+
fistStream?: (track: Track) => Promise<StreamInfo>;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -88,9 +89,10 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
private debug(message?: any, ...optionalParams: any[]): void {
|
|
91
|
-
if (this
|
|
92
|
+
if (this?.player && this.player?.listenerCount("debug") > 0) {
|
|
92
93
|
this.player.emit("debug", `[YouTubePlugin] ${message}`, ...optionalParams);
|
|
93
94
|
}
|
|
95
|
+
if (this.options.debug) this.options.debug(`[YouTubePlugin] ${message}`, ...optionalParams);
|
|
94
96
|
}
|
|
95
97
|
// Build a Track from various YouTube object shapes (search item, playlist item, watch_next feed, basic_info, info)
|
|
96
98
|
private buildTrack(raw: any, requestedBy: string, extra?: { playlist?: string }): Track {
|
|
@@ -388,6 +390,23 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
388
390
|
* console.log(streamInfo.stream); // Readable stream
|
|
389
391
|
*/
|
|
390
392
|
async getStream(track: Track): Promise<StreamInfo> {
|
|
393
|
+
if (this.options?.fistStream && typeof this.options.fistStream === "function") {
|
|
394
|
+
this.debug("🔁 Attempting user-provided fist stream method");
|
|
395
|
+
let fbStream = null;
|
|
396
|
+
try {
|
|
397
|
+
fbStream = await this.options.fistStream(track);
|
|
398
|
+
} catch (err: any) {
|
|
399
|
+
fbStream = null;
|
|
400
|
+
this.debug(`⚠️ User-provided fist stream failed: ${err?.message}`);
|
|
401
|
+
}
|
|
402
|
+
if (fbStream && fbStream?.stream) {
|
|
403
|
+
this.debug("✅ User-provided fist stream successful");
|
|
404
|
+
return fbStream;
|
|
405
|
+
} else {
|
|
406
|
+
this.debug("⚠️ User-provided fist stream failed or returned invalid stream");
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
391
410
|
await this.ready;
|
|
392
411
|
|
|
393
412
|
const id = this.extractVideoId(track.url) || track.id;
|
|
@@ -397,7 +416,9 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
397
416
|
try {
|
|
398
417
|
this.debug("🚀 Attempting sabr download for video ID:", id);
|
|
399
418
|
// Use sabr download for better quality and reliability
|
|
400
|
-
|
|
419
|
+
// Pass optimized options for memory efficiency
|
|
420
|
+
const sabrOptions = { ...DEFAULT_SABR_OPTIONS };
|
|
421
|
+
const { stream, title, format } = await createSabrStream(id, this.client, sabrOptions);
|
|
401
422
|
|
|
402
423
|
this.debug("✅ Sabr download successful, stream ready");
|
|
403
424
|
|
|
@@ -405,6 +426,15 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
405
426
|
throw new Error("Sabr download did not return a stream");
|
|
406
427
|
}
|
|
407
428
|
|
|
429
|
+
// Add error handler to prevent unhandled rejections from SABR
|
|
430
|
+
stream.on("error", (error: Error) => {
|
|
431
|
+
const errorMsg = error.message || String(error);
|
|
432
|
+
// Log but suppress "Controller is already closed" errors as they're expected during cleanup
|
|
433
|
+
if (!errorMsg.includes("Controller is already closed")) {
|
|
434
|
+
this.debug("⚠️ SABR stream error:", errorMsg);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
|
|
408
438
|
return {
|
|
409
439
|
stream: stream,
|
|
410
440
|
type: "arbitrary",
|
|
@@ -427,16 +457,26 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
427
457
|
}
|
|
428
458
|
}
|
|
429
459
|
|
|
460
|
+
// Fallback: Use memory-optimized quality (high instead of best to reduce bandwidth by ~40%)
|
|
430
461
|
const stream = await this.client.download(id, {
|
|
431
462
|
type: "audio",
|
|
432
|
-
quality: "best"
|
|
463
|
+
quality: "high", // Changed from "best" to reduce memory usage
|
|
433
464
|
});
|
|
434
465
|
|
|
435
466
|
// Check if it's a Web Stream and convert it
|
|
436
467
|
this.debug("🔍 Checking stream type:", typeof stream, stream?.constructor?.name);
|
|
437
468
|
if (stream && typeof stream.getReader === "function") {
|
|
438
|
-
this.debug("🔄 Converting Web Stream to Node.js Stream");
|
|
439
|
-
const nodeStream = webStreamToNodeStream(stream);
|
|
469
|
+
this.debug("🔄 Converting Web Stream to Node.js Stream with backpressure handling");
|
|
470
|
+
const nodeStream = webStreamToNodeStream(stream, 32 * 1024); // Optimized buffer size
|
|
471
|
+
|
|
472
|
+
// Add error handler to prevent unhandled rejections
|
|
473
|
+
nodeStream.on("error", (error: Error) => {
|
|
474
|
+
const errorMsg = error.message || String(error);
|
|
475
|
+
if (!errorMsg.includes("Controller is already closed")) {
|
|
476
|
+
this.debug("⚠️ Fallback stream error:", errorMsg);
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
|
|
440
480
|
this.debug("✅ Stream converted successfully");
|
|
441
481
|
return {
|
|
442
482
|
stream: nodeStream,
|
|
@@ -447,8 +487,9 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
447
487
|
this.debug("⚠️ Stream is not a Web Stream or is null");
|
|
448
488
|
}
|
|
449
489
|
|
|
490
|
+
// Final fallback - just return the stream with optimized buffer
|
|
450
491
|
return {
|
|
451
|
-
stream: webStreamToNodeStream(stream),
|
|
492
|
+
stream: webStreamToNodeStream(stream, 32 * 1024),
|
|
452
493
|
type: "arbitrary",
|
|
453
494
|
metadata: track.metadata,
|
|
454
495
|
};
|
|
@@ -168,7 +168,40 @@ export async function createSabrStream(
|
|
|
168
168
|
throw new Error("Missing SABR streaming config");
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
const sabrFormats = player.streaming_data?.adaptive_formats.map((f: any) => buildSabrFormat(f)) || [];
|
|
171
|
+
// const sabrFormats = player.streaming_data?.adaptive_formats.map((f: any) => buildSabrFormat(f)) || [];
|
|
172
|
+
|
|
173
|
+
// const sabrFormats =
|
|
174
|
+
// player.streaming_data?.adaptive_formats?.reduce((acc: any[], f: any) => {
|
|
175
|
+
// if (!!f?.audio_quality) {
|
|
176
|
+
// acc.push(buildSabrFormat(f));
|
|
177
|
+
// }
|
|
178
|
+
// return acc;
|
|
179
|
+
// }, []) ?? [];
|
|
180
|
+
const allFormats = player.streaming_data?.adaptive_formats.map((f: any) => buildSabrFormat(f)) || [];
|
|
181
|
+
console.log();
|
|
182
|
+
|
|
183
|
+
const sabrFormats = allFormats
|
|
184
|
+
.reduce(
|
|
185
|
+
(acc: any[], f: any) => {
|
|
186
|
+
// Kiểm tra nếu là Audio (có audioQuality)
|
|
187
|
+
if (f.audioQuality) {
|
|
188
|
+
if (!acc[0] || f.bitrate > acc[0].bitrate) {
|
|
189
|
+
acc[0] = f;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Ngược lại là Video (thường có width/height hoặc không có audioQuality)
|
|
193
|
+
else if (f.width) {
|
|
194
|
+
if (!acc[1] || f.bitrate < acc[1].bitrate) {
|
|
195
|
+
acc[1] = f;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return acc;
|
|
199
|
+
},
|
|
200
|
+
[null, null],
|
|
201
|
+
) // [0] là best audio, [1] là worst video
|
|
202
|
+
.filter(Boolean);
|
|
203
|
+
|
|
204
|
+
console.log(sabrFormats);
|
|
172
205
|
|
|
173
206
|
const sabr = new SabrStream({
|
|
174
207
|
formats: sabrFormats,
|
|
@@ -202,12 +235,13 @@ export async function createSabrStream(
|
|
|
202
235
|
});
|
|
203
236
|
|
|
204
237
|
// Start the stream with audio preference
|
|
238
|
+
const mergedOptions = { ...DEFAULT_SABR_OPTIONS, ...options };
|
|
205
239
|
const { audioStream, selectedFormats } = await sabr.start({
|
|
206
|
-
|
|
240
|
+
audioQuality: mergedOptions?.audioQuality || "medium",
|
|
207
241
|
});
|
|
208
242
|
|
|
209
|
-
// Convert Web Stream to Node.js Readable stream
|
|
210
|
-
const nodeStream = webStreamToNodeStream(audioStream);
|
|
243
|
+
// Convert Web Stream to Node.js Readable stream with optimized buffer
|
|
244
|
+
const nodeStream = webStreamToNodeStream(audioStream, 32 * 1024); // 32KB buffer for YouTube streams
|
|
211
245
|
|
|
212
246
|
return {
|
|
213
247
|
title,
|
|
@@ -271,12 +305,13 @@ function getExtensionFromMimeType(mimeType: string): string {
|
|
|
271
305
|
}
|
|
272
306
|
|
|
273
307
|
/**
|
|
274
|
-
* Default sabr playback options
|
|
308
|
+
* Default sabr playback options - optimized for memory usage
|
|
309
|
+
* Using MEDIUM quality and WebM/Opus reduces bandwidth by ~30-40%
|
|
275
310
|
*/
|
|
276
311
|
export const DEFAULT_SABR_OPTIONS: SabrPlaybackOptions = {
|
|
277
|
-
preferWebM: true,
|
|
278
|
-
preferOpus: true,
|
|
279
|
-
videoQuality: "
|
|
280
|
-
audioQuality: "
|
|
312
|
+
preferWebM: true, // WebM with Opus is more memory-efficient
|
|
313
|
+
preferOpus: true, // Opus codec = smaller bitrate vs AAC
|
|
314
|
+
videoQuality: "360p", // Lower resolution = less processing
|
|
315
|
+
audioQuality: "medium", // Medium quality balances quality vs bandwidth (~96-128kbps vs 256kbps)
|
|
281
316
|
enabledTrackTypes: "VIDEO_AND_AUDIO",
|
|
282
317
|
};
|
|
@@ -1,36 +1,21 @@
|
|
|
1
1
|
import { Readable } from "stream";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* Converts a Web ReadableStream to a Node.js Readable stream
|
|
5
|
-
*/
|
|
6
|
-
export function webStreamToNodeStream(webStream: ReadableStream): Readable {
|
|
7
|
-
const nodeStream = new Readable({
|
|
8
|
-
read() {
|
|
9
|
-
// This will be handled by the Web Stream reader
|
|
10
|
-
},
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
// Create a reader from the Web Stream
|
|
3
|
+
export function webStreamToNodeStream(webStream: ReadableStream, highWaterMark: number = 64 * 1024): Readable {
|
|
14
4
|
const reader = webStream.getReader();
|
|
15
5
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
6
|
+
return new Readable({
|
|
7
|
+
highWaterMark: highWaterMark ?? 64 * 1024,
|
|
8
|
+
async read() {
|
|
9
|
+
try {
|
|
20
10
|
const { done, value } = await reader.read();
|
|
21
11
|
if (done) {
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
this.push(null);
|
|
13
|
+
} else {
|
|
14
|
+
this.push(value);
|
|
24
15
|
}
|
|
25
|
-
|
|
16
|
+
} catch (err) {
|
|
17
|
+
this.destroy(err as Error);
|
|
26
18
|
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
// Start pumping data
|
|
33
|
-
pump();
|
|
34
|
-
|
|
35
|
-
return nodeStream;
|
|
19
|
+
},
|
|
20
|
+
});
|
|
36
21
|
}
|