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

调用ytdl-core给Discord机器人推流时无音频输出且无报错如何解决

问题根因

上述代码存在4个核心问题导致无音频输出也无报错:

  • 未指定ytdl仅拉取音频流,混合流无法被Discord语音模块正确解析
  • 错误使用StreamType.Arbitrary作为输入类型,跳过了必要的音频封装解析步骤
  • 未添加任何错误监听逻辑,底层报错被静默吞噬
  • Idle事件逻辑未做状态校验,流还未完成加载就触发了连接销毁
修复方案

分步调整说明

  • 给ytdl添加参数,仅拉取最高质量的纯音频流,同时设置足够大的缓冲阈值避免流提前中断
  • 将输入流类型替换为StreamType.WebmOpus,适配YouTube默认的opus编码webm音频流格式
  • 补充流和播放器的错误监听逻辑,方便后续定位问题
  • 调整Idle事件逻辑,确认流完全播放结束后再销毁语音连接

修复后完整代码

const stream = ytdl('https://www.youtube.com/watch?v=bPjZmQAvk_8', {
  filter: 'audioonly',
  quality: 'highestaudio',
  highWaterMark: 1 << 25
});

const resource = createAudioResource(stream, { inputType: StreamType.WebmOpus });
const player = createAudioPlayer();

// 错误监听逻辑
stream.on('error', err => console.error('音频流加载失败:', err));
player.on('error', err => console.error('音频播放器运行错误:', err));

player.play(resource);
connection.subscribe(player);

player.on(AudioPlayerStatus.Idle, () => {
  if (stream.readableEnded) {
    connection.destroy();
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:09:03