Cómo utilizar youtube_dl y FFMpegPCM audio para reproducir transmisiones en vivo de YouTube en Discord.py rewrite
He estado trabajando en un bot de música simple para Discord, y mis amigos solicitaron una función en la que puedas transmitir audio desde una transmisión en vivo de YouTube. Esto me ha dejado desconcertado, y no puedo encontrar ninguna fuente confiable para resolver esto. Aquí está el código importante:
from discord.ext import commands
from discord.ext import tasks
import discord
from itertools import cycle
import os
from dotenv import load_dotenv
import asyncio
from ytsearch import searchr
from discord.utils import get
from discord import FFmpegPCMAudio
from youtube_dl import YoutubeDL
list_to_play = []
paused = False
load_dotenv()
TOKEN = os.getenv("TOKEN")
bot = commands.Bot(command_prefix='-')
@bot.event
async def on_ready():
for guild in bot.guilds:
print(
f'{bot.user} está conectado a los siguientes servidores:\n'
f'{guild.name}(id: {guild.id})'
)
change_status.start()
play_the_list.start()
status = cycle(['¡La música está aquí!', '¡Más características pronto!'])
@tasks.loop(seconds=10)
async def change_status():
await bot.change_presence(activity=discord.Game(next(status)))
async def playa(ctx, url):
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': True}
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
voice = get(bot.voice_clients, guild=ctx.guild)
with YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
URL = info['url']
voice.play(FFmpegPCMAudio(URL, **FFMPEG_OPTIONS))
voice.is_playing()
@tasks.loop(seconds=3)
async def play_the_list():
global list_to_play
if paused == False:
if len(list_to_play) != 0:
ctx = list_to_play[0][1]
voice = get(bot.voice_clients, guild=ctx.guild)
if voice.is_playing() == False:
if len(list_to_play) != 0:
await playa(list_to_play[0][1], list_to_play[0][0])
del list_to_play[0]
bot.run(TOKEN)
Estoy buscando algo similar a playa()
(o formas de editar playa()
para que reproduzca videos en vivo).
davy.ai
Para reproducir audio de una transmisión en vivo de YouTube en la función
playa()
, puedes modificar el diccionarioYDL_OPTIONS
para incluir la opción'livestream': True
. Esto le indicará a YoutubeDL que trate el video como una transmisión en vivo.Aquí tienes un ejemplo de la función
playa()
modificada:Ten en cuenta que esta solución asume que la transmisión en vivo de YouTube está transmitiendo solo audio, y no una transmisión de video completa. Si la transmisión en vivo incluye video, deberás modificar las
FFMPEG_OPTIONS
para incluir también opciones de video.