discord.py - FFmpegPCMAudio 使用大量 CPU

Posted

技术标签:

【中文标题】discord.py - FFmpegPCMAudio 使用大量 CPU【英文标题】:discord.py - FFmpegPCMAudio using a lot of CPU 【发布时间】:2020-11-02 02:09:52 【问题描述】:

我使用 discord.py 库制作了一个 Discord 机器人,该库旨在在多个语音频道中播放网络广播。基本上每个频道都是相同的音频流。

我现在正在做的是:

voice_channel.play(discord.FFmpegPCMAudio(stream_url))

但是,每个 FFmpegPCMAudio 使用大约 10% 的 CPU,并且每个 vc 都有一个,所以最终我的机器人在 10 个通道中播放时崩溃了很多(这不是很多)。

由于是同一个流,我尝试了以下方法:

player = FFmpegPCMAudio(stream_url)
for voice_channel in vcs:
    voice_channel.play(player)

但是声音很卡顿(可能是像线程一样按顺序播放声音)

你能想出任何其他方法来减少 CPU 的负载,因为它是在播放相同的音频流吗?可能是 discord.py 技巧或 FFmpeg 技巧,例如手动运行一个 FFmpeg 并将其用于每个通道?

【问题讨论】:

【参考方案1】:

FFmpegPCMAudio 更改为FFmpegOpusAudio 似乎是一种解决方案,因为它大大降低了CPU 使用率。可能不是最好的解决方案,所以我还在等着看是否有某种方法可以只拥有一个 FFmpeg 音频源。

【讨论】:

这里也一样,谢谢! FFmpegOpusAudio 的使用量减少了 30% 是的,来自FFmpegOpusAudio“而不是像FFmpegPCMAudio那样产生需要编码为Opus的PCM数据包,这个类产生Opus数据包,跳过编码步骤完成图书馆。”

以上是关于discord.py - FFmpegPCMAudio 使用大量 CPU的主要内容,如果未能解决你的问题,请参考以下文章

Discord嵌入图像在discord.py中不起作用

discord.Embed 不被视为嵌入 discord.py

Discord bot 添加对消息 discord.py 的反应(无自定义表情符号)

Discord 机器人帮助命令 [discord.py]

discord.py,同时使用斜杠命令和前缀

Discord 音乐机器人 - 队列 (discord.py)