Потоковое аудио с YouTube в HTML-тег аудио - PullRequest
2 голосов
/ 14 июня 2019

Я использую библиотеку под названием 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>

Я смиренно извиняюсь, если это звучит глупо, или я сделал что-то глупое, но я действительно на грани и потерял всякую надежду. Как мне решить или устранить эту ошибку диапазона? Если вы будете так добры, пожалуйста, всем, кто сделал что-то похожее на то, что я делаю, есть ли лучшие альтернативы?

Большое спасибо за ваше время и усилия.

1 Ответ

2 голосов
/ 14 июня 2019

Исправлено: паршивая библиотека использовала устаревшую версию ytdl-core!Я скачал источник youtube-audio-stream и затем обновил ytdl-core до последней версии, теперь все это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...