You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Heroku的Discord.js音乐机器人播放数分钟后崩溃问题求助

错误根因

这个AudioPlayerError: aborted报错本质是音频播放过程中底层TLS连接被远端或网络环境主动重置,且该错误事件没有被捕获,导致Node.js进程直接崩溃:

  • 触发连接重置的常见原因包括:音乐源(如YouTube)的反爬机制主动断开长连接、Heroku出站连接的最长存活时间限制被触发、连续播放过程中网络链路波动
  • @discordjs/voice库的AudioPlayer默认不会自动处理流中断错误,必须手动监听error事件,否则只要出现一次流异常就会触发未捕获异常终止进程
修复方案
  • 第一步:给AudioPlayer添加全局错误监听,捕获异常后自动切歌,避免进程崩溃
const { createAudioPlayer, AudioPlayerStatus } = require('@discordjs/voice');
const audioPlayer = createAudioPlayer();

// 监听播放错误
audioPlayer.on('error', (err) => {
  console.error('播放异常:', err.message);
  // 销毁出错的资源
  err.resource?.destroy();
  // 替换为你的队列切歌逻辑
  if (global.playQueue.length > 0) {
    const next = global.playQueue.shift();
    playAudio(next.url);
  } else {
    audioPlayer.stop();
  }
});
  • 第二步:优化流处理逻辑,每首歌播放结束后主动销毁所有关联的流、ffmpeg进程、音频资源实例,避免残留连接占用网络资源
  • 第三步:适配Heroku环境限制,每播放4-6首歌主动触发一次语音频道重连,重置网络链路,避免累计触发Heroku的长连接超时规则;如果使用的是免费dyno,建议升级为基础付费dyno,免费版的网络限制更严格,更容易触发连接重置

内容的提问来源于stack exchange,提问作者JoJo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:00