問題描述
我在使用 discord.py 和 youtube_dl 時遇到了這個問題,在隊列中播放 YouTube 鏈接給我一個錯誤,似乎滾雪球"進入隊列中的其他歌曲.第一首歌通常播放得很好,但其他歌曲在很短的時間后就會出現這個錯誤.這是錯誤:
I have been running into this issue with discord.py and youtube_dl where playing YouTube links in a queue gives me an error that seems to "snowball" into the other songs in the queue. The first song usually plays just fine, but then the rest of the songs give this error after a very short period of time. This is the error:
[tls @ 000001e5618bc200] Error in the pull function.
[matroska,webm @ 000001e5613f9740] Read error
[tls @ 000001e5618bc200] The specified session has been invalidated for some reason.
Last message repeated 1 times
[really long link] I/O error
這是我的 YTDL 源代碼和隊列函數:
And this is my code for the YTDL source and the queue function:
class YTDLSource(discord.PCMVolumeTransformer):
def __init__(self, source, *, data, volume=0.5):
super().__init__(source, volume)
self.data = data
self.title = data.get('title')
self.url = data.get('url')
@classmethod
async def from_url(cls, url, *, loop=None, stream=False):
loop = loop or asyncio.get_event_loop()
data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream))
if 'entries' in data:
# take first item from a playlist
data = data['entries'][0]
filename = data['url'] if stream else ytdl.prepare_filename(data)
return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)
queues = {}
class Music(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command()
async def q(self, ctx, *, url):
channel = discord.utils.get(ctx.guild.voice_channels, name="Melodies of Arts")
if ctx.voice_client is None:
await channel.connect()
def check_queue(error):
if(queues[ctx.guild.id] != []):
player = queues[ctx.guild.id].pop(0)
ctx.voice_client.play(player, after=check_queue)
async with ctx.typing():
player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True)
if ctx.guild.id in queues:
queues[ctx.guild.id].append(player)
else:
queues[ctx.guild.id] = [player]
await ctx.send("Video __" + str(player.title) + "__" + " queued at **Position #" + str(len(queues[ctx.guild.id])) + "**", delete_after=15)
if(not ctx.voice_client.is_playing()):
ctx.voice_client.play(player, after=check_queue)
await ctx.send('***Now playing:*** __{}__'.format(player.title), delete_after=10)
Github 問題頁面建議重新下載 url",但我正在使用 youtube_dl 流式傳輸鏈接,并且我希望盡可能避免下載視頻.無論如何,很多 Github 問題似乎都已經過時了,因此任何與代碼相關的解決方案都不再適用.如果我需要提供更多代碼/信息,請告訴我!
A Github issue page recommended to "redownload the url", but I am streaming the the link using youtube_dl, and I would like to avoid downloading the video if possible. A lot of the Github issues seem to be too outdated anyway, so any solutions relating to code do not work anymore. If I need to provide more code/information let me know!
推薦答案
正如人們常說的,這真的不是你的錯".這通常發生在 YouTube 方面.
As people like to say, "It's really not your fault". This usually happens from the YouTube side.
看看:Python Youtube ffmpeg 會話已失效
另外,請檢查您是否使用 https
進行了調用.YouTube 不再接受 http
連接.
Also, check that you called using https
. YouTube no longer accepts http
connections.
這篇關于discord.py 和 youtube_dl,“讀取錯誤";和“會話因某種原因已失效"的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!