gpt4 book ai didi

python - 播放音频时,最后一部分被切断。如何解决这个问题? (不和谐.py)

转载 作者:行者123 更新时间:2023-12-04 09:54:18 24 4
gpt4 key购买 nike

我有一个我正在制作的机器人,我已经想出了如何让它从 youtube 播放音频。音频是流式传输的,因此文件不会下载到我的 PC。这是我的代码:

@bot.command(name='play', aliases=['p'], help='Plays a song.')
async def play(ctx, url):
channel = ctx.message.author.voice.channel
if ctx.guild.voice_client is None:
await channel.connect()
client = ctx.guild.voice_client
player = await YTDLSource.from_url(url, stream = True)
ctx.voice_client.play(player)
await ctx.send('Now Playing: {}'.format(player.title))

我正在使用一些未在此块中显示的代码,因为它是 basic_voice.py 包的一部分(在此处找到: https://github.com/Rapptz/discord.py/blob/master/examples/basic_voice.py ,我使用的是第 12-52 行)。我的问题是音频在最后被切断,FFMPEG 窗口在我的 PC 上关闭。当我在 PC 上测试本地文件时也发生了这种情况。我不确定为什么 FFMPEG 会提前关闭,但如果可能的话,我想修复它。此外,如果这很重要,最后切断的数量取决于正在播放的音频的长度。播放器没有延迟地工作,它只是神秘地停止了。

最佳答案

当您尝试制作不下载正在播放的歌曲的机器人时,这是一个已知问题。解释在这里:https://support.discord.com/hc/en-us/articles/360035010351--Known-Issue-Music-Bots-Not-Playing-Music-From-Certain-Sources
要解决此问题,您可以使用 FFmpegPCMAudio discord.py 中的方法并提供特定选项,以便机器人能够重新连接并继续播放视频:

ydl_opts = {'format': 'bestaudio'}
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}

@bot.command(name='play', aliases=['p'], help='Plays a song.')
async def play(ctx, url):
channel = ctx.message.author.voice.channel
voice = get(self.bot.voice_clients, guild=ctx.guild)

if voice and voice.is_connected():
await voice.move_to(channel)
else:
voice = await channel.connect()

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
source = ydl.extract_info(url, download=False)['formats'][0]['url']

voice.play(discord.FFmpegPCMAudio(song['source'], **FFMPEG_OPTIONS))
voice.is_playing

关于python - 播放音频时,最后一部分被切断。如何解决这个问题? (不和谐.py),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61959495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com