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

Heroku部署discord.py音乐机器人时FFmpeg无报错无法播放问题

问题排查步骤
  • 首先检查代码中的参数定义问题:你当前代码里self.FFMPEG_OPTIONS的赋值行被//注释了,Python不支持//作为单行注释符,且该行被注释后self.FFMPEG_OPTIONS属于未定义变量,调用play方法时会直接抛出属性错误。请先将该注释符改为#并取消注释,保证参数正确赋值。
  • 异常捕获逻辑存在缺陷:discord.py的play方法是异步调度执行,你当前的try-except块只能捕获调用play方法瞬间抛出的错误,FFmpeg运行时错误、音频流无效等异常不会进入该捕获分支,自然不会打印错误信息。你可以给FFmpegPCMAudio传入stderr=subprocess.STDOUT参数,同时在FFmpeg参数中加入-v error,将FFmpeg运行日志输出到Heroku日志中方便排查。
  • 确认FFmpeg路径配置正确:你使用的FFmpeg buildpack安装后的二进制文件默认路径可能不在系统PATH中,可在代码中添加如下代码验证FFmpeg可用性:
import os
print(os.popen("which ffmpeg").read())

如果返回空值,需要手动给FFmpegPCMAudio传入executable参数,值为/app/vendor/ffmpeg/ffmpeg即可。

  • 验证音频流有效性:pafy在Linux环境下获取的YouTube音频直链大概率存在过期、被区域限制的问题,可打印Song['source']字段的值,在本地直接访问该链接确认是否可以正常获取音频资源。Heroku免费dyno的出口IP经常被YouTube限制访问,你可以尝试替换为非YouTube的音频源测试是否可以正常播放。
  • 确认语音连接状态:打印self.vc[ctx.guild.id].is_connected()的返回值,确认机器人已经成功加入目标语音频道后再调用播放逻辑,未连接状态下调用play方法也会触发静默错误。

内容的提问来源于stack exchange,提问作者No.BoD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:45:03