+
95
-

回答

在浏览器端录制屏幕视频并上传到后端服务器,你可以使用以下步骤和代码示例。这个过程包括捕获屏幕视频、录制视频、将视频数据转换为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”按钮停止录制并上传视频到服务器。

网友回复

我知道答案,我要回答