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

基于Express与ytdl-core的YouTube视频下载API功能异常排查

问题诊断与修复方案

你的下载请求持续加载无响应,结合此前出现过编码器错误,核心原因大概率是ytdl-core兼容性失效或错误处理缺失导致请求挂起。以下是针对性修复步骤:

1. 更新ytdl-core到最新版本

YouTube会频繁调整视频流获取逻辑,旧版本ytdl-core会直接失效。执行命令更新依赖:

npm update ytdl-core

2. 完善下载路由的错误处理

当前下载路由未捕获ytdl的流错误,一旦请求失败会导致连接一直挂起。修改后端/download路由:

app.get('/download', async (req, res) => {
  const videoUrl = req.query.url;
  const itag = req.query.itag;

  if (!ytdl.validateURL(videoUrl)) {
    return res.status(400).json({ error: '无效的YouTube链接' });
  }

  try {
    // 获取视频标题并处理文件名特殊字符
    const info = await ytdl.getInfo(videoUrl);
    const safeTitle = info.videoDetails.title.replace(/[^\w\s]/gi, '_');
    res.header('Content-Disposition', `attachment; filename="${safeTitle}.mp4"`);

    const stream = ytdl(videoUrl, { filter: format => format.itag == itag });
    stream.pipe(res);

    // 捕获流错误并返回响应
    stream.on('error', (err) => {
      console.error('下载流错误:', err);
      if (!res.headersSent) {
        res.status(500).json({ error: '下载失败,可能是视频格式无法获取或编码器错误' });
      }
    });
  } catch (err) {
    console.error('获取视频信息失败:', err);
    res.status(500).json({ error: '无法获取视频信息' });
  }
});

3. 修复格式过滤逻辑

videoonly过滤的是纯视频流(无音频),这类格式可能存在编码器兼容性问题,优先推荐获取带音频的完整视频格式。修改后端/video-info路由的格式过滤:

// 替换原videoonly为audioandvideo,获取带音频的完整视频格式
const formats = ytdl.filterFormats(info.formats, 'audioandvideo');

4. 优化前端下载触发方式

window.location.href在部分浏览器中可能被拦截,改为创建a标签模拟点击:

const downloadVideo = (itag) => {
  const downloadUrl = `http://localhost:5000/download?url=${encodeURIComponent(url)}&itag=${itag}`;
  const downloadLink = document.createElement('a');
  downloadLink.href = downloadUrl;
  downloadLink.target = '_blank';
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
};

验证步骤

  1. 重启后端服务
  2. 输入YouTube链接获取详情后点击下载,查看后端控制台的错误输出
  3. 若仍报错,根据控制台信息排查(比如部分受版权保护的视频无法下载)

内容的提问来源于stack exchange,提问作者Lorenz Hackl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:25:54