Как исправить ошибку «Поток генерируется недостаточно быстро», когда заканчивается первый поток песни? - PullRequest
0 голосов
/ 09 января 2019

Я делал бот для discord.js и наткнулся на проблему с воспроизведением потоков с YouTube.

После того, как первый поток завершил воспроизведение ошибок диспетчера с «Поток генерируется недостаточно быстро» и не будет воспроизводить другие потоки, пока я не перезапущу бот.

Я использую эти модули:

  • discord.js@11.4.0
  • ffmpeg@0.0.4
  • ffmped-binaries@3.2.2-3
  • opusscript@0.0.6
  • ytdl-core@0.25.0

Я пытался установить другие версии ytdl-core, но это мне не помогло.

Вот мой код:

const yt = require("ytdl-core");

function play(bot, msg) {
  if (msg.guild.queue.songs.length < 1) {
    msg.guild.queue.playing = false;
    return msg.channel.send("Queue is empty");
  }

  if (!msg.guild.voiceConnection) {
    msg.member.voiceChannel.join().then(con => {
      let song = msg.guild.queue.songs.shift();
      msg.channel.send(`Playing: **${song.title}**!`);
      msg.guild.queue.playing = true;

      msg.guild.queue.dispatcher = con.playStream(yt(song.url))
        .on("end", reason => {
          console.log(reason);
          bot.queue[msg.guild.id].dispatcher.stop();
          setTimeout(play, 500, bot, msg);
        })
        .on("error", err => {
          console.log(err);
          bot.queue[msg.guild.id].dispatcher = null;
          setTimeout(play, 500, bot, msg);
        });
    });
  }
}

exports.run = async(bot, msg, args, ops) => {
  if (!msg.member.voiceChannel) return msg.channel.send("Connect to a voice channel first!");
  if (!args[0]) return msg.channel.send("Specify youtube url first!");
  yt.getInfo(args[0], (err, info) => {
    if (err) return msg.channel.send(err);
    if (!msg.guild.queue) {
      msg.guild.queue = {};
      msg.guild.queue.playing = false;
      msg.guild.queue.songs = [];
      msg.guild.queue.dispatcher = null;
    }
    msg.guild.queue.songs.push({
      url: info.video_url,
      title: info.title,
      requester: msg.author.username
    });
    if (msg.guild.queue.playing) {
      msg.channel.send(`Added **${info.title}** to queue list!`);
    } else {
      play(bot, msg);
    }
  });
}

1 Ответ

0 голосов
/ 16 января 2019

Полагаю, самым простым решением было бы использовать discord.js master / v12-dev, который можно установить, выполнив npm i discordjs/discord.js в основной версии полностью переписаны голосовые функции, что, конечно, имеет некоторые серьезные изменения, но в целом проблема заключается в stream is not generating fast enough от ytdl исправлено в мастере.

...