FFmpeg Discord.js音乐机器人随机停播自动切歌问题求助
故障修复方案
核心问题原因
你定义的ffmpeg_options重连配置未实际传入音频资源创建逻辑,YouTube音频流触发TLS连接中断后无重连机制,播放器直接进入idle状态触发自动切歌逻辑。
具体修改步骤
- 优化ytdl流参数,降低断连概率
修改video_player函数中的ytdl调用代码:
const stream = ytdl(song.url, { filter: 'audioonly', highWaterMark: 1 << 25, // 配置32MB缓存,减少长音频断连概率 requestOptions: { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36' } } });
- 传入ffmpeg重连配置
修改createAudioResource调用,传入已定义的重连参数:
const resource = createAudioResource(stream, ffmpeg_options);
- 新增播放器错误捕获逻辑
在给player绑定idle事件的位置新增错误监听,报错后自动重试当前歌曲,避免直接切歌:
player.on('error', error => { console.error('播放器异常,重试当前歌曲:', error.message); video_player(guild, song_queue.songs[0]); });
- 可选优化:避免重复创建player实例
删除video_player函数中重复创建player的逻辑,全局仅初始化一次播放器实例即可,避免多实例冲突。
内容的提问来源于stack exchange,提问作者Cameron Glenn
相关产品推荐
相关产品推荐

