当前位置:首页 > JavaScript

js实现视频下载

2026-01-30 23:56:47JavaScript

使用 Blob 对象和 URL.createObjectURL 下载视频

通过将视频数据转换为 Blob 对象并创建临时 URL 实现下载。需要确保服务器允许跨域请求或视频源与网页同域。

function downloadVideo(url, filename) {
  fetch(url)
    .then(response => response.blob())
    .then(blob => {
      const blobUrl = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = blobUrl;
      a.download = filename || 'video.mp4';
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(blobUrl);
    });
}

通过 MediaRecorder API 录制流媒体

适用于需要录制正在播放的视频流的情况,如 WebRTC 流或摄像头视频。

function recordStream(videoElement, duration, filename) {
  const stream = videoElement.captureStream();
  const recorder = new MediaRecorder(stream);
  const chunks = [];

  recorder.ondataavailable = e => chunks.push(e.data);
  recorder.onstop = () => {
    const blob = new Blob(chunks, { type: 'video/webm' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = filename || 'recording.webm';
    a.click();
  };

  recorder.start();
  setTimeout(() => recorder.stop(), duration);
}

使用 Service Worker 缓存视频

对于需要离线下载的场景,可以通过 Service Worker 缓存视频资源。

// 在 Service Worker 中
self.addEventListener('fetch', event => {
  if (event.request.url.includes('.mp4')) {
    event.respondWith(
      caches.match(event.request)
        .then(response => response || fetch(event.request))
    );
  }
});

// 在主线程中
async function cacheVideo(url) {
  const cache = await caches.open('video-cache');
  await cache.add(url);
}

处理跨域问题的解决方案

当视频资源存在跨域限制时,可以考虑以下方法:

  1. 配置服务器 CORS 头

    Access-Control-Allow-Origin: *
    Access-Control-Expose-Headers: Content-Length
  2. 使用代理服务器中转请求

    js实现视频下载

    const proxyUrl = 'https://cors-anywhere.herokuapp.com/';
    fetch(proxyUrl + originalUrl)
    .then(response => response.blob())
    // 后续处理与常规下载相同

注意事项

  • 浏览器安全策略可能阻止某些下载行为
  • 大文件下载需要考虑内存占用和进度显示
  • 部分视频网站有DRM保护,无法直接下载
  • 移动端浏览器可能存在更多限制

标签: 视频下载js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…