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

ytdl-core与play-dl播放中途中断问题求助(AudioPlayerError: aborted)

解决ytdl-core/play-dl播放音频中途暂停并抛出AudioPlayerError: aborted的问题

问题描述

使用ytdl-core或play-dl获取音频流,通过discord.js的createAudioResource播放时,中途会突然暂停并抛出错误AudioPlayerError: aborted。但直接将流下载到文件能快速完成,说明问题出在实时播放的缓存环节。

相关代码片段:

  • ytdl初始化流:
const stream = ytdl(this.queue[guildID][0].url)
  • play-dl初始化流:
const play_stream = await play.stream(this.queue[guildID][0].url, {
      discordPlayerCompatibility: true,
})
  • 创建音频资源(两种流均出现问题):
const resource = createAudioResource(play_stream.stream, {
             inputType: StreamType.WebmOpus
         });

解决方案

1. 提高流的缓存水位

给ytdl-core或play-dl的流配置更高的highWaterMark,增加缓冲区大小,避免因数据供应滞后导致播放中断:

  • 针对ytdl-core:
const stream = ytdl(this.queue[guildID][0].url, {
  highWaterMark: 1 << 25 // 设置为32MB,可根据实际情况调整
});
  • 针对play-dl:
const play_stream = await play.stream(this.queue[guildID][0].url, {
  discordPlayerCompatibility: true,
  highWaterMark: 1 << 25
});

2. 用临时文件中转音频流

既然直接下载文件无问题,可先将流写入临时文件,再从文件创建音频资源,绕过实时流的缓存限制:

const fs = require('fs');
const { createAudioResource, StreamType } = require('@discordjs/voice');
const { promisify } = require('util');
const pipeline = promisify(require('stream').pipeline);
const tmp = require('tmp'); // 需先安装:npm install tmp

// 生成临时文件
const tmpFile = tmp.fileSync({ postfix: '.webm' });
// 将流写入临时文件
await pipeline(play_stream.stream, fs.createWriteStream(tmpFile.name));
// 从临时文件创建可播放的资源
const resource = createAudioResource(tmpFile.name, {
  inputType: StreamType.WebmOpus
});

// 播放结束后清理临时文件
resource.playStream.on('end', () => {
  tmpFile.removeCallback();
});

3. 调整音频资源的缓存配置

创建AudioResource时,调整缓冲区大小或启用内置缓存优化:

const resource = createAudioResource(play_stream.stream, {
  inputType: StreamType.WebmOpus,
  bufferSize: 4096 * 8 // 增大帧缓存数量
});

4. 更新依赖到最新版本

旧版本的ytdl-core、play-dl或@discordjs/voice可能存在流兼容Bug,更新到最新版本尝试解决:

npm update ytdl-core play-dl @discordjs/voice

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:38