Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Улучшенный экранный рекордер</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- text-align: center;
- margin-top: 50px;
- }
- button {
- padding: 10px 20px;
- font-size: 16px;
- margin: 10px;
- }
- video {
- max-width: 100%;
- margin-top: 20px;
- }
- #status {
- margin-top: 20px;
- font-size: 18px;
- color: green;
- }
- </style>
- </head>
- <body>
- <h1>Улучшенный экранный рекордер</h1>
- <button id="startBtn">Начать запись</button>
- <button id="stopBtn" disabled>Остановить запись</button>
- <button id="downloadBtn" disabled>Скачать видео</button>
- <div id="status"></div>
- <video id="preview" controls></video>
- <script>
- let mediaRecorder;
- let recordedChunks = [];
- let previewVideo = document.getElementById('preview');
- let startButton = document.getElementById('startBtn');
- let stopButton = document.getElementById('stopBtn');
- let downloadButton = document.getElementById('downloadBtn');
- let statusText = document.getElementById('status');
- // Функция для начала записи
- async function startRecording() {
- try {
- // Запрос доступа к экрану с возможностью записи звука
- const stream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true });
- // Создаем MediaRecorder с настройками качества
- const options = { mimeType: 'video/webm', videoBitsPerSecond: 4_000_000 }; // 4 Mbps
- mediaRecorder = new MediaRecorder(stream, options);
- // Слушатель для получения данных записи
- mediaRecorder.ondataavailable = (event) => {
- if (event.data.size > 0) {
- recordedChunks.push(event.data);
- }
- };
- // Слушатель для завершения записи
- mediaRecorder.onstop = () => {
- setTimeout(() => { // Добавляем задержку для обеспечения обработки всех данных
- if (recordedChunks.length === 0) {
- statusText.textContent = 'Ошибка: запись пустая.';
- return;
- }
- const blob = new Blob(recordedChunks, { type: 'video/webm' });
- recordedChunks = [];
- const url = URL.createObjectURL(blob);
- previewVideo.src = url;
- previewVideo.style.display = 'block';
- statusText.textContent = 'Запись завершена.';
- downloadButton.disabled = false;
- downloadButton.onclick = () => {
- const a = document.createElement('a');
- a.href = url;
- a.download = 'recording.webm';
- a.click();
- };
- }, 500); // Задержка в 500 мс
- };
- // Обработка ошибок потока
- mediaRecorder.onerror = (error) => {
- console.error('Ошибка записи:', error);
- statusText.textContent = 'Ошибка записи: ' + error.message;
- };
- // Начинаем запись
- mediaRecorder.start();
- startButton.disabled = true;
- stopButton.disabled = false;
- statusText.textContent = 'Запись...';
- console.log('Запись началась');
- } catch (error) {
- console.error('Ошибка при попытке записи экрана:', error);
- statusText.textContent = 'Ошибка: ' + error.message;
- }
- }
- // Функция для остановки записи
- function stopRecording() {
- if (mediaRecorder && mediaRecorder.state !== 'inactive') {
- mediaRecorder.stop(); // Останавливаем запись
- startButton.disabled = false;
- stopButton.disabled = true;
- statusText.textContent = 'Остановка записи...';
- console.log('Запись остановлена');
- }
- }
- // Обработчики событий кнопок
- startButton.addEventListener('click', startRecording);
- stopButton.addEventListener('click', stopRecording);
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment