You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复部署在Heroku的discord.py音乐机器人播放中断TLS错误

问题原因

这个报错是FFmpeg拉取YouTube音频流过程中,TLS会话被YouTube服务端主动断开导致,核心诱因有3个:

  • 你直接传递yt-dlp/youtube-dl提取的初始流地址给FFmpeg拉取,这类流地址本身存在有效期,到期后会话自动失效
  • YouTube会对长时间未活动、或来自共用出口IP(Heroku的出口IP属于共享资源,大量用户同时用它请求YouTube)的拉流请求主动掐断连接
  • 旧版本yt-dlp/youtube-dl的流提取逻辑适配性差,更容易触发YouTube的反爬限制
修复方案
  • 给FFmpeg添加重连参数,让播放进程遇到断流时自动重试:
    你调用discord.FFmpegPCMAudio时补充before_options参数即可:
    ffmpeg_cfg = {
        "before_options": "-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 10",
        "options": "-vn"
    }
    voice.play(discord.FFmpegPCMAudio(audio_stream_url, **ffmpeg_cfg))
    
    上述参数会让FFmpeg遇到流断开时自动尝试重连,单次重试最大等待时间为10秒,可覆盖90%以上的临时断流场景。
  • 升级yt-dlp版本,停用早已停止维护的youtube-dl:
    在你的Heroku项目requirements.txt中明确指定yt-dlp的最新稳定版本,避免用旧版本的提取逻辑触发YouTube限制。
  • 改用yt-dlp流式输出给FFmpeg的拉流模式:
    不要让FFmpeg直接请求YouTube的远程地址,改为让yt-dlp负责维持和YouTube的连接、自动处理会话续期,把yt-dlp的标准输出作为FFmpeg的输入源,进一步提升连接稳定性。
  • 必要时给yt-dlp加载YouTube账号Cookie:
    导出你自己的YouTube登录Cookie文件放到项目部署目录,yt-dlp加载Cookie后拉流会被识别为登录用户请求,被主动断流的概率会大幅降低。

内容的提问来源于stack exchange,提问作者Alcatraz b312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:12:01