Вот мой код для функции воспроизведения моего бота Discord:
@bot.command()
async def play(ctx, url:str = None): # DOESN'T WORK, DOWNLOADS BUT DOESN'T PLAY
...
ytdl_options = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
ytdl = youtube_dl.YoutubeDL(ytdl_options)
loop = asyncio.get_event_loop()
data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url))
if 'entries' in data:
data = data['entries'][0] # taking top item from a YT playlist
source = ytdl.prepare_filename(data)
vc.play(discord.FFmpegPCMAudio(source)) #play audio
print(vc.is_playing())
await ctx.send("Now playing: " + data.get('title')) #now playing
asyncio.sleep(3)
print(vc.is_playing())
Когда я вызываю функцию, она работает нормально и загружает видео с youtube-dl, затем отправляет сообщение «Сейчас играет: X», но не воспроизводит звук.
Я добавил две print(vc.is_playing())
строки, и в оболочке возвращается:
True
False
Так ясно, что он пытается воспроизвести песню, но сразу терпит неудачу.
Нет исключений, поэтому я не могу понять, почему FFmpeg не хочет воспроизводить аудио.