es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

discord.py ffmpeg la canción se reproduce demasiado rápido al principio.

Construí un bot de Discord utilizando discord.py y ffmpeg, funciona pero la canción en los primeros 0-5 segundos se reproduce demasiado rápido, creo que está en búfer, así que intenté usar asyncio.sleep pero no funcionó, ¿alguna sugerencia para resolver el problema?

función play:

with youtube_dl.YoutubeDL(self.opts) as ydl:
    await asyncio.sleep(0.1)
    ydl.cache.remove()
    await asyncio.sleep(0.1)
    info = ydl.extract_info(url, download=False)
    raw_url_song = info['formats'][0]['url']
    await self.real_play(ctx, raw_url_song)

función real_play:

source = await discord.FFmpegOpusAudio.from_probe(processed_url_song, **self.FFMPEG_OPTIONS)
await asyncio.sleep(0.5)
self.vc.play(source, after=lambda e: asyncio.run_coroutine_threadsafe(self.real_play(ctx, processed_url_song), self.client.loop))

Estas son las opciones:

self.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
self.OPTIONS = {'format': 'bestaudio'}
self.opts = {'extract_flat': True, 'skip_download': True}

Las funciones están separadas porque hago algo más (como listas de reproducción), solo he incluido el código esencial para entender el problema, y la eliminación de caché es esencial para reducir la aparición del error HTTP 404 forbidden, por cierto, incluso sin eliminar la caché, el problema persiste.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una sugerencia sería aumentar el tiempo de retraso entre la extracción y la reproducción del audio. Puedes intentar aumentar el tiempo de espera await asyncio.sleep() en la función play(), quizás a 1 o 2 segundos, y ver si eso soluciona el problema.

    Además, dado que mencionaste que puede ser un problema de almacenamiento en búfer, puedes intentar aumentar el tamaño del búfer en el constructor FFmpegOpusAudio agregando el parámetro buffer_size, de la siguiente manera:

    source = await discord.FFmpegOpusAudio.from_probe(processed_url_song, **self.FFMPEG_OPTIONS, buffer_size=1024*1024)
    

    Esto aumenta el tamaño del búfer a 1 MB, lo cual puede ayudar potencialmente con los problemas de almacenamiento en búfer.

    Otra opción para probar es utilizar una biblioteca o reproductor de audio diferente. discord.py utiliza discord.opus de forma predeterminada, pero puedes intentar utilizar otras bibliotecas como pydub o pyaudio para ver si el problema persiste.

    Por último, asegúrate de que tu conexión a Internet sea estable y lo suficientemente rápida como para descargar y reproducir el audio sin almacenamiento en búfer. También puedes intentar reproducir el mismo audio desde una fuente diferente para descartar cualquier problema con el archivo de audio en sí mismo.

Comments are closed.