Я использую библиотеку под названием youtube-audio-stream , которая использует fluent-ffmpeg и ytdl-core, чтобы получить читаемый поток из данной ссылки на YouTube, затем направить ее к объекту ответа и использовать эта конечная точка моего экспресс-сервера в качестве источника аудиотега на моей html-странице.
Всякий раз, когда я загружаю html-страницу и пытаюсь нажать кнопку воспроизведения, появляется следующая ошибка:
events.js:467
function arrayClone(arr, n) {
^
RangeError: Maximum call stack size exceeded
at arrayClone (events.js:467:20)
at PassThrough.emit (events.js:196:23)
at PassThrough.output.on.error (C:\development\ElectronTut\ytmp3\node_modules\youtube-audio-stream\index.js:38:16)
at PassThrough.emit (events.js:198:15)
at PassThrough.output.on.error (C:\development\ElectronTut\ytmp3\node_modules\youtube-audio-stream\index.js:38:16)
at PassThrough.emit (events.js:198:15)
at PassThrough.output.on.error (C:\development\ElectronTut\ytmp3\node_modules\youtube-audio-stream\index.js:38:16)
at PassThrough.emit (events.js:198:15)
at PassThrough.output.on.error (C:\development\ElectronTut\ytmp3\node_modules\youtube-audio-stream\index.js:38:16)
at PassThrough.emit (events.js:198:15)
После нескольких часов исследований я наконец сдался и пришел сюда. Из того, что я понимаю, эта ошибка возникает, когда стек вызовов не очищается должным образом до начала следующего тика процесса, большинство форумов stackoverflow продолжали рассказывать о том, как асинхронное программирование приводит к потенциальному бесконечному циклу, но я не запутался вокруг, где нет достаточно места, чтобы понять, где такая петля может возникнуть в потоке.
Вот мой код сервера:
const express = require("express");
const app = new express();
const stream = require('youtube-audio-stream');
const uri = "https://www.youtube.com/watch?v=t1TcDHrkQYg";
app.get("/audio", (req, res) => {
stream(uri).pipe(res);
})
app.listen(3000, () => console.log("Ready!"))
Код моего внешнего интерфейса:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Doc</title>
</head>
<body>
<audio autoplay controls>
<source src="http://localhost:3000/audio" type="audio/mpeg">
</audio>
</body>
</html>
Я смиренно извиняюсь, если это звучит глупо, или я сделал что-то глупое, но я действительно на грани и потерял всякую надежду. Как мне решить или устранить эту ошибку диапазона?
Если вы будете так добры, пожалуйста, всем, кто сделал что-то похожее на то, что я делаю, есть ли лучшие альтернативы?
Большое спасибо за ваше время и усилия.