DiscordJS v13音乐机器人加入语音频道后一直缓冲无法播放如何解决?
问题修复方案
1. 补全语音相关意图
你当前的客户端意图缺少GUILD_VOICE_STATES,这是处理语音交互必须的权限,同时需要前往Discord开发者后台,在你对应应用的「Bot」设置页开启语音状态特权意图:
const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES // 新增语音状态意图 ] });
2. 修正音频流配置
你当前使用的流类型StreamType.Arbitrary会强制让库重新编码流,容易出现缓冲卡住的问题,同时给ytdl增加流优化参数:
// 原ytdl调用替换为 const stream = ytdl(vdRepro.url, { filter:'audioonly', quality: 'highestaudio', highWaterMark: 1 << 25 // 扩大缓冲区,减少断流概率 }); // 原音频资源创建替换为,指定流类型为OggOpus避免二次编码 var resource = createAudioResource(stream, { inputType: StreamType.OggOpus });
3. 调整播放器行为配置
将noSubscriber设置改为Play,避免订阅连接还未建立完成时播放器主动暂停:
const player = createAudioPlayer({ behaviors: { noSubscriber: NoSubscriberBehavior.Play, }, });
4. 增加错误和状态监听
新增事件监听定位问题,同时等待语音连接就绪后再播放音频:
// 连接创建后监听就绪事件再播放 connection.on('stateChange', (oldState, newState) => { if (newState.status === 'ready') { player.play(resource); connection.subscribe(player); } }); // 监听播放器错误 player.on('error', error => { console.error('播放器错误:', error); }); // 监听流错误 stream.on('error', error => { console.error('音频流加载错误:', error); });
5. 检查必须依赖是否安装
确保你已安装音频解码必须的依赖:
- opus编码库:执行
npm i @discordjs/opus安装 - ffmpeg:Windows/Linux/macOS对应安装ffmpeg运行环境,或者安装
npm i ffmpeg-static
内容的提问来源于stack exchange,提问作者Samuel Viguera
相关产品推荐
相关产品推荐

