在浏览器端录制屏幕视频并上传到后端服务器,你可以使用以下步骤和代码示例。这个过程包括捕获屏幕视频、录制视频、将视频数据转换为Blob对象,并通过FormData将其上传到服务器。
步骤概览请求屏幕录制权限并捕获屏幕视频。使用MediaRecorder录制视频数据。将录制的视频数据转换为Blob对象。使用FormData将Blob对象发送到后端服务器。完整示例代码HTML 部分<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Screen Recorder</title>
</head>
<body>
<button id="startButton">Start Recording</button>
<button id="stopButton" disabled>Stop Recording</button>
<video id="recordedVideo" controls></video>
<script src="script.js"></script>
</body>
</html> JavaScript 部分 (script.js) document.getElementById('startButton').addEventListener('click', async () => {
const startButton = document.getElementById('startButton');
const stopButton = document.getElementById('stopButton');
const recordedVideo = document.getElementById('recordedVideo');
// Request screen capture
try {
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
// Create MediaRecorder instance to record the stream
const mediaRecorder = new MediaRecorder(stream);
const chunks = [];
// On data available, store the recorded chunks
mediaRecorder.ondataavailable = event => {
if (event.data.size > 0) {
chunks.push(event.data);
}
};
// On stop, create a Blob from the chunks and display the video
mediaRecorder.onstop = async () => {
const blob = new Blob(chunks, { type: 'video/webm' });
const videoURL = URL.createObjectURL(blob);
recordedVideo.src = videoURL;
// Upload the Blob to the server
const formData = new FormData();
formData.append('file', blob, 'recorded_video.webm');
try {
const response = await fetch('/upload', {
method: 'POST',
body: formData
});
if (response.ok) {
console.log('Upload successful!');
} else {
console.error('Upload failed.');
}
} catch (error) {
console.error('Error uploading the video:', error);
}
};
// Start recording
mediaRecorder.start();
startButton.disabled = true;
stopButton.disabled = false;
stopButton.addEventListener('click', () => {
mediaRecorder.stop();
stream.getTracks().forEach(track => track.stop());
startButton.disabled = false;
stopButton.disabled = true;
}, { once: true });
} catch (error) {
console.error('Error accessing display media.', error);
}
}); 服务器端部分 (以Node.js为例)使用Express来处理文件上传你需要安装 express 和 multer 模块:
npm install express multer创建一个简单的服务器 (server.js)
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
console.log('File uploaded:', req.file);
res.send('File uploaded successfully!');
});
app.use(express.static(path.join(__dirname, 'public')));
app.listen(3000, () => {
console.log('Server listening on port 3000');
}); 文件夹结构 your_project/ │ ├── public/ │ ├── index.html │ └── script.js ├── uploads/ ├── node_modules/ ├── package.json └── server.js运行服务器
在你的项目根目录下,运行以下命令:
node server.js
打开浏览器并访问 http://localhost:3000,点击“Start Recording”按钮开始录制屏幕视频,然后点击“Stop Recording”按钮停止录制并上传视频到服务器。
网友回复


