Discord.py机器人音频播放无输出:无报错、is_playing返回True
Discord Bot音频无输出问题修复方案
voice.play() 方法本身无返回值,所以打印sound得到None属于正常行为,和音频加载无关。针对is_playing()返回True但无音频输出的问题,可按以下步骤修复:
1. 调整FFmpeg调用参数
默认的FFmpegPCMAudio参数不符合Discord音频传输要求,修改播放代码为:
voice.play(discord.FFmpegPCMAudio( source="song.mp3", before_options="-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5", options="-vn" ))
参数说明:
before_options配置音频流自动重连逻辑,避免网络波动导致的无输出-vn禁用视频流处理,避免格式解析错误
2. 修复语音频道连接逻辑
原代码每次调用play都会尝试连接频道,若Bot已在频道中会触发隐性异常,替换原有连接逻辑:
# 替换原await voice_channel.connect()代码块 if ctx.voice_client is None: await voice_channel.connect() else: await ctx.voice_client.move_to(voice_channel)
3. 验证FFmpeg环境
确认运行环境已安装FFmpeg且可被程序调用:
- Windows:将ffmpeg.exe放在Bot根目录,或添加FFmpeg路径到系统环境变量
- Linux:执行
apt install ffmpeg安装 - Mac:执行
brew install ffmpeg安装
4. 检查Bot权限
确认Bot在对应服务器拥有以下权限:
- 连接语音频道
- 语音发言
- 无频道级的发言限制
5. 替换音频下载依赖
原项目使用的youtube-dl已停止维护,大概率出现音频下载异常,建议替换为yt-dlp:
- 执行
pip install yt-dlp安装 - 将代码中
import youtube_dl修改为import yt_dlp as youtube_dl即可,无需修改其他调用逻辑
内容的提问来源于stack exchange,提问作者coolcoder123
相关产品推荐
相关产品推荐

