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

如何用JavaScript在客户端将FLV/HLS流转换为MP4并下载?

客户端JS实现FLV/HLS转MP4并下载

核心思路

客户端直接处理视频格式转换,得用WebAssembly版的转码工具,最常用的是ffmpeg.wasm——它能在浏览器里调用FFmpeg的转码能力。你原来的代码只是直接拉取原文件,要实现转码后下载,得调整流程:先获取媒体文件,再转码,最后生成MP4下载链接。

实现步骤

  • 引入ffmpeg.wasm依赖
    引入WebAssembly版本的FFmpeg库(ffmpeg.wasm),可以通过项目依赖安装或直接引入其编译后的脚本文件。

  • 替换原下载逻辑为转码下载
    把原来的downloadFile函数替换成以下逻辑,实现拉取、转码、下载全流程:

    const { createFFmpeg, fetchFile } = FFmpeg;
    const ffmpeg = createFFmpeg({ log: true });
    
    async function transcodeAndDownload(url) {
      // 初始化FFmpeg实例
      await ffmpeg.load();
      
      // 拉取远程FLV/HLS文件到虚拟文件系统
      const inputFileName = url.split('/').pop();
      ffmpeg.FS('writeFile', inputFileName, await fetchFile(url));
      
      // 执行转码命令:FLV转MP4(HLS流需额外参数)
      await ffmpeg.run('-i', inputFileName, 'output.mp4');
      
      // 读取转码后的MP4文件
      const data = ffmpeg.FS('readFile', 'output.mp4');
      
      // 创建下载链接并触发下载
      const link = document.createElement('a');
      link.href = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
      link.download = inputFileName.replace(/\.[^/.]+$/, '.mp4');
      document.body.appendChild(link);
      link.click();
      
      // 清理资源,避免内存泄漏
      URL.revokeObjectURL(link.href);
      document.body.removeChild(link);
      ffmpeg.FS('unlink', inputFileName);
      ffmpeg.FS('unlink', 'output.mp4');
    }
    
    // 调用示例
    const url = 'https://getsamplefiles.com/download/flv/sample-1.flv';
    transcodeAndDownload(url);
    

关键注意点

  • HLS流特殊处理:如果处理的是HLS(.m3u8)直播流,需要给FFmpeg添加允许加载外部资源的参数,转码命令改成:
    await ffmpeg.run('-allowed_extensions', 'ALL', '-i', inputFileName, 'output.mp4');
    
  • 性能限制:客户端转码非常消耗浏览器性能,低配置设备可能出现卡顿甚至崩溃,建议只在桌面端或高性能设备上使用。
  • 跨域问题:确保CDN上的媒体文件配置了CORS跨域允许,否则无法通过浏览器拉取文件进行转码。
  • 直播流实时性说明:如果是实时直播流,上述方法只能处理已下载的片段,无法做到真正的实时转码下载。若要捕获实时直播流,可结合MediaRecorder API:先通过video元素加载直播流,再捕获video的媒体流并保存为MP4,但MediaRecorder对输出编码格式有要求,部分浏览器可能只支持特定编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:44:56