Discord机器人播放音频时FFmpeg进程返回码1异常终止问题求助
Discord机器人播放音频时FFmpeg进程返回码1异常终止问题求助
大家好,我最近在开发Discord机器人的音频播放功能时碰到了棘手问题,折腾了半天还是没搞定,想请各位大佬帮忙排查下。
先贴出我的实现代码:
@client.tree.command() async def play(interaction: Interaction, url: str): global voice channel = interaction.user.voice.channel voice = get(client.voice_clients, Guild=interaction.guild) if voice and voice.is_connected(): await voice.move_to(channel) await interaction.response.send_message(f"error") else: voice = await channel.connect() await interaction.response.send_message(f"joined") voice.play(discord.FFmpegPCMAudio(executable="C:/ffmpeg/bin/ffmpeg.exe", source = url))
一开始我遇到了FFmpeg未找到的错误,单独下载FFmpeg并指定路径后这个问题解决了,但现在又出现了新的异常,日志信息如下:
2022-12-10 19:32:48 INFO discord.voice_client Connecting to voice... 2022-12-10 19:32:48 INFO discord.voice_client Starting voice handshake... (connection attempt 1) 2022-12-10 19:32:48 INFO discord.voice_client Voice handshake complete. Endpoint found russia9326.discord.media 2022-12-10 19:32:50 INFO discord.player ffmpeg process 12040 successfully terminated with return code of 1.
FFmpeg进程直接返回码1终止,音频完全无法播放,我实在找不到问题根源,有没有朋友能指点一下?
可能的排查与解决方向
- 先验证音频源的有效性:你可以直接在命令行用FFmpeg测试目标URL/文件是否能正常解析,执行命令:
如果命令行报错,说明是音频源本身的问题(比如URL无效、格式不支持、需要权限访问等),优先解决源的问题。ffmpeg -i 你的音频源地址 -f null - - 检查FFmpeg路径与环境配置:确认
C:/ffmpeg/bin/ffmpeg.exe文件是否真实存在、路径拼写无误。也可以尝试把FFmpeg添加到系统环境变量PATH中,然后代码里去掉executable参数,直接用discord.FFmpegPCMAudio(source=url),避免路径配置带来的潜在问题。 - 指定适配Discord的音频参数:Discord语音仅支持Opus编码的音频,你可以给FFmpeg强制加上转码参数,修改播放代码如下:
voice.play(discord.FFmpegPCMAudio( executable="C:/ffmpeg/bin/ffmpeg.exe", source=url, options="-vn -acodec libopus -b:a 128k" )) - 排查权限与网络限制:如果是网络音频URL,确认机器人所在环境能正常访问该地址(比如有没有防火墙、代理限制);如果是本地文件,检查文件路径是否正确,机器人是否有读取该文件的权限。
备注:内容来源于stack exchange,提问作者morichh
相关产品推荐
相关产品推荐

