当前位置:首页 > 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 流或摄像头视频。

js实现视频下载

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);
}

处理跨域问题的解决方案

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

js实现视频下载

  1. 配置服务器 CORS 头

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

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

注意事项

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

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

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.defin…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现

js实现

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

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…